From 1742f2620054cf9c503ab04f591107f00ef132cc Mon Sep 17 00:00:00 2001 From: Ari Mehta Date: Tue, 17 Dec 2024 07:27:17 -0600 Subject: [PATCH] Installed appwrite skd via command line --- appwrite.js | 1 + node_modules/.package-lock.json | 155 +- .../appwrite/.github/workflows/autoclose.yml | 11 - .../appwrite/.github/workflows/publish.yml | 42 - node_modules/appwrite/.travis.yml | 32 + node_modules/appwrite/README.md | 6 +- node_modules/appwrite/dist/cjs/sdk.js | 2056 ++-- node_modules/appwrite/dist/cjs/sdk.js.map | 2 +- node_modules/appwrite/dist/esm/sdk.js | 2056 ++-- node_modules/appwrite/dist/esm/sdk.js.map | 2 +- node_modules/appwrite/dist/iife/sdk.js | 2057 ++-- .../account/create-anonymous-session.md | 4 +- .../account/create-email-password-session.md | 4 +- .../examples/account/create-email-token.md | 4 +- .../docs/examples/account/create-j-w-t.md | 4 +- .../account/create-magic-u-r-l-token.md | 4 +- .../account/create-mfa-authenticator.md | 4 +- .../examples/account/create-mfa-challenge.md | 4 +- .../account/create-mfa-recovery-codes.md | 4 +- .../examples/account/create-o-auth2session.md | 2 +- .../examples/account/create-o-auth2token.md | 2 +- .../examples/account/create-phone-token.md | 4 +- .../account/create-phone-verification.md | 4 +- .../examples/account/create-push-target.md | 4 +- .../docs/examples/account/create-recovery.md | 4 +- .../docs/examples/account/create-session.md | 4 +- .../examples/account/create-verification.md | 4 +- .../appwrite/docs/examples/account/create.md | 4 +- .../docs/examples/account/delete-identity.md | 4 +- .../account/delete-mfa-authenticator.md | 7 +- .../examples/account/delete-push-target.md | 4 +- .../docs/examples/account/delete-session.md | 4 +- .../docs/examples/account/delete-sessions.md | 4 +- .../account/get-mfa-recovery-codes.md | 4 +- .../docs/examples/account/get-prefs.md | 4 +- .../docs/examples/account/get-session.md | 4 +- .../appwrite/docs/examples/account/get.md | 4 +- .../docs/examples/account/list-identities.md | 4 +- .../docs/examples/account/list-logs.md | 4 +- .../docs/examples/account/list-mfa-factors.md | 4 +- .../docs/examples/account/list-sessions.md | 4 +- .../docs/examples/account/update-email.md | 4 +- .../docs/examples/account/update-m-f-a.md | 4 +- .../account/update-magic-u-r-l-session.md | 4 +- .../account/update-mfa-authenticator.md | 4 +- .../examples/account/update-mfa-challenge.md | 4 +- .../account/update-mfa-recovery-codes.md | 4 +- .../docs/examples/account/update-name.md | 4 +- .../docs/examples/account/update-password.md | 4 +- .../examples/account/update-phone-session.md | 4 +- .../account/update-phone-verification.md | 4 +- .../docs/examples/account/update-phone.md | 4 +- .../docs/examples/account/update-prefs.md | 4 +- .../examples/account/update-push-target.md | 4 +- .../docs/examples/account/update-recovery.md | 4 +- .../docs/examples/account/update-session.md | 4 +- .../docs/examples/account/update-status.md | 4 +- .../examples/account/update-verification.md | 4 +- .../docs/examples/avatars/get-browser.md | 2 +- .../docs/examples/avatars/get-credit-card.md | 2 +- .../docs/examples/avatars/get-favicon.md | 2 +- .../docs/examples/avatars/get-flag.md | 2 +- .../docs/examples/avatars/get-image.md | 2 +- .../docs/examples/avatars/get-initials.md | 2 +- .../appwrite/docs/examples/avatars/get-q-r.md | 2 +- .../examples/databases/create-document.md | 4 +- .../examples/databases/delete-document.md | 4 +- .../docs/examples/databases/get-document.md | 4 +- .../docs/examples/databases/list-documents.md | 4 +- .../examples/databases/update-document.md | 4 +- .../examples/functions/create-execution.md | 7 +- .../docs/examples/functions/get-execution.md | 4 +- .../examples/functions/list-executions.md | 4 +- .../docs/examples/graphql/mutation.md | 4 +- .../appwrite/docs/examples/graphql/query.md | 4 +- .../appwrite/docs/examples/locale/get.md | 4 +- .../docs/examples/locale/list-codes.md | 4 +- .../docs/examples/locale/list-continents.md | 4 +- .../examples/locale/list-countries-e-u.md | 4 +- .../examples/locale/list-countries-phones.md | 4 +- .../docs/examples/locale/list-countries.md | 4 +- .../docs/examples/locale/list-currencies.md | 4 +- .../docs/examples/locale/list-languages.md | 4 +- .../examples/messaging/create-subscriber.md | 4 +- .../examples/messaging/delete-subscriber.md | 4 +- .../docs/examples/storage/create-file.md | 4 +- .../docs/examples/storage/delete-file.md | 4 +- .../examples/storage/get-file-download.md | 2 +- .../docs/examples/storage/get-file-preview.md | 2 +- .../docs/examples/storage/get-file-view.md | 2 +- .../docs/examples/storage/get-file.md | 4 +- .../docs/examples/storage/list-files.md | 4 +- .../docs/examples/storage/update-file.md | 4 +- .../docs/examples/teams/create-membership.md | 4 +- .../appwrite/docs/examples/teams/create.md | 4 +- .../docs/examples/teams/delete-membership.md | 4 +- .../appwrite/docs/examples/teams/delete.md | 4 +- .../docs/examples/teams/get-membership.md | 4 +- .../appwrite/docs/examples/teams/get-prefs.md | 4 +- .../appwrite/docs/examples/teams/get.md | 4 +- .../docs/examples/teams/list-memberships.md | 4 +- .../appwrite/docs/examples/teams/list.md | 4 +- .../teams/update-membership-status.md | 4 +- .../docs/examples/teams/update-membership.md | 4 +- .../docs/examples/teams/update-name.md | 4 +- .../docs/examples/teams/update-prefs.md | 4 +- node_modules/appwrite/package.json | 6 +- node_modules/appwrite/rollup.config.js | 6 +- node_modules/appwrite/src/client.ts | 370 +- .../appwrite/src/enums/credit-card.ts | 2 +- node_modules/appwrite/src/enums/flag.ts | 1 - node_modules/appwrite/src/id.ts | 23 +- node_modules/appwrite/src/index.ts | 7 - node_modules/appwrite/src/models.ts | 21 +- node_modules/appwrite/src/permission.ts | 47 +- node_modules/appwrite/src/query.ts | 162 +- node_modules/appwrite/src/service.ts | 3 - node_modules/appwrite/src/services/account.ts | 1305 ++- node_modules/appwrite/src/services/avatars.ts | 283 +- .../appwrite/src/services/databases.ts | 145 +- .../appwrite/src/services/functions.ts | 96 +- node_modules/appwrite/src/services/graphql.ts | 56 +- node_modules/appwrite/src/services/locale.ts | 197 +- .../appwrite/src/services/messaging.ts | 59 +- node_modules/appwrite/src/services/storage.ts | 302 +- node_modules/appwrite/src/services/teams.ts | 378 +- node_modules/appwrite/types/client.d.ts | 86 +- .../appwrite/types/enums/credit-card.d.ts | 2 +- node_modules/appwrite/types/enums/flag.d.ts | 1 - node_modules/appwrite/types/id.d.ts | 15 - node_modules/appwrite/types/index.d.ts | 7 - node_modules/appwrite/types/models.d.ts | 21 +- node_modules/appwrite/types/permission.d.ts | 36 - node_modules/appwrite/types/query.d.ts | 160 - node_modules/appwrite/types/service.d.ts | 3 - .../appwrite/types/services/account.d.ts | 481 +- .../appwrite/types/services/avatars.d.ts | 134 +- .../appwrite/types/services/databases.d.ts | 38 +- .../appwrite/types/services/functions.d.ts | 27 +- .../appwrite/types/services/graphql.d.ts | 12 +- .../appwrite/types/services/locale.d.ts | 67 +- .../appwrite/types/services/messaging.d.ts | 12 +- .../appwrite/types/services/storage.d.ts | 97 +- .../appwrite/types/services/teams.d.ts | 132 +- node_modules/asynckit/LICENSE | 21 + node_modules/asynckit/README.md | 233 + node_modules/asynckit/bench.js | 76 + node_modules/asynckit/index.js | 6 + node_modules/asynckit/lib/abort.js | 29 + node_modules/asynckit/lib/async.js | 34 + node_modules/asynckit/lib/defer.js | 26 + node_modules/asynckit/lib/iterate.js | 75 + .../asynckit/lib/readable_asynckit.js | 91 + .../asynckit/lib/readable_parallel.js | 25 + node_modules/asynckit/lib/readable_serial.js | 25 + .../asynckit/lib/readable_serial_ordered.js | 29 + node_modules/asynckit/lib/state.js | 37 + node_modules/asynckit/lib/streamify.js | 141 + node_modules/asynckit/lib/terminator.js | 29 + node_modules/asynckit/package.json | 63 + node_modules/asynckit/parallel.js | 43 + node_modules/asynckit/serial.js | 17 + node_modules/asynckit/serialOrdered.js | 75 + node_modules/asynckit/stream.js | 21 + node_modules/combined-stream/License | 19 + node_modules/combined-stream/Readme.md | 138 + .../combined-stream/lib/combined_stream.js | 208 + node_modules/combined-stream/package.json | 25 + node_modules/combined-stream/yarn.lock | 17 + node_modules/cross-fetch/LICENSE | 21 + node_modules/cross-fetch/README.md | 169 + .../cross-fetch/dist/browser-polyfill.js | 532 + .../cross-fetch/dist/browser-ponyfill.js | 554 ++ node_modules/cross-fetch/dist/cross-fetch.js | 2 + .../cross-fetch/dist/cross-fetch.js.map | 1 + .../cross-fetch/dist/node-polyfill.js | 11 + .../cross-fetch/dist/node-ponyfill.js | 22 + .../cross-fetch/dist/react-native-polyfill.js | 12 + .../cross-fetch/dist/react-native-ponyfill.js | 6 + node_modules/cross-fetch/index.d.ts | 14 + node_modules/cross-fetch/package.json | 129 + .../cross-fetch/polyfill/package.json | 8 + node_modules/delayed-stream/.npmignore | 1 + node_modules/delayed-stream/License | 19 + node_modules/delayed-stream/Makefile | 7 + node_modules/delayed-stream/Readme.md | 141 + .../delayed-stream/lib/delayed_stream.js | 107 + node_modules/delayed-stream/package.json | 27 + node_modules/form-data/License | 19 + node_modules/form-data/Readme.md | 350 + node_modules/form-data/index.d.ts | 51 + node_modules/form-data/lib/browser.js | 2 + node_modules/form-data/lib/form_data.js | 484 + node_modules/form-data/lib/populate.js | 10 + .../node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 584 ++ .../node_modules/safe-buffer/index.d.ts | 187 + .../node_modules/safe-buffer/index.js | 65 + .../node_modules/safe-buffer/package.json | 51 + node_modules/form-data/package.json | 72 + node_modules/isomorphic-form-data/License | 19 + node_modules/isomorphic-form-data/Readme.md | 46 + .../isomorphic-form-data/lib/browser.js | 1 + .../isomorphic-form-data/lib/index.js | 1 + .../isomorphic-form-data/package.json | 22 + node_modules/mime-db/HISTORY.md | 507 + node_modules/mime-db/LICENSE | 23 + node_modules/mime-db/README.md | 100 + node_modules/mime-db/db.json | 8519 +++++++++++++++++ node_modules/mime-db/index.js | 12 + node_modules/mime-db/package.json | 60 + node_modules/mime-types/HISTORY.md | 397 + node_modules/mime-types/LICENSE | 23 + node_modules/mime-types/README.md | 113 + node_modules/mime-types/index.js | 188 + node_modules/mime-types/package.json | 44 + node_modules/node-fetch/LICENSE.md | 22 + node_modules/node-fetch/README.md | 590 ++ node_modules/node-fetch/browser.js | 25 + node_modules/node-fetch/lib/index.es.js | 1688 ++++ node_modules/node-fetch/lib/index.js | 1697 ++++ node_modules/node-fetch/lib/index.mjs | 1686 ++++ node_modules/node-fetch/package.json | 76 + node_modules/tr46/.npmignore | 4 + node_modules/tr46/index.js | 193 + node_modules/tr46/lib/.gitkeep | 0 node_modules/tr46/lib/mappingTable.json | 1 + node_modules/tr46/package.json | 31 + node_modules/webidl-conversions/LICENSE.md | 12 + node_modules/webidl-conversions/README.md | 53 + node_modules/webidl-conversions/lib/index.js | 189 + node_modules/webidl-conversions/package.json | 23 + node_modules/whatwg-url/LICENSE.txt | 21 + node_modules/whatwg-url/README.md | 67 + node_modules/whatwg-url/lib/URL-impl.js | 200 + node_modules/whatwg-url/lib/URL.js | 196 + node_modules/whatwg-url/lib/public-api.js | 11 + .../whatwg-url/lib/url-state-machine.js | 1297 +++ node_modules/whatwg-url/lib/utils.js | 20 + node_modules/whatwg-url/package.json | 32 + package-lock.json | 157 +- package.json | 2 +- 242 files changed, 28902 insertions(+), 6230 deletions(-) delete mode 100644 node_modules/appwrite/.github/workflows/autoclose.yml delete mode 100644 node_modules/appwrite/.github/workflows/publish.yml create mode 100644 node_modules/appwrite/.travis.yml create mode 100644 node_modules/asynckit/LICENSE create mode 100644 node_modules/asynckit/README.md create mode 100644 node_modules/asynckit/bench.js create mode 100644 node_modules/asynckit/index.js create mode 100644 node_modules/asynckit/lib/abort.js create mode 100644 node_modules/asynckit/lib/async.js create mode 100644 node_modules/asynckit/lib/defer.js create mode 100644 node_modules/asynckit/lib/iterate.js create mode 100644 node_modules/asynckit/lib/readable_asynckit.js create mode 100644 node_modules/asynckit/lib/readable_parallel.js create mode 100644 node_modules/asynckit/lib/readable_serial.js create mode 100644 node_modules/asynckit/lib/readable_serial_ordered.js create mode 100644 node_modules/asynckit/lib/state.js create mode 100644 node_modules/asynckit/lib/streamify.js create mode 100644 node_modules/asynckit/lib/terminator.js create mode 100644 node_modules/asynckit/package.json create mode 100644 node_modules/asynckit/parallel.js create mode 100644 node_modules/asynckit/serial.js create mode 100644 node_modules/asynckit/serialOrdered.js create mode 100644 node_modules/asynckit/stream.js create mode 100644 node_modules/combined-stream/License create mode 100644 node_modules/combined-stream/Readme.md create mode 100644 node_modules/combined-stream/lib/combined_stream.js create mode 100644 node_modules/combined-stream/package.json create mode 100644 node_modules/combined-stream/yarn.lock create mode 100644 node_modules/cross-fetch/LICENSE create mode 100644 node_modules/cross-fetch/README.md create mode 100644 node_modules/cross-fetch/dist/browser-polyfill.js create mode 100644 node_modules/cross-fetch/dist/browser-ponyfill.js create mode 100644 node_modules/cross-fetch/dist/cross-fetch.js create mode 100644 node_modules/cross-fetch/dist/cross-fetch.js.map create mode 100644 node_modules/cross-fetch/dist/node-polyfill.js create mode 100644 node_modules/cross-fetch/dist/node-ponyfill.js create mode 100644 node_modules/cross-fetch/dist/react-native-polyfill.js create mode 100644 node_modules/cross-fetch/dist/react-native-ponyfill.js create mode 100644 node_modules/cross-fetch/index.d.ts create mode 100644 node_modules/cross-fetch/package.json create mode 100644 node_modules/cross-fetch/polyfill/package.json create mode 100644 node_modules/delayed-stream/.npmignore create mode 100644 node_modules/delayed-stream/License create mode 100644 node_modules/delayed-stream/Makefile create mode 100644 node_modules/delayed-stream/Readme.md create mode 100644 node_modules/delayed-stream/lib/delayed_stream.js create mode 100644 node_modules/delayed-stream/package.json create mode 100644 node_modules/form-data/License create mode 100644 node_modules/form-data/Readme.md create mode 100644 node_modules/form-data/index.d.ts create mode 100644 node_modules/form-data/lib/browser.js create mode 100644 node_modules/form-data/lib/form_data.js create mode 100644 node_modules/form-data/lib/populate.js create mode 100644 node_modules/form-data/node_modules/safe-buffer/LICENSE create mode 100644 node_modules/form-data/node_modules/safe-buffer/README.md create mode 100644 node_modules/form-data/node_modules/safe-buffer/index.d.ts create mode 100644 node_modules/form-data/node_modules/safe-buffer/index.js create mode 100644 node_modules/form-data/node_modules/safe-buffer/package.json create mode 100644 node_modules/form-data/package.json create mode 100644 node_modules/isomorphic-form-data/License create mode 100644 node_modules/isomorphic-form-data/Readme.md create mode 100644 node_modules/isomorphic-form-data/lib/browser.js create mode 100644 node_modules/isomorphic-form-data/lib/index.js create mode 100644 node_modules/isomorphic-form-data/package.json create mode 100644 node_modules/mime-db/HISTORY.md create mode 100644 node_modules/mime-db/LICENSE create mode 100644 node_modules/mime-db/README.md create mode 100644 node_modules/mime-db/db.json create mode 100644 node_modules/mime-db/index.js create mode 100644 node_modules/mime-db/package.json create mode 100644 node_modules/mime-types/HISTORY.md create mode 100644 node_modules/mime-types/LICENSE create mode 100644 node_modules/mime-types/README.md create mode 100644 node_modules/mime-types/index.js create mode 100644 node_modules/mime-types/package.json create mode 100644 node_modules/node-fetch/LICENSE.md create mode 100644 node_modules/node-fetch/README.md create mode 100644 node_modules/node-fetch/browser.js create mode 100644 node_modules/node-fetch/lib/index.es.js create mode 100644 node_modules/node-fetch/lib/index.js create mode 100644 node_modules/node-fetch/lib/index.mjs create mode 100644 node_modules/node-fetch/package.json create mode 100644 node_modules/tr46/.npmignore create mode 100644 node_modules/tr46/index.js create mode 100644 node_modules/tr46/lib/.gitkeep create mode 100644 node_modules/tr46/lib/mappingTable.json create mode 100644 node_modules/tr46/package.json create mode 100644 node_modules/webidl-conversions/LICENSE.md create mode 100644 node_modules/webidl-conversions/README.md create mode 100644 node_modules/webidl-conversions/lib/index.js create mode 100644 node_modules/webidl-conversions/package.json create mode 100644 node_modules/whatwg-url/LICENSE.txt create mode 100644 node_modules/whatwg-url/README.md create mode 100644 node_modules/whatwg-url/lib/URL-impl.js create mode 100644 node_modules/whatwg-url/lib/URL.js create mode 100644 node_modules/whatwg-url/lib/public-api.js create mode 100644 node_modules/whatwg-url/lib/url-state-machine.js create mode 100644 node_modules/whatwg-url/lib/utils.js create mode 100644 node_modules/whatwg-url/package.json diff --git a/appwrite.js b/appwrite.js index ac142be..912da1d 100644 --- a/appwrite.js +++ b/appwrite.js @@ -1,6 +1,7 @@ // Initialize Appwrite SDK const sdk = new Appwrite(); const client = new sdk.Client(); +const database = new sdk.Databases(); client .setEndpoint('https://cloud.appwrite.io/v1') // Replace with your Appwrite endpoint diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 796cf08..3f7812f 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -19,10 +19,14 @@ } }, "node_modules/appwrite": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/appwrite/-/appwrite-16.0.2.tgz", - "integrity": "sha512-sCMVOe9wdB8OneIz6LtoYhp797GEXoudAdygNZgezPiybGOlMPcQ8kP1c/FW1eES0ledaqgaZ0PHb+LwZia8pw==", - "license": "BSD-3-Clause" + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/appwrite/-/appwrite-14.0.1.tgz", + "integrity": "sha512-ORlvfqVif/2K3qKGgGiGfMP33Zwm+xxB1fIC4Lm3sojOkDd8u8YvgKQO0Meq5UXb8Dc0Rl66Z7qlGBAfRQ04bA==", + "license": "BSD-3-Clause", + "dependencies": { + "cross-fetch": "3.1.5", + "isomorphic-form-data": "2.0.0" + } }, "node_modules/async": { "version": "2.6.4", @@ -33,6 +37,12 @@ "lodash": "^4.17.14" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -108,6 +118,18 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/corser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", @@ -117,6 +139,15 @@ "node": ">= 0.4.0" } }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "license": "MIT", + "dependencies": { + "node-fetch": "2.6.7" + } + }, "node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -126,6 +157,15 @@ "ms": "^2.1.1" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/dunder-proto": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", @@ -196,6 +236,41 @@ } } }, + "node_modules/form-data": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", + "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/form-data/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -348,6 +423,15 @@ "node": ">=0.10.0" } }, + "node_modules/isomorphic-form-data": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-form-data/-/isomorphic-form-data-2.0.0.tgz", + "integrity": "sha512-TYgVnXWeESVmQSg4GLVbalmQ+B4NPi/H4eWxqALKj63KsUrcu301YDjBqaOw3h+cbak7Na4Xyps3BiptHtxTfg==", + "license": "MIT", + "dependencies": { + "form-data": "^2.3.2" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -375,6 +459,27 @@ "node": ">=4" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -402,6 +507,26 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/object-inspect": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", @@ -560,6 +685,12 @@ "node": ">=8" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/union": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", @@ -577,6 +708,12 @@ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "license": "MIT" }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -588,6 +725,16 @@ "engines": { "node": ">=12" } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } } } } diff --git a/node_modules/appwrite/.github/workflows/autoclose.yml b/node_modules/appwrite/.github/workflows/autoclose.yml deleted file mode 100644 index 3e2b3cb..0000000 --- a/node_modules/appwrite/.github/workflows/autoclose.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: Auto-close External Pull Requests - -on: - pull_request_target: - types: [opened, reopened] - -jobs: - auto_close: - uses: appwrite/.github/.github/workflows/autoclose.yml@main - secrets: - GH_AUTO_CLOSE_PR_TOKEN: ${{ secrets.GH_AUTO_CLOSE_PR_TOKEN }} diff --git a/node_modules/appwrite/.github/workflows/publish.yml b/node_modules/appwrite/.github/workflows/publish.yml deleted file mode 100644 index a781772..0000000 --- a/node_modules/appwrite/.github/workflows/publish.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Publish to NPM - -on: - release: - types: [published] - workflow_dispatch: - -jobs: - publish: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - # Setup Node.js environment - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version: '20.x' - registry-url: 'https://registry.npmjs.org' - - # Determine release tag based on the tag name - - name: Determine release tag - id: release_tag - run: | - if [[ "${{ github.ref }}" == *"-rc"* ]] || [[ "${{ github.ref }}" == *"-RC"* ]]; then - echo "tag=next" >> "$GITHUB_OUTPUT" - else - echo "tag=latest" >> "$GITHUB_OUTPUT" - fi - - # Install dependencies (if any) and build your project (if necessary) - - name: Install dependencies and build - run: | - npm install - npm run build - - # Publish to NPM with the appropriate tag - - name: Publish - run: npm publish --tag ${{ steps.release_tag.outputs.tag }} - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/node_modules/appwrite/.travis.yml b/node_modules/appwrite/.travis.yml new file mode 100644 index 0000000..564159b --- /dev/null +++ b/node_modules/appwrite/.travis.yml @@ -0,0 +1,32 @@ +language: node_js +node_js: + - "14.16" + +jobs: + include: + - stage: NPM RC Release + if: tag =~ /-(rc|RC)/ + node_js: "14.16" + script: + - npm install + - npm run build + - echo "Deploying RC to NPM..." + deploy: + provider: npm + email: $NPM_EMAIL + api_key: $NPM_API_KEY + tag: next + - stage: NPM Release + if: not tag =~ /-(rc|RC)/ + node_js: "14.16" + script: + - npm install + - npm run build + - echo "Deploying to NPM..." + deploy: + provider: npm + email: $NPM_EMAIL + api_key: $NPM_API_KEY + skip_cleanup: true + on: + tags: true \ No newline at end of file diff --git a/node_modules/appwrite/README.md b/node_modules/appwrite/README.md index 43b411f..28273f5 100644 --- a/node_modules/appwrite/README.md +++ b/node_modules/appwrite/README.md @@ -1,12 +1,12 @@ # Appwrite Web SDK ![License](https://img.shields.io/github/license/appwrite/sdk-for-web.svg?style=flat-square) -![Version](https://img.shields.io/badge/api%20version-1.6.0-blue.svg?style=flat-square) +![Version](https://img.shields.io/badge/api%20version-1.5.0-blue.svg?style=flat-square) [![Build Status](https://img.shields.io/travis/com/appwrite/sdk-generator?style=flat-square)](https://travis-ci.com/appwrite/sdk-generator) [![Twitter Account](https://img.shields.io/twitter/follow/appwrite?color=00acee&label=twitter&style=flat-square)](https://twitter.com/appwrite) [![Discord](https://img.shields.io/discord/564160730845151244?label=discord&style=flat-square)](https://appwrite.io/discord) -**This SDK is compatible with Appwrite server version 1.6.x. For older versions, please check [previous releases](https://github.com/appwrite/sdk-for-web/releases).** +**This SDK is compatible with Appwrite server version 1.5.x. For older versions, please check [previous releases](https://github.com/appwrite/sdk-for-web/releases).** Appwrite is an open-source backend as a service server that abstract and simplify complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way. Use the Web SDK to integrate your app with the Appwrite server to easily start interacting with all of Appwrite backend APIs and tools. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs) @@ -33,7 +33,7 @@ import { Client, Account } from "appwrite"; To install with a CDN (content delivery network) add the following scripts to the bottom of your tag, but before you use any Appwrite services: ```html - + ``` diff --git a/node_modules/appwrite/dist/cjs/sdk.js b/node_modules/appwrite/dist/cjs/sdk.js index 29381ca..0456324 100644 --- a/node_modules/appwrite/dist/cjs/sdk.js +++ b/node_modules/appwrite/dist/cjs/sdk.js @@ -1,5 +1,8 @@ 'use strict'; +require('isomorphic-form-data'); +var crossFetch = require('cross-fetch'); + /****************************************************************************** Copyright (c) Microsoft Corporation. @@ -31,17 +34,27 @@ function __classPrivateFieldGet(receiver, state, kind, f) { return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); } -/** - * Helper class to generate query strings. - */ +class Service { + constructor(client) { + this.client = client; + } + static flatten(data, prefix = '') { + let output = {}; + for (const [key, value] of Object.entries(data)) { + let finalKey = prefix ? prefix + '[' + key + ']' : key; + if (Array.isArray(value)) { + output = Object.assign(Object.assign({}, output), Service.flatten(value, finalKey)); + } + else { + output[finalKey] = value; + } + } + return output; + } +} +Service.CHUNK_SIZE = 5 * 1024 * 1024; // 5MB + class Query { - /** - * Constructor for Query class. - * - * @param {string} method - * @param {AttributesTypes} attribute - * @param {QueryTypes} values - */ constructor(method, attribute, values) { this.method = method; this.attribute = attribute; @@ -54,11 +67,6 @@ class Query { } } } - /** - * Convert the query object to a JSON string. - * - * @returns {string} - */ toString() { return JSON.stringify({ method: this.method, @@ -67,186 +75,30 @@ class Query { }); } } -/** - * Filter resources where attribute is equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.equal = (attribute, value) => new Query("equal", attribute, value).toString(); -/** - * Filter resources where attribute is not equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.notEqual = (attribute, value) => new Query("notEqual", attribute, value).toString(); -/** - * Filter resources where attribute is less than value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.lessThan = (attribute, value) => new Query("lessThan", attribute, value).toString(); -/** - * Filter resources where attribute is less than or equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.lessThanEqual = (attribute, value) => new Query("lessThanEqual", attribute, value).toString(); -/** - * Filter resources where attribute is greater than value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.greaterThan = (attribute, value) => new Query("greaterThan", attribute, value).toString(); -/** - * Filter resources where attribute is greater than or equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.greaterThanEqual = (attribute, value) => new Query("greaterThanEqual", attribute, value).toString(); -/** - * Filter resources where attribute is null. - * - * @param {string} attribute - * @returns {string} - */ Query.isNull = (attribute) => new Query("isNull", attribute).toString(); -/** - * Filter resources where attribute is not null. - * - * @param {string} attribute - * @returns {string} - */ Query.isNotNull = (attribute) => new Query("isNotNull", attribute).toString(); -/** - * Filter resources where attribute is between start and end (inclusive). - * - * @param {string} attribute - * @param {string | number} start - * @param {string | number} end - * @returns {string} - */ Query.between = (attribute, start, end) => new Query("between", attribute, [start, end]).toString(); -/** - * Filter resources where attribute starts with value. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ Query.startsWith = (attribute, value) => new Query("startsWith", attribute, value).toString(); -/** - * Filter resources where attribute ends with value. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ Query.endsWith = (attribute, value) => new Query("endsWith", attribute, value).toString(); -/** - * Specify which attributes should be returned by the API call. - * - * @param {string[]} attributes - * @returns {string} - */ Query.select = (attributes) => new Query("select", undefined, attributes).toString(); -/** - * Filter resources by searching attribute for value. - * A fulltext index on attribute is required for this query to work. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ Query.search = (attribute, value) => new Query("search", attribute, value).toString(); -/** - * Sort results by attribute descending. - * - * @param {string} attribute - * @returns {string} - */ Query.orderDesc = (attribute) => new Query("orderDesc", attribute).toString(); -/** - * Sort results by attribute ascending. - * - * @param {string} attribute - * @returns {string} - */ Query.orderAsc = (attribute) => new Query("orderAsc", attribute).toString(); -/** - * Return results after documentId. - * - * @param {string} documentId - * @returns {string} - */ Query.cursorAfter = (documentId) => new Query("cursorAfter", undefined, documentId).toString(); -/** - * Return results before documentId. - * - * @param {string} documentId - * @returns {string} - */ Query.cursorBefore = (documentId) => new Query("cursorBefore", undefined, documentId).toString(); -/** - * Return only limit results. - * - * @param {number} limit - * @returns {string} - */ Query.limit = (limit) => new Query("limit", undefined, limit).toString(); -/** - * Filter resources by skipping the first offset results. - * - * @param {number} offset - * @returns {string} - */ Query.offset = (offset) => new Query("offset", undefined, offset).toString(); -/** - * Filter resources where attribute contains the specified value. - * - * @param {string} attribute - * @param {string | string[]} value - * @returns {string} - */ Query.contains = (attribute, value) => new Query("contains", attribute, value).toString(); -/** - * Combine multiple queries using logical OR operator. - * - * @param {string[]} queries - * @returns {string} - */ Query.or = (queries) => new Query("or", undefined, queries.map((query) => JSON.parse(query))).toString(); -/** - * Combine multiple queries using logical AND operator. - * - * @param {string[]} queries - * @returns {string} - */ Query.and = (queries) => new Query("and", undefined, queries.map((query) => JSON.parse(query))).toString(); -/** - * Exception thrown by the package - */ class AppwriteException extends Error { - /** - * Initializes a Appwrite Exception. - * - * @param {string} message - The error message. - * @param {number} code - The error code. Default is 0. - * @param {string} type - The error type. Default is an empty string. - * @param {string} response - The response string. Default is an empty string. - */ constructor(message, code = 0, type = '', response = '') { super(message); this.name = 'AppwriteException'; @@ -256,14 +108,8 @@ class AppwriteException extends Error { this.response = response; } } -/** - * Client that handles requests to Appwrite - */ class Client { constructor() { - /** - * Holds configuration such as project. - */ this.config = { endpoint: 'https://cloud.appwrite.io/v1', endpointRealtime: '', @@ -272,15 +118,12 @@ class Client { locale: '', session: '', }; - /** - * Custom headers for API requests. - */ this.headers = { 'x-sdk-name': 'Web', 'x-sdk-platform': 'client', 'x-sdk-language': 'web', - 'x-sdk-version': '16.0.2', - 'X-Appwrite-Response-Format': '1.6.0', + 'x-sdk-version': '14.0.1', + 'X-Appwrite-Response-Format': '1.5.0', }; this.realtime = { socket: undefined, @@ -532,160 +375,80 @@ class Client { this.realtime.connect(); }; } - prepareRequest(method, url, headers = {}, params = {}) { - method = method.toUpperCase(); - headers = Object.assign({}, this.headers, headers); - if (typeof window !== 'undefined' && window.localStorage) { - const cookieFallback = window.localStorage.getItem('cookieFallback'); - if (cookieFallback) { - headers['X-Fallback-Cookies'] = cookieFallback; + call(method, url, headers = {}, params = {}) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + method = method.toUpperCase(); + headers = Object.assign({}, this.headers, headers); + let options = { + method, + headers, + credentials: 'include' + }; + if (typeof window !== 'undefined' && window.localStorage) { + headers['X-Fallback-Cookies'] = (_a = window.localStorage.getItem('cookieFallback')) !== null && _a !== void 0 ? _a : ''; } - } - let options = { - method, - headers, - credentials: 'include', - }; - if (method === 'GET') { - for (const [key, value] of Object.entries(Client.flatten(params))) { - url.searchParams.append(key, value); + if (method === 'GET') { + for (const [key, value] of Object.entries(Service.flatten(params))) { + url.searchParams.append(key, value); + } } - } - else { - switch (headers['content-type']) { - case 'application/json': - options.body = JSON.stringify(params); - break; - case 'multipart/form-data': - const formData = new FormData(); - for (const [key, value] of Object.entries(params)) { - if (value instanceof File) { - formData.append(key, value, value.name); - } - else if (Array.isArray(value)) { - for (const nestedValue of value) { - formData.append(`${key}[]`, nestedValue); + else { + switch (headers['content-type']) { + case 'application/json': + options.body = JSON.stringify(params); + break; + case 'multipart/form-data': + let formData = new FormData(); + for (const key in params) { + if (Array.isArray(params[key])) { + params[key].forEach((value) => { + formData.append(key + '[]', value); + }); + } + else { + formData.append(key, params[key]); } } - else { - formData.append(key, value); - } - } - options.body = formData; - delete headers['content-type']; - break; + options.body = formData; + delete headers['content-type']; + break; + } } - } - return { uri: url.toString(), options }; - } - chunkedUpload(method, url, headers = {}, originalPayload = {}, onProgress) { - return __awaiter(this, void 0, void 0, function* () { - const file = Object.values(originalPayload).find((value) => value instanceof File); - if (file.size <= Client.CHUNK_SIZE) { - return yield this.call(method, url, headers, originalPayload); - } - let start = 0; - let response = null; - while (start < file.size) { - let end = start + Client.CHUNK_SIZE; // Prepare end for the next chunk - if (end >= file.size) { - end = file.size; // Adjust for the last chunk to include the last byte + try { + let data = null; + const response = yield crossFetch.fetch(url.toString(), options); + if ((_b = response.headers.get('content-type')) === null || _b === void 0 ? void 0 : _b.includes('application/json')) { + data = yield response.json(); } - headers['content-range'] = `bytes ${start}-${end - 1}/${file.size}`; - const chunk = file.slice(start, end); - let payload = Object.assign(Object.assign({}, originalPayload), { file: new File([chunk], file.name) }); - response = yield this.call(method, url, headers, payload); - if (onProgress && typeof onProgress === 'function') { - onProgress({ - $id: response.$id, - progress: Math.round((end / file.size) * 100), - sizeUploaded: end, - chunksTotal: Math.ceil(file.size / Client.CHUNK_SIZE), - chunksUploaded: Math.ceil(end / Client.CHUNK_SIZE) - }); + else { + data = { + message: yield response.text() + }; } - if (response && response.$id) { - headers['x-appwrite-id'] = response.$id; + if (400 <= response.status) { + throw new AppwriteException(data === null || data === void 0 ? void 0 : data.message, response.status, data === null || data === void 0 ? void 0 : data.type, data); } - start = end; - } - return response; - }); - } - call(method, url, headers = {}, params = {}, responseType = 'json') { - var _a; - return __awaiter(this, void 0, void 0, function* () { - const { uri, options } = this.prepareRequest(method, url, headers, params); - let data = null; - const response = yield fetch(uri, options); - const warnings = response.headers.get('x-appwrite-warning'); - if (warnings) { - warnings.split(';').forEach((warning) => console.warn('Warning: ' + warning)); - } - if ((_a = response.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.includes('application/json')) { - data = yield response.json(); - } - else if (responseType === 'arrayBuffer') { - data = yield response.arrayBuffer(); - } - else { - data = { - message: yield response.text() - }; - } - if (400 <= response.status) { - throw new AppwriteException(data === null || data === void 0 ? void 0 : data.message, response.status, data === null || data === void 0 ? void 0 : data.type, data); + const cookieFallback = response.headers.get('X-Fallback-Cookies'); + if (typeof window !== 'undefined' && window.localStorage && cookieFallback) { + window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.'); + window.localStorage.setItem('cookieFallback', cookieFallback); + } + return data; } - const cookieFallback = response.headers.get('X-Fallback-Cookies'); - if (typeof window !== 'undefined' && window.localStorage && cookieFallback) { - window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.'); - window.localStorage.setItem('cookieFallback', cookieFallback); + catch (e) { + if (e instanceof AppwriteException) { + throw e; + } + throw new AppwriteException(e.message); } - return data; }); } - static flatten(data, prefix = '') { - let output = {}; - for (const [key, value] of Object.entries(data)) { - let finalKey = prefix ? prefix + '[' + key + ']' : key; - if (Array.isArray(value)) { - output = Object.assign(Object.assign({}, output), Client.flatten(value, finalKey)); - } - else { - output[finalKey] = value; - } - } - return output; - } } -Client.CHUNK_SIZE = 1024 * 1024 * 5; -class Service { +class Account extends Service { constructor(client) { - this.client = client; - } - static flatten(data, prefix = '') { - let output = {}; - for (const [key, value] of Object.entries(data)) { - let finalKey = prefix ? prefix + '[' + key + ']' : key; - if (Array.isArray(value)) { - output = Object.assign(Object.assign({}, output), Service.flatten(value, finalKey)); - } - else { - output[finalKey] = value; - } - } - return output; - } -} -/** - * The size for chunked uploads in bytes. - */ -Service.CHUNK_SIZE = 5 * 1024 * 1024; // 5MB - -class Account { - constructor(client) { - this.client = client; + super(client); } /** * Get account @@ -693,31 +456,36 @@ class Account { * Get the currently logged in user. * * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ get() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create account * - * Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession). + * Use this endpoint to allow a new user to register a new account in your + * project. After the user registration completes successfully, you can use + * the + * [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) + * route to start verifying the user email address. To allow the new user to + * login to their new account, you need to create a new [account + * session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession). * * @param {string} userId * @param {string} email * @param {string} password * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ create(userId, email, password, name) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -744,24 +512,28 @@ class Account { payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Update email * - * Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request. -This endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password. - + * Update currently logged in user account email address. After changing user + * address, the user confirmation status will get reset. A new confirmation + * email is not sent automatically however you can use the send confirmation + * email endpoint again to send the confirmation email. For security measures, + * user password is required to complete this request. + * This endpoint can also be used to convert an anonymous account to a normal + * one, by passing an email address and a new password. + * * * @param {string} email * @param {string} password * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateEmail(email, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof email === 'undefined') { @@ -779,10 +551,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -792,8 +563,8 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listIdentities(queries) { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/identities'; @@ -802,10 +573,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** @@ -815,8 +585,8 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string} identityId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteIdentity(identityId) { return __awaiter(this, void 0, void 0, function* () { if (typeof identityId === 'undefined') { @@ -825,40 +595,43 @@ This endpoint can also be used to convert an anonymous account to a normal one, const apiPath = '/account/identities/{identityId}'.replace('{identityId}', identityId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Create JWT * - * Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame. + * Use this endpoint to create a JSON Web Token. You can use the resulting JWT + * to authenticate on behalf of the current user when working with the + * Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes + * from its creation and will be invalid if the user will logout in that time + * frame. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createJWT() { return __awaiter(this, void 0, void 0, function* () { - const apiPath = '/account/jwts'; + const apiPath = '/account/jwt'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * List logs * - * Get the list of latest security activity logs for the currently logged in user. Each log returns user IP address, location and date and time of log. + * Get the list of latest security activity logs for the currently logged in + * user. Each log returns user IP address, location and date and time of log. * * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listLogs(queries) { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/logs'; @@ -867,10 +640,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** @@ -880,8 +652,8 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {boolean} mfa * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateMFA(mfa) { return __awaiter(this, void 0, void 0, function* () { if (typeof mfa === 'undefined') { @@ -893,21 +665,23 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['mfa'] = mfa; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** - * Create Authenticator + * Add Authenticator * - * Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](/docs/references/cloud/client-web/account#updateMfaAuthenticator) method. + * Add an authenticator app to be used as an MFA factor. Verify the + * authenticator using the [verify + * authenticator](/docs/references/cloud/client-web/account#verifyAuthenticator) + * method. * * @param {AuthenticatorType} type * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaAuthenticator(type) { return __awaiter(this, void 0, void 0, function* () { if (typeof type === 'undefined') { @@ -916,22 +690,23 @@ This endpoint can also be used to convert an anonymous account to a normal one, const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Verify Authenticator * - * Verify an authenticator app after adding it using the [add authenticator](/docs/references/cloud/client-web/account#createMfaAuthenticator) method. + * Verify an authenticator app after adding it using the [add + * authenticator](/docs/references/cloud/client-web/account#addAuthenticator) + * method. * * @param {AuthenticatorType} type * @param {string} otp * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateMfaAuthenticator(type, otp) { return __awaiter(this, void 0, void 0, function* () { if (typeof type === 'undefined') { @@ -946,10 +721,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['otp'] = otp; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** @@ -958,32 +732,40 @@ This endpoint can also be used to convert an anonymous account to a normal one, * Delete an authenticator for a user by ID. * * @param {AuthenticatorType} type + * @param {string} otp * @throws {AppwriteException} - * @returns {Promise<{}>} - */ - deleteMfaAuthenticator(type) { + * @returns {Promise} + */ + deleteMfaAuthenticator(type, otp) { return __awaiter(this, void 0, void 0, function* () { if (typeof type === 'undefined') { throw new AppwriteException('Missing required parameter: "type"'); } + if (typeof otp === 'undefined') { + throw new AppwriteException('Missing required parameter: "otp"'); + } const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type); const payload = {}; + if (typeof otp !== 'undefined') { + payload['otp'] = otp; + } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** - * Create MFA Challenge + * Create 2FA Challenge * - * Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) method. + * Begin the process of MFA verification after sign-in. Finish the flow with + * [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) + * method. * * @param {AuthenticationFactor} factor * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaChallenge(factor) { return __awaiter(this, void 0, void 0, function* () { if (typeof factor === 'undefined') { @@ -995,22 +777,25 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['factor'] = factor; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create MFA Challenge (confirmation) * - * Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method. + * Complete the MFA challenge by providing the one-time password. Finish the + * process of MFA verification by providing the one-time password. To begin + * the flow, use + * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) + * method. * * @param {string} challengeId * @param {string} otp * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ updateMfaChallenge(challengeId, otp) { return __awaiter(this, void 0, void 0, function* () { if (typeof challengeId === 'undefined') { @@ -1028,10 +813,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['otp'] = otp; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1040,74 +824,80 @@ This endpoint can also be used to convert an anonymous account to a normal one, * List the factors available on the account to be used as a MFA challange. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listMfaFactors() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/factors'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Get MFA Recovery Codes * - * Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes. + * Get recovery codes that can be used as backup for MFA flow. Before getting + * codes, they must be generated using + * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) + * method. An OTP challenge is required to read recovery codes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getMfaRecoveryCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/recovery-codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create MFA Recovery Codes * - * Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method. + * Generate recovery codes as backup for MFA flow. It's recommended to + * generate and show then immediately after user successfully adds their + * authehticator. Recovery codes can be used as a MFA verification type in + * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) + * method. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaRecoveryCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/recovery-codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Regenerate MFA Recovery Codes * - * Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes. + * Regenerate recovery codes that can be used as backup for MFA flow. Before + * regenerating codes, they must be first generated using + * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) + * method. An OTP challenge is required to regenreate recovery codes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMfaRecoveryCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/recovery-codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1117,8 +907,8 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateName(name) { return __awaiter(this, void 0, void 0, function* () { if (typeof name === 'undefined') { @@ -1130,22 +920,23 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Update password * - * Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional. + * Update currently logged in user password. For validation, user is required + * to pass in the new password, and the old password. For users created with + * OAuth, Team Invites and Magic URL, oldPassword is optional. * * @param {string} password * @param {string} oldPassword * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePassword(password, oldPassword) { return __awaiter(this, void 0, void 0, function* () { if (typeof password === 'undefined') { @@ -1160,22 +951,25 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['oldPassword'] = oldPassword; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Update phone * - * Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) endpoint to send a confirmation SMS. + * Update the currently logged in user's phone number. After updating the + * phone number, the phone verification status will be reset. A confirmation + * SMS is not sent automatically, however you can use the [POST + * /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) + * endpoint to send a confirmation SMS. * * @param {string} phone * @param {string} password * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePhone(phone, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof phone === 'undefined') { @@ -1193,10 +987,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1205,28 +998,29 @@ This endpoint can also be used to convert an anonymous account to a normal one, * Get the preferences as a key-value object for the currently logged in user. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getPrefs() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/prefs'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update preferences * - * Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded. + * Update currently logged in user account preferences. The object you pass is + * stored as is, and replaces any previous value. The maximum allowed prefs + * size is 64kB and throws error if exceeded. * * @param {Partial} prefs * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePrefs(prefs) { return __awaiter(this, void 0, void 0, function* () { if (typeof prefs === 'undefined') { @@ -1238,22 +1032,28 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['prefs'] = prefs; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Create password recovery * - * Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour. + * Sends the user an email with a temporary secret key for password reset. + * When the user clicks the confirmation link he is redirected back to your + * app password reset URL with the secret key and email address values + * attached to the URL query string. Use the query string params to submit a + * request to the [PUT + * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) + * endpoint to complete the process. The verification link sent to the user's + * email address is valid for 1 hour. * * @param {string} email * @param {string} url * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createRecovery(email, url) { return __awaiter(this, void 0, void 0, function* () { if (typeof email === 'undefined') { @@ -1271,25 +1071,31 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['url'] = url; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create password recovery (confirmation) * - * Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) endpoint. - -Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. + * Use this endpoint to complete the user account password reset. Both the + * **userId** and **secret** arguments will be passed as query parameters to + * the redirect URL you have provided when sending your request to the [POST + * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) + * endpoint. + * + * Please note that in order to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * @param {string} userId * @param {string} secret * @param {string} password * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateRecovery(userId, secret, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1313,81 +1119,88 @@ Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/ payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * List sessions * - * Get the list of active sessions across different devices for the currently logged in user. + * Get the list of active sessions across different devices for the currently + * logged in user. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listSessions() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/sessions'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Delete sessions * - * Delete all sessions from the user account and remove any sessions cookies from the end client. + * Delete all sessions from the user account and remove any sessions cookies + * from the end client. * * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSessions() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/sessions'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Create anonymous session * - * Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) or create an [OAuth2 session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session). + * Use this endpoint to allow a new user to register an anonymous account in + * your project. This route will also create a new session for the user. To + * allow the new user to convert an anonymous account to a normal account, you + * need to update its [email and + * password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) + * or create an [OAuth2 + * session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session). * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createAnonymousSession() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/sessions/anonymous'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create email password session * - * Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Allow the user to login into their account by providing a valid email and + * password combination. This route will create a new session for the user. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} email * @param {string} password * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createEmailPasswordSession(email, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof email === 'undefined') { @@ -1405,22 +1218,23 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Update magic URL session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMagicURLSession(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1438,69 +1252,77 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Create OAuth2 session * - * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. - -If there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). - + * Allow the user to login to their account using the OAuth2 provider of their + * choice. Each OAuth2 provider should be enabled from the Appwrite console + * first. Use the success and failure arguments to provide a redirect URL's + * back to your app when login is completed. + * + * If there is already an active session, the new session will be attached to + * the logged-in account. If there are no active sessions, the server will + * attempt to look for a user with the same email address as the email + * received from the OAuth2 provider and attach the new session to the + * existing user. If no matching user is found - the server will create a new + * user. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). + * * * @param {OAuthProvider} provider * @param {string} success * @param {string} failure * @param {string[]} scopes * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {void|string} + */ createOAuth2Session(provider, success, failure, scopes) { - return __awaiter(this, void 0, void 0, function* () { - if (typeof provider === 'undefined') { - throw new AppwriteException('Missing required parameter: "provider"'); - } - const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider); - const payload = {}; - if (typeof success !== 'undefined') { - payload['success'] = success; - } - if (typeof failure !== 'undefined') { - payload['failure'] = failure; - } - if (typeof scopes !== 'undefined') { - payload['scopes'] = scopes; - } - const uri = new URL(this.client.config.endpoint + apiPath); - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { - window.location.href = uri.toString(); - return; - } - else { - return uri.toString(); - } - }); + if (typeof provider === 'undefined') { + throw new AppwriteException('Missing required parameter: "provider"'); + } + const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider); + const payload = {}; + if (typeof success !== 'undefined') { + payload['success'] = success; + } + if (typeof failure !== 'undefined') { + payload['failure'] = failure; + } + if (typeof scopes !== 'undefined') { + payload['scopes'] = scopes; + } + const uri = new URL(this.client.config.endpoint + apiPath); + payload['project'] = this.client.config.project; + for (const [key, value] of Object.entries(Service.flatten(payload))) { + uri.searchParams.append(key, value); + } + if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { + window.location.href = uri.toString(); + } + else { + return uri; + } } /** * Update phone session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePhoneSession(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1518,22 +1340,23 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Create session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createSession(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1551,21 +1374,21 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Get session * - * Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used. + * Use this endpoint to get a logged in user's session using a Session ID. + * Inputting 'current' will return the current session being used. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getSession(sessionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof sessionId === 'undefined') { @@ -1574,21 +1397,22 @@ A user is limited to 10 active sessions at a time by default. [Learn more about const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update session * - * Use this endpoint to extend a session's length. Extending a session is useful when session expiry is short. If the session was created using an OAuth provider, this endpoint refreshes the access token from the provider. + * Use this endpoint to extend a session's length. Extending a session is + * useful when session expiry is short. If the session was created using an + * OAuth provider, this endpoint refreshes the access token from the provider. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateSession(sessionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof sessionId === 'undefined') { @@ -1597,21 +1421,24 @@ A user is limited to 10 active sessions at a time by default. [Learn more about const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Delete session * - * Logout the user. Use 'current' as the session ID to logout on this device, use a session ID to logout on another device. If you're looking to logout the user on all devices, use [Delete Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) instead. + * Logout the user. Use 'current' as the session ID to logout on this device, + * use a session ID to logout on another device. If you're looking to logout + * the user on all devices, use [Delete + * Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) + * instead. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSession(sessionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof sessionId === 'undefined') { @@ -1620,29 +1447,29 @@ A user is limited to 10 active sessions at a time by default. [Learn more about const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Update status * - * Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead. + * Block the currently logged in user account. Behind the scene, the user + * record is not deleted but permanently blocked from any access. To + * completely delete a user, use the Users API instead. * * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateStatus() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/status'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1653,8 +1480,8 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * @param {string} identifier * @param {string} providerId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPushTarget(targetId, identifier, providerId) { return __awaiter(this, void 0, void 0, function* () { if (typeof targetId === 'undefined') { @@ -1675,10 +1502,9 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['providerId'] = providerId; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1688,8 +1514,8 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * @param {string} targetId * @param {string} identifier * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePushTarget(targetId, identifier) { return __awaiter(this, void 0, void 0, function* () { if (typeof targetId === 'undefined') { @@ -1704,10 +1530,9 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['identifier'] = identifier; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1716,8 +1541,8 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * * @param {string} targetId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deletePushTarget(targetId) { return __awaiter(this, void 0, void 0, function* () { if (typeof targetId === 'undefined') { @@ -1726,25 +1551,31 @@ A user is limited to 10 active sessions at a time by default. [Learn more about const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Create email token (OTP) * - * Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Sends the user an email with a secret key for creating a session. If the + * provided user ID has not be registered, a new user will be created. Use the + * returned user ID and secret and submit a request to the [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The secret sent to the user's email + * is valid for 15 minutes. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} userId * @param {string} email * @param {boolean} phrase * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createEmailToken(userId, email, phrase) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1765,27 +1596,38 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['phrase'] = phrase; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create magic URL token * - * Sends the user an email with a secret key for creating a session. If the provided user ID has not been registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). - + * Sends the user an email with a secret key for creating a session. If the + * provided user ID has not been registered, a new user will be created. When + * the user clicks the link in the email, the user is redirected back to the + * URL you provided with the secret key and userId values attached to the URL + * query string. Use the query string parameters to submit a request to the + * [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The link sent to the user's email + * address is valid for 1 hour. If you are on a mobile device you can leave + * the URL parameter empty, so that the login completion will be handled by + * your Appwrite instance by default. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). + * * * @param {string} userId * @param {string} email * @param {string} url * @param {boolean} phrase * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMagicURLToken(userId, email, url, phrase) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1809,70 +1651,82 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['phrase'] = phrase; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create OAuth2 token * - * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. - -If authentication succeeds, `userId` and `secret` of a token will be appended to the success URL as query parameters. These can be used to create a new session using the [Create session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Allow the user to login to their account using the OAuth2 provider of their + * choice. Each OAuth2 provider should be enabled from the Appwrite console + * first. Use the success and failure arguments to provide a redirect URL's + * back to your app when login is completed. + * + * If authentication succeeds, `userId` and `secret` of a token will be + * appended to the success URL as query parameters. These can be used to + * create a new session using the [Create + * session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {OAuthProvider} provider * @param {string} success * @param {string} failure * @param {string[]} scopes * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {void|string} + */ createOAuth2Token(provider, success, failure, scopes) { - return __awaiter(this, void 0, void 0, function* () { - if (typeof provider === 'undefined') { - throw new AppwriteException('Missing required parameter: "provider"'); - } - const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider); - const payload = {}; - if (typeof success !== 'undefined') { - payload['success'] = success; - } - if (typeof failure !== 'undefined') { - payload['failure'] = failure; - } - if (typeof scopes !== 'undefined') { - payload['scopes'] = scopes; - } - const uri = new URL(this.client.config.endpoint + apiPath); - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { - window.location.href = uri.toString(); - return; - } - else { - return uri.toString(); - } - }); + if (typeof provider === 'undefined') { + throw new AppwriteException('Missing required parameter: "provider"'); + } + const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider); + const payload = {}; + if (typeof success !== 'undefined') { + payload['success'] = success; + } + if (typeof failure !== 'undefined') { + payload['failure'] = failure; + } + if (typeof scopes !== 'undefined') { + payload['scopes'] = scopes; + } + const uri = new URL(this.client.config.endpoint + apiPath); + payload['project'] = this.client.config.project; + for (const [key, value] of Object.entries(Service.flatten(payload))) { + uri.searchParams.append(key, value); + } + if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { + window.location.href = uri.toString(); + } + else { + return uri; + } } /** * Create phone token * - * Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Sends the user an SMS with a secret key for creating a session. If the + * provided user ID has not be registered, a new user will be created. Use the + * returned user ID and secret and submit a request to the [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The secret sent to the user's phone + * is valid for 15 minutes. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} userId * @param {string} phone * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPhoneToken(userId, phone) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1890,24 +1744,34 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['phone'] = phone; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create email verification * - * Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). The verification link sent to the user's email address is valid for 7 days. - -Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. - + * Use this endpoint to send a verification message to your user email address + * to confirm they are the valid owners of that address. Both the **userId** + * and **secret** arguments will be passed as query parameters to the URL you + * have provided to be attached to the verification email. The provided URL + * should redirect the user back to your app and allow you to complete the + * verification process by verifying both the **userId** and **secret** + * parameters. Learn more about how to [complete the verification + * process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). + * The verification link sent to the user's email address is valid for 7 days. + * + * Please note that in order to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. + * * * @param {string} url * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createVerification(url) { return __awaiter(this, void 0, void 0, function* () { if (typeof url === 'undefined') { @@ -1919,22 +1783,24 @@ Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/ payload['url'] = url; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create email verification (confirmation) * - * Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code. + * Use this endpoint to complete the user email verification process. Use both + * the **userId** and **secret** parameters that were attached to your app URL + * to verify the user email ownership. If confirmed this route will return a + * 200 status code. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateVerification(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1952,41 +1818,49 @@ Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/ payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Create phone verification * - * Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) endpoint. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes. + * Use this endpoint to send a verification SMS to the currently logged in + * user. This endpoint is meant for use after updating a user's phone number + * using the + * [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) + * endpoint. Learn more about how to [complete the verification + * process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). + * The verification code sent to the user's phone number is valid for 15 + * minutes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPhoneVerification() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/verification/phone'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** - * Update phone verification (confirmation) + * Create phone verification (confirmation) * - * Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code. + * Use this endpoint to complete the user phone verification process. Use the + * **userId** and **secret** that were sent to your user's phone number to + * verify the user email ownership. If confirmed this route will return a 200 + * status code. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePhoneVerification(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -2004,32 +1878,38 @@ Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/ payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } } -class Avatars { +class Avatars extends Service { constructor(client) { - this.client = client; + super(client); } /** * Get browser icon * - * You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) endpoint. Use width, height and quality arguments to change the output settings. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. + * You can use this endpoint to show different browser icons to your users. + * The code argument receives the browser code as it appears in your user [GET + * /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) + * endpoint. Use width, height and quality arguments to change the output + * settings. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. * * @param {Browser} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getBrowser(code, width, height, quality) { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); @@ -2050,27 +1930,28 @@ When one dimension is specified and the other is 0, the image is scaled with pre for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get credit card icon * - * The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * The credit card endpoint will return you the icon of the credit card + * provider you need. Use width, height and quality arguments to change the + * output settings. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {CreditCard} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getCreditCard(code, width, height, quality) { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); @@ -2091,23 +1972,19 @@ When one dimension is specified and the other is 0, the image is scaled with pre for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get favicon * - * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL. - -This endpoint does not follow HTTP redirects. + * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote + * website URL. + * * * @param {string} url * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFavicon(url) { if (typeof url === 'undefined') { throw new AppwriteException('Missing required parameter: "url"'); @@ -2122,27 +1999,29 @@ This endpoint does not follow HTTP redirects. for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get country flag * - * You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * You can use this endpoint to show different country flags icons to your + * users. The code argument receives the 2 letter country code. Use width, + * height and quality arguments to change the output settings. Country codes + * follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {Flag} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFlag(code, width, height, quality) { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); @@ -2163,27 +2042,28 @@ When one dimension is specified and the other is 0, the image is scaled with pre for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get image from URL * - * Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px. - -This endpoint does not follow HTTP redirects. + * Use this endpoint to fetch a remote image URL and crop it to any image size + * you want. This endpoint is very useful if you need to crop and display + * remote images in your app or in case you want to make sure a 3rd party + * image is properly served using a TLS protocol. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 400x400px. + * * * @param {string} url * @param {number} width * @param {number} height * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getImage(url, width, height) { if (typeof url === 'undefined') { throw new AppwriteException('Missing required parameter: "url"'); @@ -2204,29 +2084,35 @@ This endpoint does not follow HTTP redirects. for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get user initials * - * Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned. - -You can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * Use this endpoint to show your user initials avatar icon on your website or + * app. By default, this route will try to print your logged-in user name or + * email initials. You can also overwrite the user name if you pass the 'name' + * parameter. If no name is given and no user is logged, an empty avatar will + * be returned. + * + * You can use the color and background params to change the avatar colors. By + * default, a random theme will be selected. The random theme will persist for + * the user's initials when reloading the same theme will always return for + * the same initials. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {string} name * @param {number} width * @param {number} height * @param {string} background * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getInitials(name, width, height, background) { const apiPath = '/avatars/initials'; const payload = {}; @@ -2247,25 +2133,22 @@ When one dimension is specified and the other is 0, the image is scaled with pre for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get QR code * - * Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image. - + * Converts a given plain text to a QR code image. You can use the query + * parameters to change the size and style of the resulting image. + * * * @param {string} text * @param {number} size * @param {number} margin * @param {boolean} download * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getQR(text, size, margin, download) { if (typeof text === 'undefined') { throw new AppwriteException('Missing required parameter: "text"'); @@ -2289,29 +2172,26 @@ When one dimension is specified and the other is 0, the image is scaled with pre for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } } -class Databases { +class Databases extends Service { constructor(client) { - this.client = client; + super(client); } /** * List documents * - * Get a list of all the user's documents in a given collection. You can use the query params to filter your results. + * Get a list of all the user's documents in a given collection. You can use + * the query params to filter your results. * * @param {string} databaseId * @param {string} collectionId * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ listDocuments(databaseId, collectionId, queries) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2326,16 +2206,18 @@ class Databases { payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create document * - * Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) API or directly from your database console. + * Create a new Document. Before using this route, you should create a new + * collection resource using either a [server + * integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) + * API or directly from your database console. * * @param {string} databaseId * @param {string} collectionId @@ -2343,8 +2225,8 @@ class Databases { * @param {Omit} data * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createDocument(databaseId, collectionId, documentId, data, permissions) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2371,24 +2253,24 @@ class Databases { payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Get document * - * Get a document by its unique ID. This endpoint response returns a JSON object with the document data. + * Get a document by its unique ID. This endpoint response returns a JSON + * object with the document data. * * @param {string} databaseId * @param {string} collectionId * @param {string} documentId * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getDocument(databaseId, collectionId, documentId, queries) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2406,16 +2288,16 @@ class Databases { payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update document * - * Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated. + * Update a document by its unique ID. Using the patch method you can pass + * only specific fields that will get updated. * * @param {string} databaseId * @param {string} collectionId @@ -2423,8 +2305,8 @@ class Databases { * @param {Partial>} data * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateDocument(databaseId, collectionId, documentId, data, permissions) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2445,10 +2327,9 @@ class Databases { payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2460,8 +2341,8 @@ class Databases { * @param {string} collectionId * @param {string} documentId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteDocument(databaseId, collectionId, documentId) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2476,29 +2357,29 @@ class Databases { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } } -class Functions { +class Functions extends Service { constructor(client) { - this.client = client; + super(client); } /** * List executions * - * Get a list of all the current user function execution logs. You can use the query params to filter your results. + * Get a list of all the current user function execution logs. You can use the + * query params to filter your results. * * @param {string} functionId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listExecutions(functionId, queries, search) { return __awaiter(this, void 0, void 0, function* () { if (typeof functionId === 'undefined') { @@ -2513,16 +2394,18 @@ class Functions { payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create execution * - * Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously. + * Trigger a function execution. The returned object will return you the + * current execution status. You can ping the `Get Execution` endpoint to get + * updates on the current execution status. Once this endpoint is called, your + * function execution process will start asynchronously. * * @param {string} functionId * @param {string} body @@ -2530,11 +2413,10 @@ class Functions { * @param {string} xpath * @param {ExecutionMethod} method * @param {object} headers - * @param {string} scheduledAt * @throws {AppwriteException} - * @returns {Promise} - */ - createExecution(functionId, body, async, xpath, method, headers, scheduledAt) { + * @returns {Promise} + */ + createExecution(functionId, body, async, xpath, method, headers) { return __awaiter(this, void 0, void 0, function* () { if (typeof functionId === 'undefined') { throw new AppwriteException('Missing required parameter: "functionId"'); @@ -2556,14 +2438,10 @@ class Functions { if (typeof headers !== 'undefined') { payload['headers'] = headers; } - if (typeof scheduledAt !== 'undefined') { - payload['scheduledAt'] = scheduledAt; - } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2574,8 +2452,8 @@ class Functions { * @param {string} functionId * @param {string} executionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getExecution(functionId, executionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof functionId === 'undefined') { @@ -2587,17 +2465,16 @@ class Functions { const apiPath = '/functions/{functionId}/executions/{executionId}'.replace('{functionId}', functionId).replace('{executionId}', executionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } } -class Graphql { +class Graphql extends Service { constructor(client) { - this.client = client; + super(client); } /** * GraphQL endpoint @@ -2606,8 +2483,8 @@ class Graphql { * * @param {object} query * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ query(query) { return __awaiter(this, void 0, void 0, function* () { if (typeof query === 'undefined') { @@ -2619,11 +2496,10 @@ class Graphql { payload['query'] = query; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'x-sdk-graphql': 'true', 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2633,8 +2509,8 @@ class Graphql { * * @param {object} query * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ mutation(query) { return __awaiter(this, void 0, void 0, function* () { if (typeof query === 'undefined') { @@ -2646,178 +2522,180 @@ class Graphql { payload['query'] = query; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'x-sdk-graphql': 'true', 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } } -class Locale { +class Locale extends Service { constructor(client) { - this.client = client; + super(client); } /** * Get user locale * - * Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language. - -([IP Geolocation by DB-IP](https://db-ip.com)) + * Get the current user location based on IP. Returns an object with user + * country code, country name, continent name, continent code, ip address and + * suggested currency. You can use the locale header to get the data in a + * supported language. + * + * ([IP Geolocation by DB-IP](https://db-ip.com)) * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ get() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List Locale Codes * - * List of all locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). + * List of all locale codes in [ISO + * 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List continents * - * List of all continents. You can use the locale header to get the data in a supported language. + * List of all continents. You can use the locale header to get the data in a + * supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listContinents() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/continents'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List countries * - * List of all countries. You can use the locale header to get the data in a supported language. + * List of all countries. You can use the locale header to get the data in a + * supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountries() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/countries'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List EU countries * - * List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language. + * List of all countries that are currently members of the EU. You can use the + * locale header to get the data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountriesEU() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/countries/eu'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List countries phone codes * - * List of all countries phone codes. You can use the locale header to get the data in a supported language. + * List of all countries phone codes. You can use the locale header to get the + * data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountriesPhones() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/countries/phones'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List currencies * - * List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language. + * List of all currencies, including currency symbol, name, plural, and + * decimal digits for all major and minor currencies. You can use the locale + * header to get the data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCurrencies() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/currencies'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List languages * - * List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language. + * List of all languages classified by ISO 639-1 including 2-letter code, name + * in English, and name in the respective language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listLanguages() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/languages'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } } -class Messaging { +class Messaging extends Service { constructor(client) { - this.client = client; + super(client); } /** * Create subscriber @@ -2828,8 +2706,8 @@ class Messaging { * @param {string} subscriberId * @param {string} targetId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createSubscriber(topicId, subscriberId, targetId) { return __awaiter(this, void 0, void 0, function* () { if (typeof topicId === 'undefined') { @@ -2850,10 +2728,9 @@ class Messaging { payload['targetId'] = targetId; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2864,8 +2741,8 @@ class Messaging { * @param {string} topicId * @param {string} subscriberId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSubscriber(topicId, subscriberId) { return __awaiter(this, void 0, void 0, function* () { if (typeof topicId === 'undefined') { @@ -2877,29 +2754,29 @@ class Messaging { const apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}'.replace('{topicId}', topicId).replace('{subscriberId}', subscriberId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } } -class Storage { +class Storage extends Service { constructor(client) { - this.client = client; + super(client); } /** * List files * - * Get a list of all the user files. You can use the query params to filter your results. + * Get a list of all the user files. You can use the query params to filter + * your results. * * @param {string} bucketId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listFiles(bucketId, queries, search) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -2914,31 +2791,40 @@ class Storage { payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create file * - * Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](https://appwrite.io/docs/server/storage#storageCreateBucket) API or directly from your Appwrite console. - -Larger files should be uploaded using multiple requests with the [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes. - -When the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one. - -If you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally. - + * Create a new file. Before using this route, you should create a new bucket + * resource using either a [server + * integration](https://appwrite.io/docs/server/storage#storageCreateBucket) + * API or directly from your Appwrite console. + * + * Larger files should be uploaded using multiple requests with the + * [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) + * header to send a partial request with a maximum supported chunk of `5MB`. + * The `content-range` header values should always be in bytes. + * + * When the first request is sent, the server will return the **File** object, + * and the subsequent part request must include the file's **id** in + * `x-appwrite-id` header to allow the server to know that the partial upload + * is for the existing file and not for a new one. + * + * If you're creating a new file using one of the Appwrite SDKs, all the + * chunking logic will be managed by the SDK internally. + * * * @param {string} bucketId * @param {string} fileId * @param {File} file * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createFile(bucketId, fileId, file, permissions, onProgress = (progress) => { }) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -2962,22 +2848,62 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); + if (!(file instanceof File)) { + throw new AppwriteException('Parameter "file" has to be a File.'); + } + const size = file.size; + if (size <= Service.CHUNK_SIZE) { + return yield this.client.call('post', uri, { + 'content-type': 'multipart/form-data', + }, payload); + } const apiHeaders = { 'content-type': 'multipart/form-data', }; - return yield this.client.chunkedUpload('post', uri, apiHeaders, payload, onProgress); + let offset = 0; + let response = undefined; + if (fileId != 'unique()') { + try { + response = yield this.client.call('GET', new URL(this.client.config.endpoint + apiPath + '/' + fileId), apiHeaders); + offset = response.chunksUploaded * Service.CHUNK_SIZE; + } + catch (e) { + } + } + while (offset < size) { + let end = Math.min(offset + Service.CHUNK_SIZE - 1, size - 1); + apiHeaders['content-range'] = 'bytes ' + offset + '-' + end + '/' + size; + if (response && response.$id) { + apiHeaders['x-appwrite-id'] = response.$id; + } + const chunk = file.slice(offset, end + 1); + payload['file'] = new File([chunk], file.name); + response = yield this.client.call('post', uri, apiHeaders, payload); + if (onProgress) { + onProgress({ + $id: response.$id, + progress: (offset / size) * 100, + sizeUploaded: offset, + chunksTotal: response.chunksTotal, + chunksUploaded: response.chunksUploaded + }); + } + offset += Service.CHUNK_SIZE; + } + return response; }); } /** * Get file * - * Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata. + * Get a file by its unique ID. This endpoint response returns a JSON object + * with the file metadata. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getFile(bucketId, fileId) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -2989,24 +2915,24 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update file * - * Update a file by its unique ID. Only users with write permissions have access to update this resource. + * Update a file by its unique ID. Only users with write permissions have + * access to update this resource. * * @param {string} bucketId * @param {string} fileId * @param {string} name * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateFile(bucketId, fileId, name, permissions) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -3024,22 +2950,22 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Delete File * - * Delete a file by its unique ID. Only users with write permissions have access to delete this resource. + * Delete a file by its unique ID. Only users with write permissions have + * access to delete this resource. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteFile(bucketId, fileId) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -3051,22 +2977,23 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Get file for download * - * Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory. + * Get a file content by its unique ID. The endpoint response return with a + * 'Content-Disposition: attachment' header that tells the browser to start + * downloading the file to user downloads directory. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFileDownload(bucketId, fileId) { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); @@ -3081,16 +3008,16 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get file preview * - * Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB. + * Get a file preview image. Currently, this method supports preview for image + * files (jpg, png, and gif), other supported formats, like pdf, docs, slides, + * and spreadsheets, will return the file icon image. You can also pass query + * string arguments for cutting and resizing your preview image. Preview is + * supported only for image files smaller than 10MB. * * @param {string} bucketId * @param {string} fileId @@ -3106,8 +3033,8 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk * @param {string} background * @param {ImageFormat} output * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFilePreview(bucketId, fileId, width, height, gravity, quality, borderWidth, borderColor, borderRadius, opacity, rotation, background, output) { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); @@ -3155,22 +3082,20 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get file for view * - * Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header. + * Get a file content by its unique ID. This endpoint is similar to the + * download method but returns with no 'Content-Disposition: attachment' + * header. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFileView(bucketId, fileId) { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); @@ -3185,28 +3110,25 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } } -class Teams { +class Teams extends Service { constructor(client) { - this.client = client; + super(client); } /** * List teams * - * Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results. + * Get a list of all the teams in which the current user is a member. You can + * use the parameters to filter your results. * * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ list(queries, search) { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/teams'; @@ -3218,23 +3140,24 @@ class Teams { payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create team * - * Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team. + * Create a new team. The user who creates the team will automatically be + * assigned as the owner of the team. Only the users with the owner role can + * invite new members, add new owners and delete or update the team. * * @param {string} teamId * @param {string} name * @param {string[]} roles * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ create(teamId, name, roles) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3255,10 +3178,9 @@ class Teams { payload['roles'] = roles; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -3268,8 +3190,8 @@ class Teams { * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ get(teamId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3278,22 +3200,21 @@ class Teams { const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update name * - * Update the team's name by its unique ID. + * Update the team's name by its unique ID. * * @param {string} teamId * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateName(teamId, name) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3308,21 +3229,21 @@ class Teams { payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Delete team * - * Delete a team using its ID. Only team members with the owner role can delete the team. + * Delete a team using its ID. Only team members with the owner role can + * delete the team. * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ delete(teamId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3331,23 +3252,23 @@ class Teams { const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * List team memberships * - * Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint. + * Use this endpoint to list a team's members using the team's ID. All team + * members have read access to this endpoint. * * @param {string} teamId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listMemberships(teamId, queries, search) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3362,23 +3283,35 @@ class Teams { payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create team membership * - * Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appwrite will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn't exist. If initiated from a Server SDK, the new member will be added automatically to the team. - -You only need to provide one of a user ID, email, or phone number. Appwrite will prioritize accepting the user ID > email > phone number if you provide more than one of these parameters. - -Use the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team. - -Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appwrite will accept the only redirect URLs under the domains you have added as a platform on the Appwrite Console. - + * Invite a new member to join your team. Provide an ID for existing users, or + * invite unregistered users using an email or phone number. If initiated from + * a Client SDK, Appwrite will send an email or sms with a link to join the + * team to the invited user, and an account will be created for them if one + * doesn't exist. If initiated from a Server SDK, the new member will be added + * automatically to the team. + * + * You only need to provide one of a user ID, email, or phone number. Appwrite + * will prioritize accepting the user ID > email > phone number if you provide + * more than one of these parameters. + * + * Use the `url` parameter to redirect the user from the invitation email to + * your app. After the user is redirected, use the [Update Team Membership + * Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) + * endpoint to allow the user to accept the invitation to the team. + * + * Please note that to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * Appwrite will accept the only redirect URLs under the domains you have + * added as a platform on the Appwrite Console. + * * * @param {string} teamId * @param {string[]} roles @@ -3388,8 +3321,8 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee * @param {string} url * @param {string} name * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMembership(teamId, roles, email, userId, phone, url, name) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3419,22 +3352,22 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Get team membership * - * Get a team member by the membership unique id. All team members have read access for this resource. + * Get a team member by the membership unique id. All team members have read + * access for this resource. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getMembership(teamId, membershipId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3446,24 +3379,25 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update membership * - * Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https://appwrite.io/docs/permissions). - + * Modify the roles of a team member. Only team members with the owner role + * have access to this endpoint. Learn more about [roles and + * permissions](https://appwrite.io/docs/permissions). + * * * @param {string} teamId * @param {string} membershipId * @param {string[]} roles * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMembership(teamId, membershipId, roles) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3481,22 +3415,23 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee payload['roles'] = roles; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Delete team membership * - * This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted. + * This endpoint allows a user to leave a team or for a team owner to delete + * the membership of any other team member. You can also use this endpoint to + * delete a user membership even if it is not accepted. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteMembership(teamId, membershipId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3508,27 +3443,29 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Update team membership status * - * Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user. - -If the request is successful, a session for the user is automatically created. - + * Use this endpoint to allow a user to accept an invitation to join a team + * after being redirected back to your app from the invitation email received + * by the user. + * + * If the request is successful, a session for the user is automatically + * created. + * * * @param {string} teamId * @param {string} membershipId * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMembershipStatus(teamId, membershipId, userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3552,21 +3489,22 @@ If the request is successful, a session for the user is automatically created. payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Get team preferences * - * Get the team's shared preferences by its unique ID. If a preference doesn't need to be shared by all team members, prefer storing them in [user preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). + * Get the team's shared preferences by its unique ID. If a preference doesn't + * need to be shared by all team members, prefer storing them in [user + * preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getPrefs(teamId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3575,22 +3513,23 @@ If the request is successful, a session for the user is automatically created. const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update preferences * - * Update the team's preferences by its unique ID. The object you pass is stored as is and replaces any previous value. The maximum allowed prefs size is 64kB and throws an error if exceeded. + * Update the team's preferences by its unique ID. The object you pass is + * stored as is and replaces any previous value. The maximum allowed prefs + * size is 64kB and throws an error if exceeded. * * @param {string} teamId * @param {object} prefs * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePrefs(teamId, prefs) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3605,64 +3544,27 @@ If the request is successful, a session for the user is automatically created. payload['prefs'] = prefs; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } } -/** - * Helper class to generate permission strings for resources. - */ class Permission { } -/** - * Generate read permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.read = (role) => { return `read("${role}")`; }; -/** - * Generate write permission string for the provided role. - * - * This is an alias of update, delete, and possibly create. - * Don't use write in combination with update, delete, or create. - * - * @param {string} role - * @returns {string} - */ Permission.write = (role) => { return `write("${role}")`; }; -/** - * Generate create permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.create = (role) => { return `create("${role}")`; }; -/** - * Generate update permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.update = (role) => { return `update("${role}")`; }; -/** - * Generate delete permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.delete = (role) => { return `delete("${role}")`; }; @@ -3762,25 +3664,10 @@ class Role { } var _a, _ID_hexTimestamp; -/** - * Helper class to generate ID strings for resources. - */ class ID { - /** - * Uses the provided ID as the ID for the resource. - * - * @param {string} id - * @returns {string} - */ static custom(id) { return id; } - /** - * Have Appwrite generate a unique ID for you. - * - * @param {number} padding. Default is 7. - * @returns {string} - */ static unique(padding = 7) { // Generate a unique ID with padding to have a longer ID const baseId = __classPrivateFieldGet(ID, _a, "m", _ID_hexTimestamp).call(ID); @@ -3880,7 +3767,7 @@ exports.CreditCard = void 0; CreditCard["AmericanExpress"] = "amex"; CreditCard["Argencard"] = "argencard"; CreditCard["Cabal"] = "cabal"; - CreditCard["Cencosud"] = "cencosud"; + CreditCard["Consosud"] = "censosud"; CreditCard["DinersClub"] = "diners"; CreditCard["Discover"] = "discover"; CreditCard["Elo"] = "elo"; @@ -4038,7 +3925,6 @@ exports.Flag = void 0; Flag["Palau"] = "pw"; Flag["PapuaNewGuinea"] = "pg"; Flag["Poland"] = "pl"; - Flag["FrenchPolynesia"] = "pf"; Flag["NorthKorea"] = "kp"; Flag["Portugal"] = "pt"; Flag["Paraguay"] = "py"; diff --git a/node_modules/appwrite/dist/cjs/sdk.js.map b/node_modules/appwrite/dist/cjs/sdk.js.map index 5c5b820..47e6e07 100644 --- a/node_modules/appwrite/dist/cjs/sdk.js.map +++ b/node_modules/appwrite/dist/cjs/sdk.js.map @@ -1 +1 @@ -{"version":3,"file":"sdk.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/query.ts","../../src/client.ts","../../src/service.ts","../../src/services/account.ts","../../src/services/avatars.ts","../../src/services/databases.ts","../../src/services/functions.ts","../../src/services/graphql.ts","../../src/services/locale.ts","../../src/services/messaging.ts","../../src/services/storage.ts","../../src/services/teams.ts","../../src/permission.ts","../../src/role.ts","../../src/id.ts","../../src/enums/authenticator-type.ts","../../src/enums/authentication-factor.ts","../../src/enums/o-auth-provider.ts","../../src/enums/browser.ts","../../src/enums/credit-card.ts","../../src/enums/flag.ts","../../src/enums/execution-method.ts","../../src/enums/image-gravity.ts","../../src/enums/image-format.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","type QueryTypesSingle = string | number | boolean;\nexport type QueryTypesList = string[] | number[] | boolean[] | Query[];\nexport type QueryTypes = QueryTypesSingle | QueryTypesList;\ntype AttributesTypes = string | string[];\n\n/**\n * Helper class to generate query strings.\n */\nexport class Query {\n method: string;\n attribute: AttributesTypes | undefined;\n values: QueryTypesList | undefined;\n\n /**\n * Constructor for Query class.\n *\n * @param {string} method\n * @param {AttributesTypes} attribute\n * @param {QueryTypes} values\n */\n constructor(\n method: string,\n attribute?: AttributesTypes,\n values?: QueryTypes\n ) {\n this.method = method;\n this.attribute = attribute;\n\n if (values !== undefined) {\n if (Array.isArray(values)) {\n this.values = values;\n } else {\n this.values = [values] as QueryTypesList;\n }\n }\n }\n\n /**\n * Convert the query object to a JSON string.\n *\n * @returns {string}\n */\n toString(): string {\n return JSON.stringify({\n method: this.method,\n attribute: this.attribute,\n values: this.values,\n });\n }\n\n /**\n * Filter resources where attribute is equal to value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static equal = (attribute: string, value: QueryTypes): string =>\n new Query(\"equal\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is not equal to value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static notEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"notEqual\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is less than value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static lessThan = (attribute: string, value: QueryTypes): string =>\n new Query(\"lessThan\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is less than or equal to value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static lessThanEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"lessThanEqual\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is greater than value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static greaterThan = (attribute: string, value: QueryTypes): string =>\n new Query(\"greaterThan\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is greater than or equal to value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static greaterThanEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"greaterThanEqual\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is null.\n *\n * @param {string} attribute\n * @returns {string}\n */\n static isNull = (attribute: string): string =>\n new Query(\"isNull\", attribute).toString();\n\n /**\n * Filter resources where attribute is not null.\n *\n * @param {string} attribute\n * @returns {string}\n */\n static isNotNull = (attribute: string): string =>\n new Query(\"isNotNull\", attribute).toString();\n\n /**\n * Filter resources where attribute is between start and end (inclusive).\n *\n * @param {string} attribute\n * @param {string | number} start\n * @param {string | number} end\n * @returns {string}\n */\n static between = (attribute: string, start: string | number, end: string | number): string =>\n new Query(\"between\", attribute, [start, end] as QueryTypesList).toString();\n\n /**\n * Filter resources where attribute starts with value.\n *\n * @param {string} attribute\n * @param {string} value\n * @returns {string}\n */\n static startsWith = (attribute: string, value: string): string =>\n new Query(\"startsWith\", attribute, value).toString();\n\n /**\n * Filter resources where attribute ends with value.\n *\n * @param {string} attribute\n * @param {string} value\n * @returns {string}\n */\n static endsWith = (attribute: string, value: string): string =>\n new Query(\"endsWith\", attribute, value).toString();\n\n /**\n * Specify which attributes should be returned by the API call.\n *\n * @param {string[]} attributes\n * @returns {string}\n */\n static select = (attributes: string[]): string =>\n new Query(\"select\", undefined, attributes).toString();\n\n /**\n * Filter resources by searching attribute for value.\n * A fulltext index on attribute is required for this query to work.\n *\n * @param {string} attribute\n * @param {string} value\n * @returns {string}\n */\n static search = (attribute: string, value: string): string =>\n new Query(\"search\", attribute, value).toString();\n\n /**\n * Sort results by attribute descending.\n *\n * @param {string} attribute\n * @returns {string}\n */\n static orderDesc = (attribute: string): string =>\n new Query(\"orderDesc\", attribute).toString();\n\n /**\n * Sort results by attribute ascending.\n *\n * @param {string} attribute\n * @returns {string}\n */\n static orderAsc = (attribute: string): string =>\n new Query(\"orderAsc\", attribute).toString();\n\n /**\n * Return results after documentId.\n *\n * @param {string} documentId\n * @returns {string}\n */\n static cursorAfter = (documentId: string): string =>\n new Query(\"cursorAfter\", undefined, documentId).toString();\n\n /**\n * Return results before documentId.\n *\n * @param {string} documentId\n * @returns {string}\n */\n static cursorBefore = (documentId: string): string =>\n new Query(\"cursorBefore\", undefined, documentId).toString();\n\n /**\n * Return only limit results.\n *\n * @param {number} limit\n * @returns {string}\n */\n static limit = (limit: number): string =>\n new Query(\"limit\", undefined, limit).toString();\n\n /**\n * Filter resources by skipping the first offset results.\n *\n * @param {number} offset\n * @returns {string}\n */\n static offset = (offset: number): string =>\n new Query(\"offset\", undefined, offset).toString();\n\n /**\n * Filter resources where attribute contains the specified value.\n *\n * @param {string} attribute\n * @param {string | string[]} value\n * @returns {string}\n */\n static contains = (attribute: string, value: string | string[]): string =>\n new Query(\"contains\", attribute, value).toString();\n\n /**\n * Combine multiple queries using logical OR operator.\n *\n * @param {string[]} queries\n * @returns {string}\n */\n static or = (queries: string[]) =>\n new Query(\"or\", undefined, queries.map((query) => JSON.parse(query))).toString();\n\n /**\n * Combine multiple queries using logical AND operator.\n *\n * @param {string[]} queries\n * @returns {string}\n */\n static and = (queries: string[]) =>\n new Query(\"and\", undefined, queries.map((query) => JSON.parse(query))).toString();\n}\n","import { Models } from './models';\n\n/**\n * Payload type representing a key-value pair with string keys and any values.\n */\ntype Payload = {\n [key: string]: any;\n}\n\n/**\n * Headers type representing a key-value pair with string keys and string values.\n */\ntype Headers = {\n [key: string]: string;\n}\n\n/**\n * Realtime response structure with different types.\n */\ntype RealtimeResponse = {\n /**\n * Type of the response: 'error', 'event', 'connected', or 'response'.\n */\n type: 'error' | 'event' | 'connected' | 'response';\n\n /**\n * Data associated with the response based on the response type.\n */\n data: RealtimeResponseAuthenticated | RealtimeResponseConnected | RealtimeResponseError | RealtimeResponseEvent;\n}\n\n/**\n * Realtime request structure for authentication.\n */\ntype RealtimeRequest = {\n /**\n * Type of the request: 'authentication'.\n */\n type: 'authentication';\n\n /**\n * Data required for authentication.\n */\n data: RealtimeRequestAuthenticate;\n}\n\n/**\n * Realtime event response structure with generic payload type.\n */\ntype RealtimeResponseEvent = {\n /**\n * List of event names associated with the response.\n */\n events: string[];\n\n /**\n * List of channel names associated with the response.\n */\n channels: string[];\n\n /**\n * Timestamp indicating the time of the event.\n */\n timestamp: number;\n\n /**\n * Payload containing event-specific data.\n */\n payload: T;\n}\n\n/**\n * Realtime response structure for errors.\n */\ntype RealtimeResponseError = {\n /**\n * Numeric error code indicating the type of error.\n */\n code: number;\n\n /**\n * Error message describing the encountered error.\n */\n message: string;\n}\n\n/**\n * Realtime response structure for a successful connection.\n */\ntype RealtimeResponseConnected = {\n /**\n * List of channels the user is connected to.\n */\n channels: string[];\n\n /**\n * User object representing the connected user (optional).\n */\n user?: object;\n}\n\n/**\n * Realtime response structure for authenticated connections.\n */\ntype RealtimeResponseAuthenticated = {\n /**\n * Destination channel for the response.\n */\n to: string;\n\n /**\n * Boolean indicating the success of the authentication process.\n */\n success: boolean;\n\n /**\n * User object representing the authenticated user.\n */\n user: object;\n}\n\n/**\n * Realtime request structure for authentication.\n */\ntype RealtimeRequestAuthenticate = {\n /**\n * Session identifier for authentication.\n */\n session: string;\n}\n\n/**\n * Realtime interface representing the structure of a realtime communication object.\n */\ntype Realtime = {\n /**\n * WebSocket instance for realtime communication.\n */\n socket?: WebSocket;\n\n /**\n * Timeout duration for communication operations.\n */\n timeout?: number;\n\n /**\n * URL for establishing the WebSocket connection.\n */\n url?: string;\n\n /**\n * Last received message from the realtime server.\n */\n lastMessage?: RealtimeResponse;\n\n /**\n * Set of channel names the client is subscribed to.\n */\n channels: Set;\n\n /**\n * Map of subscriptions containing channel names and corresponding callback functions.\n */\n subscriptions: Map) => void\n }>;\n\n /**\n * Counter for managing subscriptions.\n */\n subscriptionsCounter: number;\n\n /**\n * Boolean indicating whether automatic reconnection is enabled.\n */\n reconnect: boolean;\n\n /**\n * Number of reconnection attempts made.\n */\n reconnectAttempts: number;\n\n /**\n * Function to get the timeout duration for communication operations.\n */\n getTimeout: () => number;\n\n /**\n * Function to establish a WebSocket connection.\n */\n connect: () => void;\n\n /**\n * Function to create a new WebSocket instance.\n */\n createSocket: () => void;\n\n /**\n * Function to clean up resources associated with specified channels.\n *\n * @param {string[]} channels - List of channel names to clean up.\n */\n cleanUp: (channels: string[]) => void;\n\n /**\n * Function to handle incoming messages from the WebSocket connection.\n *\n * @param {MessageEvent} event - Event containing the received message.\n */\n onMessage: (event: MessageEvent) => void;\n}\n\n/**\n * Type representing upload progress information.\n */\ntype UploadProgress = {\n /**\n * Identifier for the upload progress.\n */\n $id: string;\n\n /**\n * Current progress of the upload (in percentage).\n */\n progress: number;\n\n /**\n * Total size uploaded (in bytes) during the upload process.\n */\n sizeUploaded: number;\n\n /**\n * Total number of chunks that need to be uploaded.\n */\n chunksTotal: number;\n\n /**\n * Number of chunks that have been successfully uploaded.\n */\n chunksUploaded: number;\n}\n\n/**\n * Exception thrown by the package\n */\nclass AppwriteException extends Error {\n /**\n * The error code associated with the exception.\n */\n code: number;\n\n /**\n * The response string associated with the exception.\n */\n response: string;\n\n /**\n * Error type.\n * See [Error Types](https://appwrite.io/docs/response-codes#errorTypes) for more information.\n */\n type: string;\n\n /**\n * Initializes a Appwrite Exception.\n *\n * @param {string} message - The error message.\n * @param {number} code - The error code. Default is 0.\n * @param {string} type - The error type. Default is an empty string.\n * @param {string} response - The response string. Default is an empty string.\n */\n constructor(message: string, code: number = 0, type: string = '', response: string = '') {\n super(message);\n this.name = 'AppwriteException';\n this.message = message;\n this.code = code;\n this.type = type;\n this.response = response;\n }\n}\n\n/**\n * Client that handles requests to Appwrite\n */\nclass Client {\n static CHUNK_SIZE = 1024 * 1024 * 5;\n\n /**\n * Holds configuration such as project.\n */\n config = {\n endpoint: 'https://cloud.appwrite.io/v1',\n endpointRealtime: '',\n project: '',\n jwt: '',\n locale: '',\n session: '',\n };\n /**\n * Custom headers for API requests.\n */\n headers: Headers = {\n 'x-sdk-name': 'Web',\n 'x-sdk-platform': 'client',\n 'x-sdk-language': 'web',\n 'x-sdk-version': '16.0.2',\n 'X-Appwrite-Response-Format': '1.6.0',\n };\n\n /**\n * Set Endpoint\n *\n * Your project endpoint\n *\n * @param {string} endpoint\n *\n * @returns {this}\n */\n setEndpoint(endpoint: string): this {\n this.config.endpoint = endpoint;\n this.config.endpointRealtime = this.config.endpointRealtime || this.config.endpoint.replace('https://', 'wss://').replace('http://', 'ws://');\n\n return this;\n }\n\n /**\n * Set Realtime Endpoint\n *\n * @param {string} endpointRealtime\n *\n * @returns {this}\n */\n setEndpointRealtime(endpointRealtime: string): this {\n this.config.endpointRealtime = endpointRealtime;\n\n return this;\n }\n\n /**\n * Set Project\n *\n * Your project ID\n *\n * @param value string\n *\n * @return {this}\n */\n setProject(value: string): this {\n this.headers['X-Appwrite-Project'] = value;\n this.config.project = value;\n return this;\n }\n /**\n * Set JWT\n *\n * Your secret JSON Web Token\n *\n * @param value string\n *\n * @return {this}\n */\n setJWT(value: string): this {\n this.headers['X-Appwrite-JWT'] = value;\n this.config.jwt = value;\n return this;\n }\n /**\n * Set Locale\n *\n * @param value string\n *\n * @return {this}\n */\n setLocale(value: string): this {\n this.headers['X-Appwrite-Locale'] = value;\n this.config.locale = value;\n return this;\n }\n /**\n * Set Session\n *\n * The user session to authenticate with\n *\n * @param value string\n *\n * @return {this}\n */\n setSession(value: string): this {\n this.headers['X-Appwrite-Session'] = value;\n this.config.session = value;\n return this;\n }\n\n private realtime: Realtime = {\n socket: undefined,\n timeout: undefined,\n url: '',\n channels: new Set(),\n subscriptions: new Map(),\n subscriptionsCounter: 0,\n reconnect: true,\n reconnectAttempts: 0,\n lastMessage: undefined,\n connect: () => {\n clearTimeout(this.realtime.timeout);\n this.realtime.timeout = window?.setTimeout(() => {\n this.realtime.createSocket();\n }, 50);\n },\n getTimeout: () => {\n switch (true) {\n case this.realtime.reconnectAttempts < 5:\n return 1000;\n case this.realtime.reconnectAttempts < 15:\n return 5000;\n case this.realtime.reconnectAttempts < 100:\n return 10_000;\n default:\n return 60_000;\n }\n },\n createSocket: () => {\n if (this.realtime.channels.size < 1) {\n this.realtime.reconnect = false;\n this.realtime.socket?.close();\n return;\n }\n\n const channels = new URLSearchParams();\n channels.set('project', this.config.project);\n this.realtime.channels.forEach(channel => {\n channels.append('channels[]', channel);\n });\n\n const url = this.config.endpointRealtime + '/realtime?' + channels.toString();\n\n if (\n url !== this.realtime.url || // Check if URL is present\n !this.realtime.socket || // Check if WebSocket has not been created\n this.realtime.socket?.readyState > WebSocket.OPEN // Check if WebSocket is CLOSING (3) or CLOSED (4)\n ) {\n if (\n this.realtime.socket &&\n this.realtime.socket?.readyState < WebSocket.CLOSING // Close WebSocket if it is CONNECTING (0) or OPEN (1)\n ) {\n this.realtime.reconnect = false;\n this.realtime.socket.close();\n }\n\n this.realtime.url = url;\n this.realtime.socket = new WebSocket(url);\n this.realtime.socket.addEventListener('message', this.realtime.onMessage);\n this.realtime.socket.addEventListener('open', _event => {\n this.realtime.reconnectAttempts = 0;\n });\n this.realtime.socket.addEventListener('close', event => {\n if (\n !this.realtime.reconnect ||\n (\n this.realtime?.lastMessage?.type === 'error' && // Check if last message was of type error\n (this.realtime?.lastMessage.data).code === 1008 // Check for policy violation 1008\n )\n ) {\n this.realtime.reconnect = true;\n return;\n }\n\n const timeout = this.realtime.getTimeout();\n console.error(`Realtime got disconnected. Reconnect will be attempted in ${timeout / 1000} seconds.`, event.reason);\n\n setTimeout(() => {\n this.realtime.reconnectAttempts++;\n this.realtime.createSocket();\n }, timeout);\n })\n }\n },\n onMessage: (event) => {\n try {\n const message: RealtimeResponse = JSON.parse(event.data);\n this.realtime.lastMessage = message;\n switch (message.type) {\n case 'connected':\n const cookie = JSON.parse(window.localStorage.getItem('cookieFallback') ?? '{}');\n const session = cookie?.[`a_session_${this.config.project}`];\n const messageData = message.data;\n\n if (session && !messageData.user) {\n this.realtime.socket?.send(JSON.stringify({\n type: 'authentication',\n data: {\n session\n }\n }));\n }\n break;\n case 'event':\n let data = >message.data;\n if (data?.channels) {\n const isSubscribed = data.channels.some(channel => this.realtime.channels.has(channel));\n if (!isSubscribed) return;\n this.realtime.subscriptions.forEach(subscription => {\n if (data.channels.some(channel => subscription.channels.includes(channel))) {\n setTimeout(() => subscription.callback(data));\n }\n })\n }\n break;\n case 'error':\n throw message.data;\n default:\n break;\n }\n } catch (e) {\n console.error(e);\n }\n },\n cleanUp: channels => {\n this.realtime.channels.forEach(channel => {\n if (channels.includes(channel)) {\n let found = Array.from(this.realtime.subscriptions).some(([_key, subscription] )=> {\n return subscription.channels.includes(channel);\n })\n\n if (!found) {\n this.realtime.channels.delete(channel);\n }\n }\n })\n }\n }\n\n /**\n * Subscribes to Appwrite events and passes you the payload in realtime.\n *\n * @param {string|string[]} channels\n * Channel to subscribe - pass a single channel as a string or multiple with an array of strings.\n *\n * Possible channels are:\n * - account\n * - collections\n * - collections.[ID]\n * - collections.[ID].documents\n * - documents\n * - documents.[ID]\n * - files\n * - files.[ID]\n * - executions\n * - executions.[ID]\n * - functions.[ID]\n * - teams\n * - teams.[ID]\n * - memberships\n * - memberships.[ID]\n * @param {(payload: RealtimeMessage) => void} callback Is called on every realtime update.\n * @returns {() => void} Unsubscribes from events.\n */\n subscribe(channels: string | string[], callback: (payload: RealtimeResponseEvent) => void): () => void {\n let channelArray = typeof channels === 'string' ? [channels] : channels;\n channelArray.forEach(channel => this.realtime.channels.add(channel));\n\n const counter = this.realtime.subscriptionsCounter++;\n this.realtime.subscriptions.set(counter, {\n channels: channelArray,\n callback\n });\n\n this.realtime.connect();\n\n return () => {\n this.realtime.subscriptions.delete(counter);\n this.realtime.cleanUp(channelArray);\n this.realtime.connect();\n }\n }\n\n prepareRequest(method: string, url: URL, headers: Headers = {}, params: Payload = {}): { uri: string, options: RequestInit } {\n method = method.toUpperCase();\n\n headers = Object.assign({}, this.headers, headers);\n\n if (typeof window !== 'undefined' && window.localStorage) {\n const cookieFallback = window.localStorage.getItem('cookieFallback');\n if (cookieFallback) {\n headers['X-Fallback-Cookies'] = cookieFallback;\n }\n }\n\n let options: RequestInit = {\n method,\n headers,\n credentials: 'include',\n };\n\n if (method === 'GET') {\n for (const [key, value] of Object.entries(Client.flatten(params))) {\n url.searchParams.append(key, value);\n }\n } else {\n switch (headers['content-type']) {\n case 'application/json':\n options.body = JSON.stringify(params);\n break;\n\n case 'multipart/form-data':\n const formData = new FormData();\n\n for (const [key, value] of Object.entries(params)) {\n if (value instanceof File) {\n formData.append(key, value, value.name);\n } else if (Array.isArray(value)) {\n for (const nestedValue of value) {\n formData.append(`${key}[]`, nestedValue);\n }\n } else {\n formData.append(key, value);\n }\n }\n\n options.body = formData;\n delete headers['content-type'];\n break;\n }\n }\n\n return { uri: url.toString(), options };\n }\n\n async chunkedUpload(method: string, url: URL, headers: Headers = {}, originalPayload: Payload = {}, onProgress: (progress: UploadProgress) => void) {\n const file = Object.values(originalPayload).find((value) => value instanceof File);\n\n if (file.size <= Client.CHUNK_SIZE) {\n return await this.call(method, url, headers, originalPayload);\n }\n\n let start = 0;\n let response = null;\n\n while (start < file.size) {\n let end = start + Client.CHUNK_SIZE; // Prepare end for the next chunk\n if (end >= file.size) {\n end = file.size; // Adjust for the last chunk to include the last byte\n }\n\n headers['content-range'] = `bytes ${start}-${end-1}/${file.size}`;\n const chunk = file.slice(start, end);\n\n let payload = { ...originalPayload, file: new File([chunk], file.name)};\n\n response = await this.call(method, url, headers, payload);\n\n if (onProgress && typeof onProgress === 'function') {\n onProgress({\n $id: response.$id,\n progress: Math.round((end / file.size) * 100),\n sizeUploaded: end,\n chunksTotal: Math.ceil(file.size / Client.CHUNK_SIZE),\n chunksUploaded: Math.ceil(end / Client.CHUNK_SIZE)\n });\n }\n\n if (response && response.$id) {\n headers['x-appwrite-id'] = response.$id;\n }\n\n start = end;\n }\n\n return response;\n }\n\n async call(method: string, url: URL, headers: Headers = {}, params: Payload = {}, responseType = 'json'): Promise {\n const { uri, options } = this.prepareRequest(method, url, headers, params);\n\n let data: any = null;\n\n const response = await fetch(uri, options);\n\n const warnings = response.headers.get('x-appwrite-warning');\n if (warnings) {\n warnings.split(';').forEach((warning: string) => console.warn('Warning: ' + warning));\n }\n\n if (response.headers.get('content-type')?.includes('application/json')) {\n data = await response.json();\n } else if (responseType === 'arrayBuffer') {\n data = await response.arrayBuffer();\n } else {\n data = {\n message: await response.text()\n };\n }\n\n if (400 <= response.status) {\n throw new AppwriteException(data?.message, response.status, data?.type, data);\n }\n\n const cookieFallback = response.headers.get('X-Fallback-Cookies');\n\n if (typeof window !== 'undefined' && window.localStorage && cookieFallback) {\n window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.');\n window.localStorage.setItem('cookieFallback', cookieFallback);\n }\n\n return data;\n }\n\n static flatten(data: Payload, prefix = ''): Payload {\n let output: Payload = {};\n\n for (const [key, value] of Object.entries(data)) {\n let finalKey = prefix ? prefix + '[' + key +']' : key;\n if (Array.isArray(value)) {\n output = { ...output, ...Client.flatten(value, finalKey) };\n } else {\n output[finalKey] = value;\n }\n }\n\n return output;\n }\n}\n\nexport { Client, AppwriteException };\nexport { Query } from './query';\nexport type { Models, Payload, UploadProgress };\nexport type { RealtimeResponseEvent };\nexport type { QueryTypes, QueryTypesList } from './query';\n","import { Client } from './client';\nimport type { Payload } from './client';\n\nexport class Service {\n /**\n * The size for chunked uploads in bytes.\n */\n static CHUNK_SIZE = 5*1024*1024; // 5MB\n\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n static flatten(data: Payload, prefix = ''): Payload {\n let output: Payload = {};\n\n for (const [key, value] of Object.entries(data)) {\n let finalKey = prefix ? prefix + '[' + key +']' : key;\n if (Array.isArray(value)) {\n output = { ...output, ...Service.flatten(value, finalKey) };\n } else {\n output[finalKey] = value;\n }\n }\n\n return output;\n }\n}","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\nimport { AuthenticatorType } from '../enums/authenticator-type';\nimport { AuthenticationFactor } from '../enums/authentication-factor';\nimport { OAuthProvider } from '../enums/o-auth-provider';\n\nexport class Account {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get account\n *\n * Get the currently logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async get(): Promise> {\n const apiPath = '/account';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create account\n *\n * Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession).\n *\n * @param {string} userId\n * @param {string} email\n * @param {string} password\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async create(userId: string, email: string, password: string, name?: string): Promise> {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update email\n *\n * Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n\n *\n * @param {string} email\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateEmail(email: string, password: string): Promise> {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account/email';\n const payload: Payload = {};\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List Identities\n *\n * Get the list of identities for the currently logged in user.\n *\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listIdentities(queries?: string[]): Promise {\n const apiPath = '/account/identities';\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete identity\n *\n * Delete an identity by its unique ID.\n *\n * @param {string} identityId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteIdentity(identityId: string): Promise<{}> {\n if (typeof identityId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identityId\"');\n }\n const apiPath = '/account/identities/{identityId}'.replace('{identityId}', identityId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create JWT\n *\n * Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createJWT(): Promise {\n const apiPath = '/account/jwts';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List logs\n *\n * Get the list of latest security activity logs for the currently logged in user. Each log returns user IP address, location and date and time of log.\n *\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listLogs(queries?: string[]): Promise {\n const apiPath = '/account/logs';\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update MFA\n *\n * Enable or disable MFA on an account.\n *\n * @param {boolean} mfa\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateMFA(mfa: boolean): Promise> {\n if (typeof mfa === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"mfa\"');\n }\n const apiPath = '/account/mfa';\n const payload: Payload = {};\n if (typeof mfa !== 'undefined') {\n payload['mfa'] = mfa;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create Authenticator\n *\n * Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](/docs/references/cloud/client-web/account#updateMfaAuthenticator) method.\n *\n * @param {AuthenticatorType} type\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaAuthenticator(type: AuthenticatorType): Promise {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Verify Authenticator\n *\n * Verify an authenticator app after adding it using the [add authenticator](/docs/references/cloud/client-web/account#createMfaAuthenticator) method.\n *\n * @param {AuthenticatorType} type\n * @param {string} otp\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateMfaAuthenticator(type: AuthenticatorType, otp: string): Promise> {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n if (typeof otp === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"otp\"');\n }\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n if (typeof otp !== 'undefined') {\n payload['otp'] = otp;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete Authenticator\n *\n * Delete an authenticator for a user by ID.\n *\n * @param {AuthenticatorType} type\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteMfaAuthenticator(type: AuthenticatorType): Promise<{}> {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create MFA Challenge\n *\n * Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) method.\n *\n * @param {AuthenticationFactor} factor\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaChallenge(factor: AuthenticationFactor): Promise {\n if (typeof factor === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"factor\"');\n }\n const apiPath = '/account/mfa/challenge';\n const payload: Payload = {};\n if (typeof factor !== 'undefined') {\n payload['factor'] = factor;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create MFA Challenge (confirmation)\n *\n * Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method.\n *\n * @param {string} challengeId\n * @param {string} otp\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async updateMfaChallenge(challengeId: string, otp: string): Promise<{}> {\n if (typeof challengeId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"challengeId\"');\n }\n if (typeof otp === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"otp\"');\n }\n const apiPath = '/account/mfa/challenge';\n const payload: Payload = {};\n if (typeof challengeId !== 'undefined') {\n payload['challengeId'] = challengeId;\n }\n if (typeof otp !== 'undefined') {\n payload['otp'] = otp;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List Factors\n *\n * List the factors available on the account to be used as a MFA challange.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listMfaFactors(): Promise {\n const apiPath = '/account/mfa/factors';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get MFA Recovery Codes\n *\n * Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create MFA Recovery Codes\n *\n * Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Regenerate MFA Recovery Codes\n *\n * Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update name\n *\n * Update currently logged in user account name.\n *\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateName(name: string): Promise> {\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n const apiPath = '/account/name';\n const payload: Payload = {};\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update password\n *\n * Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.\n *\n * @param {string} password\n * @param {string} oldPassword\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updatePassword(password: string, oldPassword?: string): Promise> {\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account/password';\n const payload: Payload = {};\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n if (typeof oldPassword !== 'undefined') {\n payload['oldPassword'] = oldPassword;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update phone\n *\n * Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) endpoint to send a confirmation SMS.\n *\n * @param {string} phone\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updatePhone(phone: string, password: string): Promise> {\n if (typeof phone === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"phone\"');\n }\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account/phone';\n const payload: Payload = {};\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get account preferences\n *\n * Get the preferences as a key-value object for the currently logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getPrefs(): Promise {\n const apiPath = '/account/prefs';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update preferences\n *\n * Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.\n *\n * @param {Partial} prefs\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updatePrefs(prefs: Partial): Promise> {\n if (typeof prefs === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"prefs\"');\n }\n const apiPath = '/account/prefs';\n const payload: Payload = {};\n if (typeof prefs !== 'undefined') {\n payload['prefs'] = prefs;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create password recovery\n *\n * Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.\n *\n * @param {string} email\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createRecovery(email: string, url: string): Promise {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n const apiPath = '/account/recovery';\n const payload: Payload = {};\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create password recovery (confirmation)\n *\n * Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n *\n * @param {string} userId\n * @param {string} secret\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateRecovery(userId: string, secret: string, password: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account/recovery';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List sessions\n *\n * Get the list of active sessions across different devices for the currently logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listSessions(): Promise {\n const apiPath = '/account/sessions';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete sessions\n *\n * Delete all sessions from the user account and remove any sessions cookies from the end client.\n *\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteSessions(): Promise<{}> {\n const apiPath = '/account/sessions';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create anonymous session\n *\n * Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) or create an [OAuth2 session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session).\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createAnonymousSession(): Promise {\n const apiPath = '/account/sessions/anonymous';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create email password session\n *\n * Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} email\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createEmailPasswordSession(email: string, password: string): Promise {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account/sessions/email';\n const payload: Payload = {};\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update magic URL session\n *\n * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMagicURLSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/account/sessions/magic-url';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create OAuth2 session\n *\n * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n\n *\n * @param {OAuthProvider} provider\n * @param {string} success\n * @param {string} failure\n * @param {string[]} scopes\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createOAuth2Session(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): Promise {\n if (typeof provider === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"provider\"');\n }\n const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider);\n const payload: Payload = {};\n if (typeof success !== 'undefined') {\n payload['success'] = success;\n }\n if (typeof failure !== 'undefined') {\n payload['failure'] = failure;\n }\n if (typeof scopes !== 'undefined') {\n payload['scopes'] = scopes;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n if (typeof window !== 'undefined' && window?.location) {\n window.location.href = uri.toString();\n return;\n } else {\n return uri.toString();\n }\n }\n /**\n * Update phone session\n *\n * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePhoneSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/account/sessions/phone';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create session\n *\n * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/account/sessions/token';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get session\n *\n * Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getSession(sessionId: string): Promise {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update session\n *\n * Use this endpoint to extend a session's length. Extending a session is useful when session expiry is short. If the session was created using an OAuth provider, this endpoint refreshes the access token from the provider.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateSession(sessionId: string): Promise {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete session\n *\n * Logout the user. Use 'current' as the session ID to logout on this device, use a session ID to logout on another device. If you're looking to logout the user on all devices, use [Delete Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) instead.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteSession(sessionId: string): Promise<{}> {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update status\n *\n * Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.\n *\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateStatus(): Promise> {\n const apiPath = '/account/status';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create push target\n *\n *\n * @param {string} targetId\n * @param {string} identifier\n * @param {string} providerId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPushTarget(targetId: string, identifier: string, providerId?: string): Promise {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n if (typeof identifier === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identifier\"');\n }\n const apiPath = '/account/targets/push';\n const payload: Payload = {};\n if (typeof targetId !== 'undefined') {\n payload['targetId'] = targetId;\n }\n if (typeof identifier !== 'undefined') {\n payload['identifier'] = identifier;\n }\n if (typeof providerId !== 'undefined') {\n payload['providerId'] = providerId;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update push target\n *\n *\n * @param {string} targetId\n * @param {string} identifier\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePushTarget(targetId: string, identifier: string): Promise {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n if (typeof identifier === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identifier\"');\n }\n const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId);\n const payload: Payload = {};\n if (typeof identifier !== 'undefined') {\n payload['identifier'] = identifier;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete push target\n *\n *\n * @param {string} targetId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deletePushTarget(targetId: string): Promise<{}> {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create email token (OTP)\n *\n * Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} userId\n * @param {string} email\n * @param {boolean} phrase\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createEmailToken(userId: string, email: string, phrase?: boolean): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n const apiPath = '/account/tokens/email';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof phrase !== 'undefined') {\n payload['phrase'] = phrase;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create magic URL token\n *\n * Sends the user an email with a secret key for creating a session. If the provided user ID has not been registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n\n *\n * @param {string} userId\n * @param {string} email\n * @param {string} url\n * @param {boolean} phrase\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMagicURLToken(userId: string, email: string, url?: string, phrase?: boolean): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n const apiPath = '/account/tokens/magic-url';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n if (typeof phrase !== 'undefined') {\n payload['phrase'] = phrase;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create OAuth2 token\n *\n * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. \n\nIf authentication succeeds, `userId` and `secret` of a token will be appended to the success URL as query parameters. These can be used to create a new session using the [Create session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {OAuthProvider} provider\n * @param {string} success\n * @param {string} failure\n * @param {string[]} scopes\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createOAuth2Token(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): Promise {\n if (typeof provider === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"provider\"');\n }\n const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider);\n const payload: Payload = {};\n if (typeof success !== 'undefined') {\n payload['success'] = success;\n }\n if (typeof failure !== 'undefined') {\n payload['failure'] = failure;\n }\n if (typeof scopes !== 'undefined') {\n payload['scopes'] = scopes;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n if (typeof window !== 'undefined' && window?.location) {\n window.location.href = uri.toString();\n return;\n } else {\n return uri.toString();\n }\n }\n /**\n * Create phone token\n *\n * Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} userId\n * @param {string} phone\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPhoneToken(userId: string, phone: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof phone === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"phone\"');\n }\n const apiPath = '/account/tokens/phone';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create email verification\n *\n * Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n\n *\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createVerification(url: string): Promise {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n const apiPath = '/account/verification';\n const payload: Payload = {};\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create email verification (confirmation)\n *\n * Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateVerification(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/account/verification';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create phone verification\n *\n * Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) endpoint. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPhoneVerification(): Promise {\n const apiPath = '/account/verification/phone';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update phone verification (confirmation)\n *\n * Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePhoneVerification(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/account/verification/phone';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\nimport { Browser } from '../enums/browser';\nimport { CreditCard } from '../enums/credit-card';\nimport { Flag } from '../enums/flag';\n\nexport class Avatars {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get browser icon\n *\n * You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n *\n * @param {Browser} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {string}\n */\n getBrowser(code: Browser, width?: number, height?: number, quality?: number): string {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n const apiPath = '/avatars/browsers/{code}'.replace('{code}', code);\n const payload: Payload = {};\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get credit card icon\n *\n * The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n\n *\n * @param {CreditCard} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {string}\n */\n getCreditCard(code: CreditCard, width?: number, height?: number, quality?: number): string {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n const apiPath = '/avatars/credit-cards/{code}'.replace('{code}', code);\n const payload: Payload = {};\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get favicon\n *\n * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n\nThis endpoint does not follow HTTP redirects.\n *\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {string}\n */\n getFavicon(url: string): string {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n const apiPath = '/avatars/favicon';\n const payload: Payload = {};\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get country flag\n *\n * You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n\n *\n * @param {Flag} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {string}\n */\n getFlag(code: Flag, width?: number, height?: number, quality?: number): string {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n const apiPath = '/avatars/flags/{code}'.replace('{code}', code);\n const payload: Payload = {};\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get image from URL\n *\n * Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n\nThis endpoint does not follow HTTP redirects.\n *\n * @param {string} url\n * @param {number} width\n * @param {number} height\n * @throws {AppwriteException}\n * @returns {string}\n */\n getImage(url: string, width?: number, height?: number): string {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n const apiPath = '/avatars/image';\n const payload: Payload = {};\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get user initials\n *\n * Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n\n *\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @param {string} background\n * @throws {AppwriteException}\n * @returns {string}\n */\n getInitials(name?: string, width?: number, height?: number, background?: string): string {\n const apiPath = '/avatars/initials';\n const payload: Payload = {};\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n if (typeof background !== 'undefined') {\n payload['background'] = background;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get QR code\n *\n * Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n\n *\n * @param {string} text\n * @param {number} size\n * @param {number} margin\n * @param {boolean} download\n * @throws {AppwriteException}\n * @returns {string}\n */\n getQR(text: string, size?: number, margin?: number, download?: boolean): string {\n if (typeof text === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"text\"');\n }\n const apiPath = '/avatars/qr';\n const payload: Payload = {};\n if (typeof text !== 'undefined') {\n payload['text'] = text;\n }\n if (typeof size !== 'undefined') {\n payload['size'] = size;\n }\n if (typeof margin !== 'undefined') {\n payload['margin'] = margin;\n }\n if (typeof download !== 'undefined') {\n payload['download'] = download;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\n\nexport class Databases {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * List documents\n *\n * Get a list of all the user's documents in a given collection. You can use the query params to filter your results.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async listDocuments(databaseId: string, collectionId: string, queries?: string[]): Promise> {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId);\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create document\n *\n * Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) API or directly from your database console.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {Omit} data\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createDocument(databaseId: string, collectionId: string, documentId: string, data: Omit, permissions?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n if (typeof data === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"data\"');\n }\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId);\n const payload: Payload = {};\n if (typeof documentId !== 'undefined') {\n payload['documentId'] = documentId;\n }\n if (typeof data !== 'undefined') {\n payload['data'] = data;\n }\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get document\n *\n * Get a document by its unique ID. This endpoint response returns a JSON object with the document data.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getDocument(databaseId: string, collectionId: string, documentId: string, queries?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update document\n *\n * Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {Partial>} data\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateDocument(databaseId: string, collectionId: string, documentId: string, data?: Partial>, permissions?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n if (typeof data !== 'undefined') {\n payload['data'] = data;\n }\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete document\n *\n * Delete a document by its unique ID.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteDocument(databaseId: string, collectionId: string, documentId: string): Promise<{}> {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\nimport { ExecutionMethod } from '../enums/execution-method';\n\nexport class Functions {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * List executions\n *\n * Get a list of all the current user function execution logs. You can use the query params to filter your results.\n *\n * @param {string} functionId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listExecutions(functionId: string, queries?: string[], search?: string): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n const apiPath = '/functions/{functionId}/executions'.replace('{functionId}', functionId);\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create execution\n *\n * Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.\n *\n * @param {string} functionId\n * @param {string} body\n * @param {boolean} async\n * @param {string} xpath\n * @param {ExecutionMethod} method\n * @param {object} headers\n * @param {string} scheduledAt\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createExecution(functionId: string, body?: string, async?: boolean, xpath?: string, method?: ExecutionMethod, headers?: object, scheduledAt?: string): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n const apiPath = '/functions/{functionId}/executions'.replace('{functionId}', functionId);\n const payload: Payload = {};\n if (typeof body !== 'undefined') {\n payload['body'] = body;\n }\n if (typeof async !== 'undefined') {\n payload['async'] = async;\n }\n if (typeof xpath !== 'undefined') {\n payload['path'] = xpath;\n }\n if (typeof method !== 'undefined') {\n payload['method'] = method;\n }\n if (typeof headers !== 'undefined') {\n payload['headers'] = headers;\n }\n if (typeof scheduledAt !== 'undefined') {\n payload['scheduledAt'] = scheduledAt;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get execution\n *\n * Get a function execution log by its unique ID.\n *\n * @param {string} functionId\n * @param {string} executionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getExecution(functionId: string, executionId: string): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n if (typeof executionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"executionId\"');\n }\n const apiPath = '/functions/{functionId}/executions/{executionId}'.replace('{functionId}', functionId).replace('{executionId}', executionId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\n\nexport class Graphql {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * GraphQL endpoint\n *\n * Execute a GraphQL mutation.\n *\n * @param {object} query\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async query(query: object): Promise<{}> {\n if (typeof query === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"query\"');\n }\n const apiPath = '/graphql';\n const payload: Payload = {};\n if (typeof query !== 'undefined') {\n payload['query'] = query;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'x-sdk-graphql': 'true',\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * GraphQL endpoint\n *\n * Execute a GraphQL mutation.\n *\n * @param {object} query\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async mutation(query: object): Promise<{}> {\n if (typeof query === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"query\"');\n }\n const apiPath = '/graphql/mutation';\n const payload: Payload = {};\n if (typeof query !== 'undefined') {\n payload['query'] = query;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'x-sdk-graphql': 'true',\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\n\nexport class Locale {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get user locale\n *\n * Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https://db-ip.com))\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async get(): Promise {\n const apiPath = '/locale';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List Locale Codes\n *\n * List of all locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes).\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCodes(): Promise {\n const apiPath = '/locale/codes';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List continents\n *\n * List of all continents. You can use the locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listContinents(): Promise {\n const apiPath = '/locale/continents';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List countries\n *\n * List of all countries. You can use the locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountries(): Promise {\n const apiPath = '/locale/countries';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List EU countries\n *\n * List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountriesEU(): Promise {\n const apiPath = '/locale/countries/eu';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List countries phone codes\n *\n * List of all countries phone codes. You can use the locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountriesPhones(): Promise {\n const apiPath = '/locale/countries/phones';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List currencies\n *\n * List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCurrencies(): Promise {\n const apiPath = '/locale/currencies';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List languages\n *\n * List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listLanguages(): Promise {\n const apiPath = '/locale/languages';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\n\nexport class Messaging {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Create subscriber\n *\n * Create a new subscriber.\n *\n * @param {string} topicId\n * @param {string} subscriberId\n * @param {string} targetId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createSubscriber(topicId: string, subscriberId: string, targetId: string): Promise {\n if (typeof topicId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"topicId\"');\n }\n if (typeof subscriberId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"subscriberId\"');\n }\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n const apiPath = '/messaging/topics/{topicId}/subscribers'.replace('{topicId}', topicId);\n const payload: Payload = {};\n if (typeof subscriberId !== 'undefined') {\n payload['subscriberId'] = subscriberId;\n }\n if (typeof targetId !== 'undefined') {\n payload['targetId'] = targetId;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete subscriber\n *\n * Delete a subscriber by its unique ID.\n *\n * @param {string} topicId\n * @param {string} subscriberId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteSubscriber(topicId: string, subscriberId: string): Promise<{}> {\n if (typeof topicId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"topicId\"');\n }\n if (typeof subscriberId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"subscriberId\"');\n }\n const apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}'.replace('{topicId}', topicId).replace('{subscriberId}', subscriberId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\nimport { ImageGravity } from '../enums/image-gravity';\nimport { ImageFormat } from '../enums/image-format';\n\nexport class Storage {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * List files\n *\n * Get a list of all the user files. You can use the query params to filter your results.\n *\n * @param {string} bucketId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listFiles(bucketId: string, queries?: string[], search?: string): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files'.replace('{bucketId}', bucketId);\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create file\n *\n * Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](https://appwrite.io/docs/server/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {File} file\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createFile(bucketId: string, fileId: string, file: File, permissions?: string[], onProgress = (progress: UploadProgress) => {}): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n if (typeof file === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"file\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files'.replace('{bucketId}', bucketId);\n const payload: Payload = {};\n if (typeof fileId !== 'undefined') {\n payload['fileId'] = fileId;\n }\n if (typeof file !== 'undefined') {\n payload['file'] = file;\n }\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'multipart/form-data',\n }\n\n\n return await this.client.chunkedUpload(\n 'post',\n uri,\n apiHeaders,\n payload,\n onProgress\n );\n }\n /**\n * Get file\n *\n * Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getFile(bucketId: string, fileId: string): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update file\n *\n * Update a file by its unique ID. Only users with write permissions have access to update this resource.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {string} name\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateFile(bucketId: string, fileId: string, name?: string, permissions?: string[]): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete File\n *\n * Delete a file by its unique ID. Only users with write permissions have access to delete this resource.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteFile(bucketId: string, fileId: string): Promise<{}> {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get file for download\n *\n * Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {string}\n */\n getFileDownload(bucketId: string, fileId: string): string {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get file preview\n *\n * Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {number} width\n * @param {number} height\n * @param {ImageGravity} gravity\n * @param {number} quality\n * @param {number} borderWidth\n * @param {string} borderColor\n * @param {number} borderRadius\n * @param {number} opacity\n * @param {number} rotation\n * @param {string} background\n * @param {ImageFormat} output\n * @throws {AppwriteException}\n * @returns {string}\n */\n getFilePreview(bucketId: string, fileId: string, width?: number, height?: number, gravity?: ImageGravity, quality?: number, borderWidth?: number, borderColor?: string, borderRadius?: number, opacity?: number, rotation?: number, background?: string, output?: ImageFormat): string {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n if (typeof gravity !== 'undefined') {\n payload['gravity'] = gravity;\n }\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n if (typeof borderWidth !== 'undefined') {\n payload['borderWidth'] = borderWidth;\n }\n if (typeof borderColor !== 'undefined') {\n payload['borderColor'] = borderColor;\n }\n if (typeof borderRadius !== 'undefined') {\n payload['borderRadius'] = borderRadius;\n }\n if (typeof opacity !== 'undefined') {\n payload['opacity'] = opacity;\n }\n if (typeof rotation !== 'undefined') {\n payload['rotation'] = rotation;\n }\n if (typeof background !== 'undefined') {\n payload['background'] = background;\n }\n if (typeof output !== 'undefined') {\n payload['output'] = output;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get file for view\n *\n * Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {string}\n */\n getFileView(bucketId: string, fileId: string): string {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\n\nexport class Teams {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * List teams\n *\n * Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.\n *\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async list(queries?: string[], search?: string): Promise> {\n const apiPath = '/teams';\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create team\n *\n * Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.\n *\n * @param {string} teamId\n * @param {string} name\n * @param {string[]} roles\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async create(teamId: string, name: string, roles?: string[]): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n const apiPath = '/teams';\n const payload: Payload = {};\n if (typeof teamId !== 'undefined') {\n payload['teamId'] = teamId;\n }\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get team\n *\n * Get a team by its ID. All team members have read access for this resource.\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async get(teamId: string): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update name\n *\n * Update the team's name by its unique ID.\n *\n * @param {string} teamId\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateName(teamId: string, name: string): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete team\n *\n * Delete a team using its ID. Only team members with the owner role can delete the team.\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async delete(teamId: string): Promise<{}> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List team memberships\n *\n * Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.\n *\n * @param {string} teamId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listMemberships(teamId: string, queries?: string[], search?: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId);\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create team membership\n *\n * Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appwrite will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn't exist. If initiated from a Server SDK, the new member will be added automatically to the team.\n\nYou only need to provide one of a user ID, email, or phone number. Appwrite will prioritize accepting the user ID > email > phone number if you provide more than one of these parameters.\n\nUse the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appwrite will accept the only redirect URLs under the domains you have added as a platform on the Appwrite Console.\n\n *\n * @param {string} teamId\n * @param {string[]} roles\n * @param {string} email\n * @param {string} userId\n * @param {string} phone\n * @param {string} url\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMembership(teamId: string, roles: string[], email?: string, userId?: string, phone?: string, url?: string, name?: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof roles === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"roles\"');\n }\n const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId);\n const payload: Payload = {};\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get team membership\n *\n * Get a team member by the membership unique id. All team members have read access for this resource.\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getMembership(teamId: string, membershipId: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update membership\n *\n * Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https://appwrite.io/docs/permissions).\n\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @param {string[]} roles\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMembership(teamId: string, membershipId: string, roles: string[]): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n if (typeof roles === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"roles\"');\n }\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete team membership\n *\n * This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteMembership(teamId: string, membershipId: string): Promise<{}> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update team membership status\n *\n * Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMembershipStatus(teamId: string, membershipId: string, userId: string, secret: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/teams/{teamId}/memberships/{membershipId}/status'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get team preferences\n *\n * Get the team's shared preferences by its unique ID. If a preference doesn't need to be shared by all team members, prefer storing them in [user preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs).\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getPrefs(teamId: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update preferences\n *\n * Update the team's preferences by its unique ID. The object you pass is stored as is and replaces any previous value. The maximum allowed prefs size is 64kB and throws an error if exceeded.\n *\n * @param {string} teamId\n * @param {object} prefs\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePrefs(teamId: string, prefs: object): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof prefs === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"prefs\"');\n }\n const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId);\n const payload: Payload = {};\n if (typeof prefs !== 'undefined') {\n payload['prefs'] = prefs;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","/**\n * Helper class to generate permission strings for resources.\n */\nexport class Permission {\n /**\n * Generate read permission string for the provided role.\n *\n * @param {string} role\n * @returns {string}\n */\n static read = (role: string): string => {\n return `read(\"${role}\")`;\n }\n\n /**\n * Generate write permission string for the provided role.\n *\n * This is an alias of update, delete, and possibly create.\n * Don't use write in combination with update, delete, or create.\n *\n * @param {string} role\n * @returns {string}\n */\n static write = (role: string): string => {\n return `write(\"${role}\")`;\n }\n\n /**\n * Generate create permission string for the provided role.\n *\n * @param {string} role\n * @returns {string}\n */\n static create = (role: string): string => {\n return `create(\"${role}\")`;\n }\n\n /**\n * Generate update permission string for the provided role.\n *\n * @param {string} role\n * @returns {string}\n */\n static update = (role: string): string => {\n return `update(\"${role}\")`;\n }\n\n /**\n * Generate delete permission string for the provided role.\n *\n * @param {string} role\n * @returns {string}\n */\n static delete = (role: string): string => {\n return `delete(\"${role}\")`;\n }\n}\n","/**\n * Helper class to generate role strings for `Permission`.\n */\nexport class Role {\n\n /**\n * Grants access to anyone.\n * \n * This includes authenticated and unauthenticated users.\n * \n * @returns {string}\n */\n public static any(): string {\n return 'any'\n }\n\n /**\n * Grants access to a specific user by user ID.\n * \n * You can optionally pass verified or unverified for\n * `status` to target specific types of users.\n *\n * @param {string} id \n * @param {string} status \n * @returns {string}\n */\n public static user(id: string, status: string = ''): string {\n if (status === '') {\n return `user:${id}`\n }\n return `user:${id}/${status}`\n }\n\n /**\n * Grants access to any authenticated or anonymous user.\n * \n * You can optionally pass verified or unverified for\n * `status` to target specific types of users.\n * \n * @param {string} status \n * @returns {string}\n */\n public static users(status: string = ''): string {\n if (status === '') {\n return 'users'\n }\n return `users/${status}`\n }\n\n /**\n * Grants access to any guest user without a session.\n * \n * Authenticated users don't have access to this role.\n * \n * @returns {string}\n */\n public static guests(): string {\n return 'guests'\n }\n\n /**\n * Grants access to a team by team ID.\n * \n * You can optionally pass a role for `role` to target\n * team members with the specified role.\n * \n * @param {string} id \n * @param {string} role \n * @returns {string}\n */\n public static team(id: string, role: string = ''): string {\n if (role === '') {\n return `team:${id}`\n }\n return `team:${id}/${role}`\n }\n\n /**\n * Grants access to a specific member of a team.\n * \n * When the member is removed from the team, they will\n * no longer have access.\n * \n * @param {string} id \n * @returns {string}\n */\n public static member(id: string): string {\n return `member:${id}`\n }\n\n /**\n * Grants access to a user with the specified label.\n * \n * @param {string} name \n * @returns {string}\n */\n public static label(name: string): string {\n return `label:${name}`\n }\n}","/**\n * Helper class to generate ID strings for resources.\n */\nexport class ID {\n /**\n * Generate an hex ID based on timestamp.\n * Recreated from https://www.php.net/manual/en/function.uniqid.php\n *\n * @returns {string}\n */\n static #hexTimestamp(): string {\n const now = new Date();\n const sec = Math.floor(now.getTime() / 1000);\n const msec = now.getMilliseconds();\n\n // Convert to hexadecimal\n const hexTimestamp = sec.toString(16) + msec.toString(16).padStart(5, '0');\n return hexTimestamp;\n }\n\n /**\n * Uses the provided ID as the ID for the resource.\n *\n * @param {string} id\n * @returns {string}\n */\n public static custom(id: string): string {\n return id\n }\n\n /**\n * Have Appwrite generate a unique ID for you.\n * \n * @param {number} padding. Default is 7.\n * @returns {string}\n */\n public static unique(padding: number = 7): string {\n // Generate a unique ID with padding to have a longer ID\n const baseId = ID.#hexTimestamp();\n let randomPadding = '';\n for (let i = 0; i < padding; i++) {\n const randomHexDigit = Math.floor(Math.random() * 16).toString(16);\n randomPadding += randomHexDigit;\n }\n return baseId + randomPadding;\n }\n}\n","export enum AuthenticatorType {\n Totp = 'totp',\n}","export enum AuthenticationFactor {\n Email = 'email',\n Phone = 'phone',\n Totp = 'totp',\n Recoverycode = 'recoverycode',\n}","export enum OAuthProvider {\n Amazon = 'amazon',\n Apple = 'apple',\n Auth0 = 'auth0',\n Authentik = 'authentik',\n Autodesk = 'autodesk',\n Bitbucket = 'bitbucket',\n Bitly = 'bitly',\n Box = 'box',\n Dailymotion = 'dailymotion',\n Discord = 'discord',\n Disqus = 'disqus',\n Dropbox = 'dropbox',\n Etsy = 'etsy',\n Facebook = 'facebook',\n Github = 'github',\n Gitlab = 'gitlab',\n Google = 'google',\n Linkedin = 'linkedin',\n Microsoft = 'microsoft',\n Notion = 'notion',\n Oidc = 'oidc',\n Okta = 'okta',\n Paypal = 'paypal',\n PaypalSandbox = 'paypalSandbox',\n Podio = 'podio',\n Salesforce = 'salesforce',\n Slack = 'slack',\n Spotify = 'spotify',\n Stripe = 'stripe',\n Tradeshift = 'tradeshift',\n TradeshiftBox = 'tradeshiftBox',\n Twitch = 'twitch',\n Wordpress = 'wordpress',\n Yahoo = 'yahoo',\n Yammer = 'yammer',\n Yandex = 'yandex',\n Zoho = 'zoho',\n Zoom = 'zoom',\n Mock = 'mock',\n}","export enum Browser {\n AvantBrowser = 'aa',\n AndroidWebViewBeta = 'an',\n GoogleChrome = 'ch',\n GoogleChromeIOS = 'ci',\n GoogleChromeMobile = 'cm',\n Chromium = 'cr',\n MozillaFirefox = 'ff',\n Safari = 'sf',\n MobileSafari = 'mf',\n MicrosoftEdge = 'ps',\n MicrosoftEdgeIOS = 'oi',\n OperaMini = 'om',\n Opera = 'op',\n OperaNext = 'on',\n}","export enum CreditCard {\n AmericanExpress = 'amex',\n Argencard = 'argencard',\n Cabal = 'cabal',\n Cencosud = 'cencosud',\n DinersClub = 'diners',\n Discover = 'discover',\n Elo = 'elo',\n Hipercard = 'hipercard',\n JCB = 'jcb',\n Mastercard = 'mastercard',\n Naranja = 'naranja',\n TarjetaShopping = 'targeta-shopping',\n UnionChinaPay = 'union-china-pay',\n Visa = 'visa',\n MIR = 'mir',\n Maestro = 'maestro',\n}","export enum Flag {\n Afghanistan = 'af',\n Angola = 'ao',\n Albania = 'al',\n Andorra = 'ad',\n UnitedArabEmirates = 'ae',\n Argentina = 'ar',\n Armenia = 'am',\n AntiguaAndBarbuda = 'ag',\n Australia = 'au',\n Austria = 'at',\n Azerbaijan = 'az',\n Burundi = 'bi',\n Belgium = 'be',\n Benin = 'bj',\n BurkinaFaso = 'bf',\n Bangladesh = 'bd',\n Bulgaria = 'bg',\n Bahrain = 'bh',\n Bahamas = 'bs',\n BosniaAndHerzegovina = 'ba',\n Belarus = 'by',\n Belize = 'bz',\n Bolivia = 'bo',\n Brazil = 'br',\n Barbados = 'bb',\n BruneiDarussalam = 'bn',\n Bhutan = 'bt',\n Botswana = 'bw',\n CentralAfricanRepublic = 'cf',\n Canada = 'ca',\n Switzerland = 'ch',\n Chile = 'cl',\n China = 'cn',\n CoteDIvoire = 'ci',\n Cameroon = 'cm',\n DemocraticRepublicOfTheCongo = 'cd',\n RepublicOfTheCongo = 'cg',\n Colombia = 'co',\n Comoros = 'km',\n CapeVerde = 'cv',\n CostaRica = 'cr',\n Cuba = 'cu',\n Cyprus = 'cy',\n CzechRepublic = 'cz',\n Germany = 'de',\n Djibouti = 'dj',\n Dominica = 'dm',\n Denmark = 'dk',\n DominicanRepublic = 'do',\n Algeria = 'dz',\n Ecuador = 'ec',\n Egypt = 'eg',\n Eritrea = 'er',\n Spain = 'es',\n Estonia = 'ee',\n Ethiopia = 'et',\n Finland = 'fi',\n Fiji = 'fj',\n France = 'fr',\n MicronesiaFederatedStatesOf = 'fm',\n Gabon = 'ga',\n UnitedKingdom = 'gb',\n Georgia = 'ge',\n Ghana = 'gh',\n Guinea = 'gn',\n Gambia = 'gm',\n GuineaBissau = 'gw',\n EquatorialGuinea = 'gq',\n Greece = 'gr',\n Grenada = 'gd',\n Guatemala = 'gt',\n Guyana = 'gy',\n Honduras = 'hn',\n Croatia = 'hr',\n Haiti = 'ht',\n Hungary = 'hu',\n Indonesia = 'id',\n India = 'in',\n Ireland = 'ie',\n IranIslamicRepublicOf = 'ir',\n Iraq = 'iq',\n Iceland = 'is',\n Israel = 'il',\n Italy = 'it',\n Jamaica = 'jm',\n Jordan = 'jo',\n Japan = 'jp',\n Kazakhstan = 'kz',\n Kenya = 'ke',\n Kyrgyzstan = 'kg',\n Cambodia = 'kh',\n Kiribati = 'ki',\n SaintKittsAndNevis = 'kn',\n SouthKorea = 'kr',\n Kuwait = 'kw',\n LaoPeopleSDemocraticRepublic = 'la',\n Lebanon = 'lb',\n Liberia = 'lr',\n Libya = 'ly',\n SaintLucia = 'lc',\n Liechtenstein = 'li',\n SriLanka = 'lk',\n Lesotho = 'ls',\n Lithuania = 'lt',\n Luxembourg = 'lu',\n Latvia = 'lv',\n Morocco = 'ma',\n Monaco = 'mc',\n Moldova = 'md',\n Madagascar = 'mg',\n Maldives = 'mv',\n Mexico = 'mx',\n MarshallIslands = 'mh',\n NorthMacedonia = 'mk',\n Mali = 'ml',\n Malta = 'mt',\n Myanmar = 'mm',\n Montenegro = 'me',\n Mongolia = 'mn',\n Mozambique = 'mz',\n Mauritania = 'mr',\n Mauritius = 'mu',\n Malawi = 'mw',\n Malaysia = 'my',\n Namibia = 'na',\n Niger = 'ne',\n Nigeria = 'ng',\n Nicaragua = 'ni',\n Netherlands = 'nl',\n Norway = 'no',\n Nepal = 'np',\n Nauru = 'nr',\n NewZealand = 'nz',\n Oman = 'om',\n Pakistan = 'pk',\n Panama = 'pa',\n Peru = 'pe',\n Philippines = 'ph',\n Palau = 'pw',\n PapuaNewGuinea = 'pg',\n Poland = 'pl',\n FrenchPolynesia = 'pf',\n NorthKorea = 'kp',\n Portugal = 'pt',\n Paraguay = 'py',\n Qatar = 'qa',\n Romania = 'ro',\n Russia = 'ru',\n Rwanda = 'rw',\n SaudiArabia = 'sa',\n Sudan = 'sd',\n Senegal = 'sn',\n Singapore = 'sg',\n SolomonIslands = 'sb',\n SierraLeone = 'sl',\n ElSalvador = 'sv',\n SanMarino = 'sm',\n Somalia = 'so',\n Serbia = 'rs',\n SouthSudan = 'ss',\n SaoTomeAndPrincipe = 'st',\n Suriname = 'sr',\n Slovakia = 'sk',\n Slovenia = 'si',\n Sweden = 'se',\n Eswatini = 'sz',\n Seychelles = 'sc',\n Syria = 'sy',\n Chad = 'td',\n Togo = 'tg',\n Thailand = 'th',\n Tajikistan = 'tj',\n Turkmenistan = 'tm',\n TimorLeste = 'tl',\n Tonga = 'to',\n TrinidadAndTobago = 'tt',\n Tunisia = 'tn',\n Turkey = 'tr',\n Tuvalu = 'tv',\n Tanzania = 'tz',\n Uganda = 'ug',\n Ukraine = 'ua',\n Uruguay = 'uy',\n UnitedStates = 'us',\n Uzbekistan = 'uz',\n VaticanCity = 'va',\n SaintVincentAndTheGrenadines = 'vc',\n Venezuela = 've',\n Vietnam = 'vn',\n Vanuatu = 'vu',\n Samoa = 'ws',\n Yemen = 'ye',\n SouthAfrica = 'za',\n Zambia = 'zm',\n Zimbabwe = 'zw',\n}","export enum ExecutionMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n DELETE = 'DELETE',\n OPTIONS = 'OPTIONS',\n}","export enum ImageGravity {\n Center = 'center',\n Topleft = 'top-left',\n Top = 'top',\n Topright = 'top-right',\n Left = 'left',\n Right = 'right',\n Bottomleft = 'bottom-left',\n Bottom = 'bottom',\n Bottomright = 'bottom-right',\n}","export enum ImageFormat {\n Jpg = 'jpg',\n Jpeg = 'jpeg',\n Gif = 'gif',\n Png = 'png',\n Webp = 'webp',\n}"],"names":["AuthenticatorType","AuthenticationFactor","OAuthProvider","Browser","CreditCard","Flag","ExecutionMethod","ImageGravity","ImageFormat"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"sdk.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/service.ts","../../src/query.ts","../../src/client.ts","../../src/services/account.ts","../../src/services/avatars.ts","../../src/services/databases.ts","../../src/services/functions.ts","../../src/services/graphql.ts","../../src/services/locale.ts","../../src/services/messaging.ts","../../src/services/storage.ts","../../src/services/teams.ts","../../src/permission.ts","../../src/role.ts","../../src/id.ts","../../src/enums/authenticator-type.ts","../../src/enums/authentication-factor.ts","../../src/enums/o-auth-provider.ts","../../src/enums/browser.ts","../../src/enums/credit-card.ts","../../src/enums/flag.ts","../../src/enums/execution-method.ts","../../src/enums/image-gravity.ts","../../src/enums/image-format.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { Client } from './client';\nimport type { Payload } from './client';\n\nexport class Service {\n static CHUNK_SIZE = 5*1024*1024; // 5MB\n\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n static flatten(data: Payload, prefix = ''): Payload {\n let output: Payload = {};\n\n for (const [key, value] of Object.entries(data)) {\n let finalKey = prefix ? prefix + '[' + key +']' : key;\n if (Array.isArray(value)) {\n output = { ...output, ...Service.flatten(value, finalKey) };\n } else {\n output[finalKey] = value;\n }\n }\n\n return output;\n }\n}","type QueryTypesSingle = string | number | boolean;\nexport type QueryTypesList = string[] | number[] | boolean[] | Query[];\nexport type QueryTypes = QueryTypesSingle | QueryTypesList;\ntype AttributesTypes = string | string[];\n\nexport class Query {\n method: string;\n attribute: AttributesTypes | undefined;\n values: QueryTypesList | undefined;\n\n constructor(\n method: string,\n attribute?: AttributesTypes,\n values?: QueryTypes\n ) {\n this.method = method;\n this.attribute = attribute;\n\n if (values !== undefined) {\n if (Array.isArray(values)) {\n this.values = values;\n } else {\n this.values = [values] as QueryTypesList;\n }\n }\n }\n\n toString(): string {\n return JSON.stringify({\n method: this.method,\n attribute: this.attribute,\n values: this.values,\n });\n }\n\n static equal = (attribute: string, value: QueryTypes): string =>\n new Query(\"equal\", attribute, value).toString();\n\n static notEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"notEqual\", attribute, value).toString();\n\n static lessThan = (attribute: string, value: QueryTypes): string =>\n new Query(\"lessThan\", attribute, value).toString();\n\n static lessThanEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"lessThanEqual\", attribute, value).toString();\n\n static greaterThan = (attribute: string, value: QueryTypes): string =>\n new Query(\"greaterThan\", attribute, value).toString();\n\n static greaterThanEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"greaterThanEqual\", attribute, value).toString();\n\n static isNull = (attribute: string): string =>\n new Query(\"isNull\", attribute).toString();\n\n static isNotNull = (attribute: string): string =>\n new Query(\"isNotNull\", attribute).toString();\n\n static between = (attribute: string, start: string | number, end: string | number) =>\n new Query(\"between\", attribute, [start, end] as QueryTypesList).toString();\n\n static startsWith = (attribute: string, value: string): string =>\n new Query(\"startsWith\", attribute, value).toString();\n\n static endsWith = (attribute: string, value: string): string =>\n new Query(\"endsWith\", attribute, value).toString();\n\n static select = (attributes: string[]): string =>\n new Query(\"select\", undefined, attributes).toString();\n\n static search = (attribute: string, value: string): string =>\n new Query(\"search\", attribute, value).toString();\n\n static orderDesc = (attribute: string): string =>\n new Query(\"orderDesc\", attribute).toString();\n\n static orderAsc = (attribute: string): string =>\n new Query(\"orderAsc\", attribute).toString();\n\n static cursorAfter = (documentId: string): string =>\n new Query(\"cursorAfter\", undefined, documentId).toString();\n\n static cursorBefore = (documentId: string): string =>\n new Query(\"cursorBefore\", undefined, documentId).toString();\n\n static limit = (limit: number): string =>\n new Query(\"limit\", undefined, limit).toString();\n\n static offset = (offset: number): string =>\n new Query(\"offset\", undefined, offset).toString();\n\n static contains = (attribute: string, value: string | string[]): string =>\n new Query(\"contains\", attribute, value).toString();\n\n static or = (queries: string[]) =>\n new Query(\"or\", undefined, queries.map((query) => JSON.parse(query))).toString();\n\n static and = (queries: string[]) =>\n new Query(\"and\", undefined, queries.map((query) => JSON.parse(query))).toString();\n}\n","import 'isomorphic-form-data';\nimport { fetch } from 'cross-fetch';\nimport { Models } from './models';\nimport { Service } from './service';\n\ntype Payload = {\n [key: string]: any;\n}\n\ntype Headers = {\n [key: string]: string;\n}\n\ntype RealtimeResponse = {\n type: 'error' | 'event' | 'connected' | 'response';\n data: RealtimeResponseAuthenticated | RealtimeResponseConnected | RealtimeResponseError | RealtimeResponseEvent;\n}\n\ntype RealtimeRequest = {\n type: 'authentication';\n data: RealtimeRequestAuthenticate;\n}\n\nexport type RealtimeResponseEvent = {\n events: string[];\n channels: string[];\n timestamp: number;\n payload: T;\n}\n\ntype RealtimeResponseError = {\n code: number;\n message: string;\n}\n\ntype RealtimeResponseConnected = {\n channels: string[];\n user?: object;\n}\n\ntype RealtimeResponseAuthenticated = {\n to: string;\n success: boolean;\n user: object;\n}\n\ntype RealtimeRequestAuthenticate = {\n session: string;\n}\n\ntype Realtime = {\n socket?: WebSocket;\n timeout?: number;\n url?: string;\n lastMessage?: RealtimeResponse;\n channels: Set;\n subscriptions: Map) => void\n }>;\n subscriptionsCounter: number;\n reconnect: boolean;\n reconnectAttempts: number;\n getTimeout: () => number;\n connect: () => void;\n createSocket: () => void;\n cleanUp: (channels: string[]) => void;\n onMessage: (event: MessageEvent) => void;\n}\n\nexport type UploadProgress = {\n $id: string;\n progress: number;\n sizeUploaded: number;\n chunksTotal: number;\n chunksUploaded: number;\n}\n\nclass AppwriteException extends Error {\n code: number;\n response: string;\n type: string;\n constructor(message: string, code: number = 0, type: string = '', response: string = '') {\n super(message);\n this.name = 'AppwriteException';\n this.message = message;\n this.code = code;\n this.type = type;\n this.response = response;\n }\n}\n\nclass Client {\n config = {\n endpoint: 'https://cloud.appwrite.io/v1',\n endpointRealtime: '',\n project: '',\n jwt: '',\n locale: '',\n session: '',\n };\n headers: Headers = {\n 'x-sdk-name': 'Web',\n 'x-sdk-platform': 'client',\n 'x-sdk-language': 'web',\n 'x-sdk-version': '14.0.1',\n 'X-Appwrite-Response-Format': '1.5.0',\n };\n\n /**\n * Set Endpoint\n *\n * Your project endpoint\n *\n * @param {string} endpoint\n *\n * @returns {this}\n */\n setEndpoint(endpoint: string): this {\n this.config.endpoint = endpoint;\n this.config.endpointRealtime = this.config.endpointRealtime || this.config.endpoint.replace('https://', 'wss://').replace('http://', 'ws://');\n\n return this;\n }\n\n /**\n * Set Realtime Endpoint\n *\n * @param {string} endpointRealtime\n *\n * @returns {this}\n */\n setEndpointRealtime(endpointRealtime: string): this {\n this.config.endpointRealtime = endpointRealtime;\n\n return this;\n }\n\n /**\n * Set Project\n *\n * Your project ID\n *\n * @param value string\n *\n * @return {this}\n */\n setProject(value: string): this {\n this.headers['X-Appwrite-Project'] = value;\n this.config.project = value;\n return this;\n }\n\n /**\n * Set JWT\n *\n * Your secret JSON Web Token\n *\n * @param value string\n *\n * @return {this}\n */\n setJWT(value: string): this {\n this.headers['X-Appwrite-JWT'] = value;\n this.config.jwt = value;\n return this;\n }\n\n /**\n * Set Locale\n *\n * @param value string\n *\n * @return {this}\n */\n setLocale(value: string): this {\n this.headers['X-Appwrite-Locale'] = value;\n this.config.locale = value;\n return this;\n }\n\n /**\n * Set Session\n *\n * The user session to authenticate with\n *\n * @param value string\n *\n * @return {this}\n */\n setSession(value: string): this {\n this.headers['X-Appwrite-Session'] = value;\n this.config.session = value;\n return this;\n }\n\n\n private realtime: Realtime = {\n socket: undefined,\n timeout: undefined,\n url: '',\n channels: new Set(),\n subscriptions: new Map(),\n subscriptionsCounter: 0,\n reconnect: true,\n reconnectAttempts: 0,\n lastMessage: undefined,\n connect: () => {\n clearTimeout(this.realtime.timeout);\n this.realtime.timeout = window?.setTimeout(() => {\n this.realtime.createSocket();\n }, 50);\n },\n getTimeout: () => {\n switch (true) {\n case this.realtime.reconnectAttempts < 5:\n return 1000;\n case this.realtime.reconnectAttempts < 15:\n return 5000;\n case this.realtime.reconnectAttempts < 100:\n return 10_000;\n default:\n return 60_000;\n }\n },\n createSocket: () => {\n if (this.realtime.channels.size < 1) {\n this.realtime.reconnect = false;\n this.realtime.socket?.close();\n return;\n }\n\n const channels = new URLSearchParams();\n channels.set('project', this.config.project);\n this.realtime.channels.forEach(channel => {\n channels.append('channels[]', channel);\n });\n\n const url = this.config.endpointRealtime + '/realtime?' + channels.toString();\n\n if (\n url !== this.realtime.url || // Check if URL is present\n !this.realtime.socket || // Check if WebSocket has not been created\n this.realtime.socket?.readyState > WebSocket.OPEN // Check if WebSocket is CLOSING (3) or CLOSED (4)\n ) {\n if (\n this.realtime.socket &&\n this.realtime.socket?.readyState < WebSocket.CLOSING // Close WebSocket if it is CONNECTING (0) or OPEN (1)\n ) {\n this.realtime.reconnect = false;\n this.realtime.socket.close();\n }\n\n this.realtime.url = url;\n this.realtime.socket = new WebSocket(url);\n this.realtime.socket.addEventListener('message', this.realtime.onMessage);\n this.realtime.socket.addEventListener('open', _event => {\n this.realtime.reconnectAttempts = 0;\n });\n this.realtime.socket.addEventListener('close', event => {\n if (\n !this.realtime.reconnect ||\n (\n this.realtime?.lastMessage?.type === 'error' && // Check if last message was of type error\n (this.realtime?.lastMessage.data).code === 1008 // Check for policy violation 1008\n )\n ) {\n this.realtime.reconnect = true;\n return;\n }\n\n const timeout = this.realtime.getTimeout();\n console.error(`Realtime got disconnected. Reconnect will be attempted in ${timeout / 1000} seconds.`, event.reason);\n\n setTimeout(() => {\n this.realtime.reconnectAttempts++;\n this.realtime.createSocket();\n }, timeout);\n })\n }\n },\n onMessage: (event) => {\n try {\n const message: RealtimeResponse = JSON.parse(event.data);\n this.realtime.lastMessage = message;\n switch (message.type) {\n case 'connected':\n const cookie = JSON.parse(window.localStorage.getItem('cookieFallback') ?? '{}');\n const session = cookie?.[`a_session_${this.config.project}`];\n const messageData = message.data;\n\n if (session && !messageData.user) {\n this.realtime.socket?.send(JSON.stringify({\n type: 'authentication',\n data: {\n session\n }\n }));\n }\n break;\n case 'event':\n let data = >message.data;\n if (data?.channels) {\n const isSubscribed = data.channels.some(channel => this.realtime.channels.has(channel));\n if (!isSubscribed) return;\n this.realtime.subscriptions.forEach(subscription => {\n if (data.channels.some(channel => subscription.channels.includes(channel))) {\n setTimeout(() => subscription.callback(data));\n }\n })\n }\n break;\n case 'error':\n throw message.data;\n default:\n break;\n }\n } catch (e) {\n console.error(e);\n }\n },\n cleanUp: channels => {\n this.realtime.channels.forEach(channel => {\n if (channels.includes(channel)) {\n let found = Array.from(this.realtime.subscriptions).some(([_key, subscription] )=> {\n return subscription.channels.includes(channel);\n })\n\n if (!found) {\n this.realtime.channels.delete(channel);\n }\n }\n })\n }\n }\n\n /**\n * Subscribes to Appwrite events and passes you the payload in realtime.\n * \n * @param {string|string[]} channels \n * Channel to subscribe - pass a single channel as a string or multiple with an array of strings.\n * \n * Possible channels are:\n * - account\n * - collections\n * - collections.[ID]\n * - collections.[ID].documents\n * - documents\n * - documents.[ID]\n * - files\n * - files.[ID]\n * - executions\n * - executions.[ID]\n * - functions.[ID]\n * - teams\n * - teams.[ID]\n * - memberships\n * - memberships.[ID]\n * @param {(payload: RealtimeMessage) => void} callback Is called on every realtime update.\n * @returns {() => void} Unsubscribes from events.\n */\n subscribe(channels: string | string[], callback: (payload: RealtimeResponseEvent) => void): () => void {\n let channelArray = typeof channels === 'string' ? [channels] : channels;\n channelArray.forEach(channel => this.realtime.channels.add(channel));\n\n const counter = this.realtime.subscriptionsCounter++;\n this.realtime.subscriptions.set(counter, {\n channels: channelArray,\n callback\n });\n\n this.realtime.connect();\n\n return () => {\n this.realtime.subscriptions.delete(counter);\n this.realtime.cleanUp(channelArray);\n this.realtime.connect();\n }\n }\n\n async call(method: string, url: URL, headers: Headers = {}, params: Payload = {}): Promise {\n method = method.toUpperCase();\n\n\n headers = Object.assign({}, this.headers, headers);\n\n let options: RequestInit = {\n method,\n headers,\n credentials: 'include'\n };\n\n if (typeof window !== 'undefined' && window.localStorage) {\n headers['X-Fallback-Cookies'] = window.localStorage.getItem('cookieFallback') ?? '';\n }\n\n if (method === 'GET') {\n for (const [key, value] of Object.entries(Service.flatten(params))) {\n url.searchParams.append(key, value);\n }\n } else {\n switch (headers['content-type']) {\n case 'application/json':\n options.body = JSON.stringify(params);\n break;\n\n case 'multipart/form-data':\n let formData = new FormData();\n\n for (const key in params) {\n if (Array.isArray(params[key])) {\n params[key].forEach((value: any) => {\n formData.append(key + '[]', value);\n })\n } else {\n formData.append(key, params[key]);\n }\n }\n\n options.body = formData;\n delete headers['content-type'];\n break;\n }\n }\n\n try {\n let data = null;\n const response = await fetch(url.toString(), options);\n\n if (response.headers.get('content-type')?.includes('application/json')) {\n data = await response.json();\n } else {\n data = {\n message: await response.text()\n };\n }\n\n if (400 <= response.status) {\n throw new AppwriteException(data?.message, response.status, data?.type, data);\n }\n\n const cookieFallback = response.headers.get('X-Fallback-Cookies');\n\n if (typeof window !== 'undefined' && window.localStorage && cookieFallback) {\n window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.');\n window.localStorage.setItem('cookieFallback', cookieFallback);\n }\n\n return data;\n } catch (e) {\n if (e instanceof AppwriteException) {\n throw e;\n }\n throw new AppwriteException((e).message);\n }\n }\n}\n\nexport { Client, AppwriteException };\nexport { Query } from './query';\nexport type { Models, Payload };\nexport type { QueryTypes, QueryTypesList } from './query';\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\nimport { AuthenticatorType } from '../enums/authenticator-type';\nimport { AuthenticationFactor } from '../enums/authentication-factor';\nimport { OAuthProvider } from '../enums/o-auth-provider';\n\nexport class Account extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * Get account\n *\n * Get the currently logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async get(): Promise> {\n const apiPath = '/account';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create account\n *\n * Use this endpoint to allow a new user to register a new account in your\n * project. After the user registration completes successfully, you can use\n * the\n * [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification)\n * route to start verifying the user email address. To allow the new user to\n * login to their new account, you need to create a new [account\n * session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession).\n *\n * @param {string} userId\n * @param {string} email\n * @param {string} password\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async create(userId: string, email: string, password: string, name?: string): Promise> {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update email\n *\n * Update currently logged in user account email address. After changing user\n * address, the user confirmation status will get reset. A new confirmation\n * email is not sent automatically however you can use the send confirmation\n * email endpoint again to send the confirmation email. For security measures,\n * user password is required to complete this request.\n * This endpoint can also be used to convert an anonymous account to a normal\n * one, by passing an email address and a new password.\n * \n *\n * @param {string} email\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateEmail(email: string, password: string): Promise> {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account/email';\n const payload: Payload = {};\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List Identities\n *\n * Get the list of identities for the currently logged in user.\n *\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listIdentities(queries?: string[]): Promise {\n const apiPath = '/account/identities';\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete identity\n *\n * Delete an identity by its unique ID.\n *\n * @param {string} identityId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteIdentity(identityId: string): Promise<{}> {\n if (typeof identityId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identityId\"');\n }\n\n const apiPath = '/account/identities/{identityId}'.replace('{identityId}', identityId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create JWT\n *\n * Use this endpoint to create a JSON Web Token. You can use the resulting JWT\n * to authenticate on behalf of the current user when working with the\n * Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes\n * from its creation and will be invalid if the user will logout in that time\n * frame.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createJWT(): Promise {\n const apiPath = '/account/jwt';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List logs\n *\n * Get the list of latest security activity logs for the currently logged in\n * user. Each log returns user IP address, location and date and time of log.\n *\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listLogs(queries?: string[]): Promise {\n const apiPath = '/account/logs';\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update MFA\n *\n * Enable or disable MFA on an account.\n *\n * @param {boolean} mfa\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMFA(mfa: boolean): Promise> {\n if (typeof mfa === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"mfa\"');\n }\n\n const apiPath = '/account/mfa';\n const payload: Payload = {};\n\n if (typeof mfa !== 'undefined') {\n payload['mfa'] = mfa;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Add Authenticator\n *\n * Add an authenticator app to be used as an MFA factor. Verify the\n * authenticator using the [verify\n * authenticator](/docs/references/cloud/client-web/account#verifyAuthenticator)\n * method.\n *\n * @param {AuthenticatorType} type\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaAuthenticator(type: AuthenticatorType): Promise {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Verify Authenticator\n *\n * Verify an authenticator app after adding it using the [add\n * authenticator](/docs/references/cloud/client-web/account#addAuthenticator)\n * method.\n *\n * @param {AuthenticatorType} type\n * @param {string} otp\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMfaAuthenticator(type: AuthenticatorType, otp: string): Promise> {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n\n if (typeof otp === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"otp\"');\n }\n\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n\n if (typeof otp !== 'undefined') {\n payload['otp'] = otp;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete Authenticator\n *\n * Delete an authenticator for a user by ID.\n *\n * @param {AuthenticatorType} type\n * @param {string} otp\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteMfaAuthenticator(type: AuthenticatorType, otp: string): Promise> {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n\n if (typeof otp === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"otp\"');\n }\n\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n\n if (typeof otp !== 'undefined') {\n payload['otp'] = otp;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create 2FA Challenge\n *\n * Begin the process of MFA verification after sign-in. Finish the flow with\n * [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge)\n * method.\n *\n * @param {AuthenticationFactor} factor\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaChallenge(factor: AuthenticationFactor): Promise {\n if (typeof factor === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"factor\"');\n }\n\n const apiPath = '/account/mfa/challenge';\n const payload: Payload = {};\n\n if (typeof factor !== 'undefined') {\n payload['factor'] = factor;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create MFA Challenge (confirmation)\n *\n * Complete the MFA challenge by providing the one-time password. Finish the\n * process of MFA verification by providing the one-time password. To begin\n * the flow, use\n * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge)\n * method.\n *\n * @param {string} challengeId\n * @param {string} otp\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMfaChallenge(challengeId: string, otp: string): Promise<{}> {\n if (typeof challengeId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"challengeId\"');\n }\n\n if (typeof otp === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"otp\"');\n }\n\n const apiPath = '/account/mfa/challenge';\n const payload: Payload = {};\n\n if (typeof challengeId !== 'undefined') {\n payload['challengeId'] = challengeId;\n }\n\n if (typeof otp !== 'undefined') {\n payload['otp'] = otp;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List Factors\n *\n * List the factors available on the account to be used as a MFA challange.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listMfaFactors(): Promise {\n const apiPath = '/account/mfa/factors';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get MFA Recovery Codes\n *\n * Get recovery codes that can be used as backup for MFA flow. Before getting\n * codes, they must be generated using\n * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes)\n * method. An OTP challenge is required to read recovery codes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create MFA Recovery Codes\n *\n * Generate recovery codes as backup for MFA flow. It's recommended to\n * generate and show then immediately after user successfully adds their\n * authehticator. Recovery codes can be used as a MFA verification type in\n * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge)\n * method.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Regenerate MFA Recovery Codes\n *\n * Regenerate recovery codes that can be used as backup for MFA flow. Before\n * regenerating codes, they must be first generated using\n * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes)\n * method. An OTP challenge is required to regenreate recovery codes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update name\n *\n * Update currently logged in user account name.\n *\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateName(name: string): Promise> {\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n\n const apiPath = '/account/name';\n const payload: Payload = {};\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update password\n *\n * Update currently logged in user password. For validation, user is required\n * to pass in the new password, and the old password. For users created with\n * OAuth, Team Invites and Magic URL, oldPassword is optional.\n *\n * @param {string} password\n * @param {string} oldPassword\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePassword(password: string, oldPassword?: string): Promise> {\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account/password';\n const payload: Payload = {};\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n if (typeof oldPassword !== 'undefined') {\n payload['oldPassword'] = oldPassword;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update phone\n *\n * Update the currently logged in user's phone number. After updating the\n * phone number, the phone verification status will be reset. A confirmation\n * SMS is not sent automatically, however you can use the [POST\n * /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification)\n * endpoint to send a confirmation SMS.\n *\n * @param {string} phone\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePhone(phone: string, password: string): Promise> {\n if (typeof phone === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"phone\"');\n }\n\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account/phone';\n const payload: Payload = {};\n\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get account preferences\n *\n * Get the preferences as a key-value object for the currently logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getPrefs(): Promise {\n const apiPath = '/account/prefs';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update preferences\n *\n * Update currently logged in user account preferences. The object you pass is\n * stored as is, and replaces any previous value. The maximum allowed prefs\n * size is 64kB and throws error if exceeded.\n *\n * @param {Partial} prefs\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePrefs(prefs: Partial): Promise> {\n if (typeof prefs === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"prefs\"');\n }\n\n const apiPath = '/account/prefs';\n const payload: Payload = {};\n\n if (typeof prefs !== 'undefined') {\n payload['prefs'] = prefs;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create password recovery\n *\n * Sends the user an email with a temporary secret key for password reset.\n * When the user clicks the confirmation link he is redirected back to your\n * app password reset URL with the secret key and email address values\n * attached to the URL query string. Use the query string params to submit a\n * request to the [PUT\n * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery)\n * endpoint to complete the process. The verification link sent to the user's\n * email address is valid for 1 hour.\n *\n * @param {string} email\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createRecovery(email: string, url: string): Promise {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n\n const apiPath = '/account/recovery';\n const payload: Payload = {};\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create password recovery (confirmation)\n *\n * Use this endpoint to complete the user account password reset. Both the\n * **userId** and **secret** arguments will be passed as query parameters to\n * the redirect URL you have provided when sending your request to the [POST\n * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery)\n * endpoint.\n * \n * Please note that in order to avoid a [Redirect\n * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md)\n * the only valid redirect URLs are the ones from domains you have set when\n * adding your platforms in the console interface.\n *\n * @param {string} userId\n * @param {string} secret\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateRecovery(userId: string, secret: string, password: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account/recovery';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List sessions\n *\n * Get the list of active sessions across different devices for the currently\n * logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listSessions(): Promise {\n const apiPath = '/account/sessions';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete sessions\n *\n * Delete all sessions from the user account and remove any sessions cookies\n * from the end client.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteSessions(): Promise<{}> {\n const apiPath = '/account/sessions';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create anonymous session\n *\n * Use this endpoint to allow a new user to register an anonymous account in\n * your project. This route will also create a new session for the user. To\n * allow the new user to convert an anonymous account to a normal account, you\n * need to update its [email and\n * password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail)\n * or create an [OAuth2\n * session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session).\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createAnonymousSession(): Promise {\n const apiPath = '/account/sessions/anonymous';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create email password session\n *\n * Allow the user to login into their account by providing a valid email and\n * password combination. This route will create a new session for the user.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} email\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createEmailPasswordSession(email: string, password: string): Promise {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account/sessions/email';\n const payload: Payload = {};\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update magic URL session\n *\n * Use this endpoint to create a session from token. Provide the **userId**\n * and **secret** parameters from the successful response of authentication\n * flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMagicURLSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/account/sessions/magic-url';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create OAuth2 session\n *\n * Allow the user to login to their account using the OAuth2 provider of their\n * choice. Each OAuth2 provider should be enabled from the Appwrite console\n * first. Use the success and failure arguments to provide a redirect URL's\n * back to your app when login is completed.\n * \n * If there is already an active session, the new session will be attached to\n * the logged-in account. If there are no active sessions, the server will\n * attempt to look for a user with the same email address as the email\n * received from the OAuth2 provider and attach the new session to the\n * existing user. If no matching user is found - the server will create a new\n * user.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n * \n *\n * @param {OAuthProvider} provider\n * @param {string} success\n * @param {string} failure\n * @param {string[]} scopes\n * @throws {AppwriteException}\n * @returns {void|string}\n */\n createOAuth2Session(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): void | URL {\n if (typeof provider === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"provider\"');\n }\n\n const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider);\n const payload: Payload = {};\n\n if (typeof success !== 'undefined') {\n payload['success'] = success;\n }\n\n if (typeof failure !== 'undefined') {\n payload['failure'] = failure;\n }\n\n if (typeof scopes !== 'undefined') {\n payload['scopes'] = scopes;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n if (typeof window !== 'undefined' && window?.location) {\n window.location.href = uri.toString();\n } else {\n return uri;\n }\n }\n\n /**\n * Update phone session\n *\n * Use this endpoint to create a session from token. Provide the **userId**\n * and **secret** parameters from the successful response of authentication\n * flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePhoneSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/account/sessions/phone';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create session\n *\n * Use this endpoint to create a session from token. Provide the **userId**\n * and **secret** parameters from the successful response of authentication\n * flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/account/sessions/token';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get session\n *\n * Use this endpoint to get a logged in user's session using a Session ID.\n * Inputting 'current' will return the current session being used.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getSession(sessionId: string): Promise {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update session\n *\n * Use this endpoint to extend a session's length. Extending a session is\n * useful when session expiry is short. If the session was created using an\n * OAuth provider, this endpoint refreshes the access token from the provider.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateSession(sessionId: string): Promise {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete session\n *\n * Logout the user. Use 'current' as the session ID to logout on this device,\n * use a session ID to logout on another device. If you're looking to logout\n * the user on all devices, use [Delete\n * Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions)\n * instead.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteSession(sessionId: string): Promise<{}> {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update status\n *\n * Block the currently logged in user account. Behind the scene, the user\n * record is not deleted but permanently blocked from any access. To\n * completely delete a user, use the Users API instead.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateStatus(): Promise> {\n const apiPath = '/account/status';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create push target\n *\n *\n * @param {string} targetId\n * @param {string} identifier\n * @param {string} providerId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPushTarget(targetId: string, identifier: string, providerId?: string): Promise {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n\n if (typeof identifier === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identifier\"');\n }\n\n const apiPath = '/account/targets/push';\n const payload: Payload = {};\n\n if (typeof targetId !== 'undefined') {\n payload['targetId'] = targetId;\n }\n\n if (typeof identifier !== 'undefined') {\n payload['identifier'] = identifier;\n }\n\n if (typeof providerId !== 'undefined') {\n payload['providerId'] = providerId;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update push target\n *\n *\n * @param {string} targetId\n * @param {string} identifier\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePushTarget(targetId: string, identifier: string): Promise {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n\n if (typeof identifier === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identifier\"');\n }\n\n const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId);\n const payload: Payload = {};\n\n if (typeof identifier !== 'undefined') {\n payload['identifier'] = identifier;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete push target\n *\n *\n * @param {string} targetId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deletePushTarget(targetId: string): Promise<{}> {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n\n const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create email token (OTP)\n *\n * Sends the user an email with a secret key for creating a session. If the\n * provided user ID has not be registered, a new user will be created. Use the\n * returned user ID and secret and submit a request to the [POST\n * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession)\n * endpoint to complete the login process. The secret sent to the user's email\n * is valid for 15 minutes.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} userId\n * @param {string} email\n * @param {boolean} phrase\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createEmailToken(userId: string, email: string, phrase?: boolean): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n const apiPath = '/account/tokens/email';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof phrase !== 'undefined') {\n payload['phrase'] = phrase;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create magic URL token\n *\n * Sends the user an email with a secret key for creating a session. If the\n * provided user ID has not been registered, a new user will be created. When\n * the user clicks the link in the email, the user is redirected back to the\n * URL you provided with the secret key and userId values attached to the URL\n * query string. Use the query string parameters to submit a request to the\n * [POST\n * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession)\n * endpoint to complete the login process. The link sent to the user's email\n * address is valid for 1 hour. If you are on a mobile device you can leave\n * the URL parameter empty, so that the login completion will be handled by\n * your Appwrite instance by default.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n * \n *\n * @param {string} userId\n * @param {string} email\n * @param {string} url\n * @param {boolean} phrase\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMagicURLToken(userId: string, email: string, url?: string, phrase?: boolean): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n const apiPath = '/account/tokens/magic-url';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n if (typeof phrase !== 'undefined') {\n payload['phrase'] = phrase;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create OAuth2 token\n *\n * Allow the user to login to their account using the OAuth2 provider of their\n * choice. Each OAuth2 provider should be enabled from the Appwrite console\n * first. Use the success and failure arguments to provide a redirect URL's\n * back to your app when login is completed. \n * \n * If authentication succeeds, `userId` and `secret` of a token will be\n * appended to the success URL as query parameters. These can be used to\n * create a new session using the [Create\n * session](https://appwrite.io/docs/references/cloud/client-web/account#createSession)\n * endpoint.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {OAuthProvider} provider\n * @param {string} success\n * @param {string} failure\n * @param {string[]} scopes\n * @throws {AppwriteException}\n * @returns {void|string}\n */\n createOAuth2Token(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): void | URL {\n if (typeof provider === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"provider\"');\n }\n\n const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider);\n const payload: Payload = {};\n\n if (typeof success !== 'undefined') {\n payload['success'] = success;\n }\n\n if (typeof failure !== 'undefined') {\n payload['failure'] = failure;\n }\n\n if (typeof scopes !== 'undefined') {\n payload['scopes'] = scopes;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n if (typeof window !== 'undefined' && window?.location) {\n window.location.href = uri.toString();\n } else {\n return uri;\n }\n }\n\n /**\n * Create phone token\n *\n * Sends the user an SMS with a secret key for creating a session. If the\n * provided user ID has not be registered, a new user will be created. Use the\n * returned user ID and secret and submit a request to the [POST\n * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession)\n * endpoint to complete the login process. The secret sent to the user's phone\n * is valid for 15 minutes.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} userId\n * @param {string} phone\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPhoneToken(userId: string, phone: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof phone === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"phone\"');\n }\n\n const apiPath = '/account/tokens/phone';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create email verification\n *\n * Use this endpoint to send a verification message to your user email address\n * to confirm they are the valid owners of that address. Both the **userId**\n * and **secret** arguments will be passed as query parameters to the URL you\n * have provided to be attached to the verification email. The provided URL\n * should redirect the user back to your app and allow you to complete the\n * verification process by verifying both the **userId** and **secret**\n * parameters. Learn more about how to [complete the verification\n * process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification).\n * The verification link sent to the user's email address is valid for 7 days.\n * \n * Please note that in order to avoid a [Redirect\n * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md),\n * the only valid redirect URLs are the ones from domains you have set when\n * adding your platforms in the console interface.\n * \n *\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createVerification(url: string): Promise {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n\n const apiPath = '/account/verification';\n const payload: Payload = {};\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create email verification (confirmation)\n *\n * Use this endpoint to complete the user email verification process. Use both\n * the **userId** and **secret** parameters that were attached to your app URL\n * to verify the user email ownership. If confirmed this route will return a\n * 200 status code.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateVerification(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/account/verification';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create phone verification\n *\n * Use this endpoint to send a verification SMS to the currently logged in\n * user. This endpoint is meant for use after updating a user's phone number\n * using the\n * [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone)\n * endpoint. Learn more about how to [complete the verification\n * process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification).\n * The verification code sent to the user's phone number is valid for 15\n * minutes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPhoneVerification(): Promise {\n const apiPath = '/account/verification/phone';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create phone verification (confirmation)\n *\n * Use this endpoint to complete the user phone verification process. Use the\n * **userId** and **secret** that were sent to your user's phone number to\n * verify the user email ownership. If confirmed this route will return a 200\n * status code.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePhoneVerification(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/account/verification/phone';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\nimport { Browser } from '../enums/browser';\nimport { CreditCard } from '../enums/credit-card';\nimport { Flag } from '../enums/flag';\n\nexport class Avatars extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * Get browser icon\n *\n * You can use this endpoint to show different browser icons to your users.\n * The code argument receives the browser code as it appears in your user [GET\n * /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions)\n * endpoint. Use width, height and quality arguments to change the output\n * settings.\n * \n * When one dimension is specified and the other is 0, the image is scaled\n * with preserved aspect ratio. If both dimensions are 0, the API provides an\n * image at source quality. If dimensions are not specified, the default size\n * of image returned is 100x100px.\n *\n * @param {Browser} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getBrowser(code: Browser, width?: number, height?: number, quality?: number): URL {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n\n const apiPath = '/avatars/browsers/{code}'.replace('{code}', code);\n const payload: Payload = {};\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get credit card icon\n *\n * The credit card endpoint will return you the icon of the credit card\n * provider you need. Use width, height and quality arguments to change the\n * output settings.\n * \n * When one dimension is specified and the other is 0, the image is scaled\n * with preserved aspect ratio. If both dimensions are 0, the API provides an\n * image at source quality. If dimensions are not specified, the default size\n * of image returned is 100x100px.\n * \n *\n * @param {CreditCard} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getCreditCard(code: CreditCard, width?: number, height?: number, quality?: number): URL {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n\n const apiPath = '/avatars/credit-cards/{code}'.replace('{code}', code);\n const payload: Payload = {};\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get favicon\n *\n * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote\n * website URL.\n * \n *\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getFavicon(url: string): URL {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n\n const apiPath = '/avatars/favicon';\n const payload: Payload = {};\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get country flag\n *\n * You can use this endpoint to show different country flags icons to your\n * users. The code argument receives the 2 letter country code. Use width,\n * height and quality arguments to change the output settings. Country codes\n * follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard.\n * \n * When one dimension is specified and the other is 0, the image is scaled\n * with preserved aspect ratio. If both dimensions are 0, the API provides an\n * image at source quality. If dimensions are not specified, the default size\n * of image returned is 100x100px.\n * \n *\n * @param {Flag} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getFlag(code: Flag, width?: number, height?: number, quality?: number): URL {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n\n const apiPath = '/avatars/flags/{code}'.replace('{code}', code);\n const payload: Payload = {};\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get image from URL\n *\n * Use this endpoint to fetch a remote image URL and crop it to any image size\n * you want. This endpoint is very useful if you need to crop and display\n * remote images in your app or in case you want to make sure a 3rd party\n * image is properly served using a TLS protocol.\n * \n * When one dimension is specified and the other is 0, the image is scaled\n * with preserved aspect ratio. If both dimensions are 0, the API provides an\n * image at source quality. If dimensions are not specified, the default size\n * of image returned is 400x400px.\n * \n *\n * @param {string} url\n * @param {number} width\n * @param {number} height\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getImage(url: string, width?: number, height?: number): URL {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n\n const apiPath = '/avatars/image';\n const payload: Payload = {};\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get user initials\n *\n * Use this endpoint to show your user initials avatar icon on your website or\n * app. By default, this route will try to print your logged-in user name or\n * email initials. You can also overwrite the user name if you pass the 'name'\n * parameter. If no name is given and no user is logged, an empty avatar will\n * be returned.\n * \n * You can use the color and background params to change the avatar colors. By\n * default, a random theme will be selected. The random theme will persist for\n * the user's initials when reloading the same theme will always return for\n * the same initials.\n * \n * When one dimension is specified and the other is 0, the image is scaled\n * with preserved aspect ratio. If both dimensions are 0, the API provides an\n * image at source quality. If dimensions are not specified, the default size\n * of image returned is 100x100px.\n * \n *\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @param {string} background\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getInitials(name?: string, width?: number, height?: number, background?: string): URL {\n const apiPath = '/avatars/initials';\n const payload: Payload = {};\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n if (typeof background !== 'undefined') {\n payload['background'] = background;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get QR code\n *\n * Converts a given plain text to a QR code image. You can use the query\n * parameters to change the size and style of the resulting image.\n * \n *\n * @param {string} text\n * @param {number} size\n * @param {number} margin\n * @param {boolean} download\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getQR(text: string, size?: number, margin?: number, download?: boolean): URL {\n if (typeof text === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"text\"');\n }\n\n const apiPath = '/avatars/qr';\n const payload: Payload = {};\n\n if (typeof text !== 'undefined') {\n payload['text'] = text;\n }\n\n if (typeof size !== 'undefined') {\n payload['size'] = size;\n }\n\n if (typeof margin !== 'undefined') {\n payload['margin'] = margin;\n }\n\n if (typeof download !== 'undefined') {\n payload['download'] = download;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\n\nexport class Databases extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * List documents\n *\n * Get a list of all the user's documents in a given collection. You can use\n * the query params to filter your results.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listDocuments(databaseId: string, collectionId: string, queries?: string[]): Promise> {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId);\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create document\n *\n * Create a new Document. Before using this route, you should create a new\n * collection resource using either a [server\n * integration](https://appwrite.io/docs/server/databases#databasesCreateCollection)\n * API or directly from your database console.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {Omit} data\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createDocument(databaseId: string, collectionId: string, documentId: string, data: Omit, permissions?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n\n if (typeof data === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"data\"');\n }\n\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId);\n const payload: Payload = {};\n\n if (typeof documentId !== 'undefined') {\n payload['documentId'] = documentId;\n }\n\n if (typeof data !== 'undefined') {\n payload['data'] = data;\n }\n\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get document\n *\n * Get a document by its unique ID. This endpoint response returns a JSON\n * object with the document data.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getDocument(databaseId: string, collectionId: string, documentId: string, queries?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update document\n *\n * Update a document by its unique ID. Using the patch method you can pass\n * only specific fields that will get updated.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {Partial>} data\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateDocument(databaseId: string, collectionId: string, documentId: string, data?: Partial>, permissions?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n\n if (typeof data !== 'undefined') {\n payload['data'] = data;\n }\n\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete document\n *\n * Delete a document by its unique ID.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteDocument(databaseId: string, collectionId: string, documentId: string): Promise<{}> {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\nimport { ExecutionMethod } from '../enums/execution-method';\n\nexport class Functions extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * List executions\n *\n * Get a list of all the current user function execution logs. You can use the\n * query params to filter your results.\n *\n * @param {string} functionId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listExecutions(functionId: string, queries?: string[], search?: string): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n\n const apiPath = '/functions/{functionId}/executions'.replace('{functionId}', functionId);\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create execution\n *\n * Trigger a function execution. The returned object will return you the\n * current execution status. You can ping the `Get Execution` endpoint to get\n * updates on the current execution status. Once this endpoint is called, your\n * function execution process will start asynchronously.\n *\n * @param {string} functionId\n * @param {string} body\n * @param {boolean} async\n * @param {string} xpath\n * @param {ExecutionMethod} method\n * @param {object} headers\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createExecution(functionId: string, body?: string, async?: boolean, xpath?: string, method?: ExecutionMethod, headers?: object): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n\n const apiPath = '/functions/{functionId}/executions'.replace('{functionId}', functionId);\n const payload: Payload = {};\n\n if (typeof body !== 'undefined') {\n payload['body'] = body;\n }\n\n if (typeof async !== 'undefined') {\n payload['async'] = async;\n }\n\n if (typeof xpath !== 'undefined') {\n payload['path'] = xpath;\n }\n\n if (typeof method !== 'undefined') {\n payload['method'] = method;\n }\n\n if (typeof headers !== 'undefined') {\n payload['headers'] = headers;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get execution\n *\n * Get a function execution log by its unique ID.\n *\n * @param {string} functionId\n * @param {string} executionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getExecution(functionId: string, executionId: string): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n\n if (typeof executionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"executionId\"');\n }\n\n const apiPath = '/functions/{functionId}/executions/{executionId}'.replace('{functionId}', functionId).replace('{executionId}', executionId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\n\nexport class Graphql extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * GraphQL endpoint\n *\n * Execute a GraphQL mutation.\n *\n * @param {object} query\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async query(query: object): Promise<{}> {\n if (typeof query === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"query\"');\n }\n\n const apiPath = '/graphql';\n const payload: Payload = {};\n\n if (typeof query !== 'undefined') {\n payload['query'] = query;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'x-sdk-graphql': 'true',\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * GraphQL endpoint\n *\n * Execute a GraphQL mutation.\n *\n * @param {object} query\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async mutation(query: object): Promise<{}> {\n if (typeof query === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"query\"');\n }\n\n const apiPath = '/graphql/mutation';\n const payload: Payload = {};\n\n if (typeof query !== 'undefined') {\n payload['query'] = query;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'x-sdk-graphql': 'true',\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\n\nexport class Locale extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * Get user locale\n *\n * Get the current user location based on IP. Returns an object with user\n * country code, country name, continent name, continent code, ip address and\n * suggested currency. You can use the locale header to get the data in a\n * supported language.\n * \n * ([IP Geolocation by DB-IP](https://db-ip.com))\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async get(): Promise {\n const apiPath = '/locale';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List Locale Codes\n *\n * List of all locale codes in [ISO\n * 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes).\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCodes(): Promise {\n const apiPath = '/locale/codes';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List continents\n *\n * List of all continents. You can use the locale header to get the data in a\n * supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listContinents(): Promise {\n const apiPath = '/locale/continents';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List countries\n *\n * List of all countries. You can use the locale header to get the data in a\n * supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountries(): Promise {\n const apiPath = '/locale/countries';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List EU countries\n *\n * List of all countries that are currently members of the EU. You can use the\n * locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountriesEU(): Promise {\n const apiPath = '/locale/countries/eu';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List countries phone codes\n *\n * List of all countries phone codes. You can use the locale header to get the\n * data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountriesPhones(): Promise {\n const apiPath = '/locale/countries/phones';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List currencies\n *\n * List of all currencies, including currency symbol, name, plural, and\n * decimal digits for all major and minor currencies. You can use the locale\n * header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCurrencies(): Promise {\n const apiPath = '/locale/currencies';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List languages\n *\n * List of all languages classified by ISO 639-1 including 2-letter code, name\n * in English, and name in the respective language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listLanguages(): Promise {\n const apiPath = '/locale/languages';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\n\nexport class Messaging extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * Create subscriber\n *\n * Create a new subscriber.\n *\n * @param {string} topicId\n * @param {string} subscriberId\n * @param {string} targetId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createSubscriber(topicId: string, subscriberId: string, targetId: string): Promise {\n if (typeof topicId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"topicId\"');\n }\n\n if (typeof subscriberId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"subscriberId\"');\n }\n\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n\n const apiPath = '/messaging/topics/{topicId}/subscribers'.replace('{topicId}', topicId);\n const payload: Payload = {};\n\n if (typeof subscriberId !== 'undefined') {\n payload['subscriberId'] = subscriberId;\n }\n\n if (typeof targetId !== 'undefined') {\n payload['targetId'] = targetId;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete subscriber\n *\n * Delete a subscriber by its unique ID.\n *\n * @param {string} topicId\n * @param {string} subscriberId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteSubscriber(topicId: string, subscriberId: string): Promise<{}> {\n if (typeof topicId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"topicId\"');\n }\n\n if (typeof subscriberId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"subscriberId\"');\n }\n\n const apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}'.replace('{topicId}', topicId).replace('{subscriberId}', subscriberId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\nimport { ImageGravity } from '../enums/image-gravity';\nimport { ImageFormat } from '../enums/image-format';\n\nexport class Storage extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * List files\n *\n * Get a list of all the user files. You can use the query params to filter\n * your results.\n *\n * @param {string} bucketId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listFiles(bucketId: string, queries?: string[], search?: string): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files'.replace('{bucketId}', bucketId);\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create file\n *\n * Create a new file. Before using this route, you should create a new bucket\n * resource using either a [server\n * integration](https://appwrite.io/docs/server/storage#storageCreateBucket)\n * API or directly from your Appwrite console.\n * \n * Larger files should be uploaded using multiple requests with the\n * [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range)\n * header to send a partial request with a maximum supported chunk of `5MB`.\n * The `content-range` header values should always be in bytes.\n * \n * When the first request is sent, the server will return the **File** object,\n * and the subsequent part request must include the file's **id** in\n * `x-appwrite-id` header to allow the server to know that the partial upload\n * is for the existing file and not for a new one.\n * \n * If you're creating a new file using one of the Appwrite SDKs, all the\n * chunking logic will be managed by the SDK internally.\n * \n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {File} file\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createFile(bucketId: string, fileId: string, file: File, permissions?: string[], onProgress = (progress: UploadProgress) => {}): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n if (typeof file === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"file\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files'.replace('{bucketId}', bucketId);\n const payload: Payload = {};\n\n if (typeof fileId !== 'undefined') {\n payload['fileId'] = fileId;\n }\n\n if (typeof file !== 'undefined') {\n payload['file'] = file;\n }\n\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n if(!(file instanceof File)) {\n throw new AppwriteException('Parameter \"file\" has to be a File.');\n }\n\n const size = file.size;\n\n if (size <= Service.CHUNK_SIZE) {\n return await this.client.call('post', uri, {\n 'content-type': 'multipart/form-data',\n }, payload);\n }\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'multipart/form-data',\n }\n\n let offset = 0;\n let response = undefined;\n if(fileId != 'unique()') {\n try {\n response = await this.client.call('GET', new URL(this.client.config.endpoint + apiPath + '/' + fileId), apiHeaders);\n offset = response.chunksUploaded * Service.CHUNK_SIZE;\n } catch(e) {\n }\n }\n\n while (offset < size) {\n let end = Math.min(offset + Service.CHUNK_SIZE - 1, size - 1);\n\n apiHeaders['content-range'] = 'bytes ' + offset + '-' + end + '/' + size;\n if (response && response.$id) {\n apiHeaders['x-appwrite-id'] = response.$id;\n }\n\n const chunk = file.slice(offset, end + 1);\n payload['file'] = new File([chunk], file.name);\n response = await this.client.call('post', uri, apiHeaders, payload);\n\n if (onProgress) {\n onProgress({\n $id: response.$id,\n progress: (offset / size) * 100,\n sizeUploaded: offset,\n chunksTotal: response.chunksTotal,\n chunksUploaded: response.chunksUploaded\n });\n }\n offset += Service.CHUNK_SIZE;\n }\n return response;\n }\n\n /**\n * Get file\n *\n * Get a file by its unique ID. This endpoint response returns a JSON object\n * with the file metadata.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getFile(bucketId: string, fileId: string): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update file\n *\n * Update a file by its unique ID. Only users with write permissions have\n * access to update this resource.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {string} name\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateFile(bucketId: string, fileId: string, name?: string, permissions?: string[]): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete File\n *\n * Delete a file by its unique ID. Only users with write permissions have\n * access to delete this resource.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteFile(bucketId: string, fileId: string): Promise<{}> {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get file for download\n *\n * Get a file content by its unique ID. The endpoint response return with a\n * 'Content-Disposition: attachment' header that tells the browser to start\n * downloading the file to user downloads directory.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getFileDownload(bucketId: string, fileId: string): URL {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get file preview\n *\n * Get a file preview image. Currently, this method supports preview for image\n * files (jpg, png, and gif), other supported formats, like pdf, docs, slides,\n * and spreadsheets, will return the file icon image. You can also pass query\n * string arguments for cutting and resizing your preview image. Preview is\n * supported only for image files smaller than 10MB.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {number} width\n * @param {number} height\n * @param {ImageGravity} gravity\n * @param {number} quality\n * @param {number} borderWidth\n * @param {string} borderColor\n * @param {number} borderRadius\n * @param {number} opacity\n * @param {number} rotation\n * @param {string} background\n * @param {ImageFormat} output\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getFilePreview(bucketId: string, fileId: string, width?: number, height?: number, gravity?: ImageGravity, quality?: number, borderWidth?: number, borderColor?: string, borderRadius?: number, opacity?: number, rotation?: number, background?: string, output?: ImageFormat): URL {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n if (typeof gravity !== 'undefined') {\n payload['gravity'] = gravity;\n }\n\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n\n if (typeof borderWidth !== 'undefined') {\n payload['borderWidth'] = borderWidth;\n }\n\n if (typeof borderColor !== 'undefined') {\n payload['borderColor'] = borderColor;\n }\n\n if (typeof borderRadius !== 'undefined') {\n payload['borderRadius'] = borderRadius;\n }\n\n if (typeof opacity !== 'undefined') {\n payload['opacity'] = opacity;\n }\n\n if (typeof rotation !== 'undefined') {\n payload['rotation'] = rotation;\n }\n\n if (typeof background !== 'undefined') {\n payload['background'] = background;\n }\n\n if (typeof output !== 'undefined') {\n payload['output'] = output;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get file for view\n *\n * Get a file content by its unique ID. This endpoint is similar to the\n * download method but returns with no 'Content-Disposition: attachment'\n * header.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getFileView(bucketId: string, fileId: string): URL {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\n\nexport class Teams extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * List teams\n *\n * Get a list of all the teams in which the current user is a member. You can\n * use the parameters to filter your results.\n *\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async list(queries?: string[], search?: string): Promise> {\n const apiPath = '/teams';\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create team\n *\n * Create a new team. The user who creates the team will automatically be\n * assigned as the owner of the team. Only the users with the owner role can\n * invite new members, add new owners and delete or update the team.\n *\n * @param {string} teamId\n * @param {string} name\n * @param {string[]} roles\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async create(teamId: string, name: string, roles?: string[]): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n\n const apiPath = '/teams';\n const payload: Payload = {};\n\n if (typeof teamId !== 'undefined') {\n payload['teamId'] = teamId;\n }\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get team\n *\n * Get a team by its ID. All team members have read access for this resource.\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async get(teamId: string): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update name\n *\n * Update the team's name by its unique ID.\n *\n * @param {string} teamId\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateName(teamId: string, name: string): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete team\n *\n * Delete a team using its ID. Only team members with the owner role can\n * delete the team.\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async delete(teamId: string): Promise<{}> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List team memberships\n *\n * Use this endpoint to list a team's members using the team's ID. All team\n * members have read access to this endpoint.\n *\n * @param {string} teamId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listMemberships(teamId: string, queries?: string[], search?: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create team membership\n *\n * Invite a new member to join your team. Provide an ID for existing users, or\n * invite unregistered users using an email or phone number. If initiated from\n * a Client SDK, Appwrite will send an email or sms with a link to join the\n * team to the invited user, and an account will be created for them if one\n * doesn't exist. If initiated from a Server SDK, the new member will be added\n * automatically to the team.\n * \n * You only need to provide one of a user ID, email, or phone number. Appwrite\n * will prioritize accepting the user ID > email > phone number if you provide\n * more than one of these parameters.\n * \n * Use the `url` parameter to redirect the user from the invitation email to\n * your app. After the user is redirected, use the [Update Team Membership\n * Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus)\n * endpoint to allow the user to accept the invitation to the team. \n * \n * Please note that to avoid a [Redirect\n * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md)\n * Appwrite will accept the only redirect URLs under the domains you have\n * added as a platform on the Appwrite Console.\n * \n *\n * @param {string} teamId\n * @param {string[]} roles\n * @param {string} email\n * @param {string} userId\n * @param {string} phone\n * @param {string} url\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMembership(teamId: string, roles: string[], email?: string, userId?: string, phone?: string, url?: string, name?: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof roles === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"roles\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get team membership\n *\n * Get a team member by the membership unique id. All team members have read\n * access for this resource.\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getMembership(teamId: string, membershipId: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update membership\n *\n * Modify the roles of a team member. Only team members with the owner role\n * have access to this endpoint. Learn more about [roles and\n * permissions](https://appwrite.io/docs/permissions).\n * \n *\n * @param {string} teamId\n * @param {string} membershipId\n * @param {string[]} roles\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMembership(teamId: string, membershipId: string, roles: string[]): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n\n if (typeof roles === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"roles\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete team membership\n *\n * This endpoint allows a user to leave a team or for a team owner to delete\n * the membership of any other team member. You can also use this endpoint to\n * delete a user membership even if it is not accepted.\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteMembership(teamId: string, membershipId: string): Promise<{}> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update team membership status\n *\n * Use this endpoint to allow a user to accept an invitation to join a team\n * after being redirected back to your app from the invitation email received\n * by the user.\n * \n * If the request is successful, a session for the user is automatically\n * created.\n * \n *\n * @param {string} teamId\n * @param {string} membershipId\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMembershipStatus(teamId: string, membershipId: string, userId: string, secret: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships/{membershipId}/status'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get team preferences\n *\n * Get the team's shared preferences by its unique ID. If a preference doesn't\n * need to be shared by all team members, prefer storing them in [user\n * preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs).\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getPrefs(teamId: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update preferences\n *\n * Update the team's preferences by its unique ID. The object you pass is\n * stored as is and replaces any previous value. The maximum allowed prefs\n * size is 64kB and throws an error if exceeded.\n *\n * @param {string} teamId\n * @param {object} prefs\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePrefs(teamId: string, prefs: object): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof prefs === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"prefs\"');\n }\n\n const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n if (typeof prefs !== 'undefined') {\n payload['prefs'] = prefs;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","export class Permission {\n\n static read = (role: string): string => {\n return `read(\"${role}\")`\n }\n\n static write = (role: string): string => {\n return `write(\"${role}\")`\n }\n\n static create = (role: string): string => {\n return `create(\"${role}\")`\n }\n\n static update = (role: string): string => {\n return `update(\"${role}\")`\n }\n\n static delete = (role: string): string => {\n return `delete(\"${role}\")`\n }\n}\n","/**\n * Helper class to generate role strings for `Permission`.\n */\nexport class Role {\n\n /**\n * Grants access to anyone.\n * \n * This includes authenticated and unauthenticated users.\n * \n * @returns {string}\n */\n public static any(): string {\n return 'any'\n }\n\n /**\n * Grants access to a specific user by user ID.\n * \n * You can optionally pass verified or unverified for\n * `status` to target specific types of users.\n *\n * @param {string} id \n * @param {string} status \n * @returns {string}\n */\n public static user(id: string, status: string = ''): string {\n if (status === '') {\n return `user:${id}`\n }\n return `user:${id}/${status}`\n }\n\n /**\n * Grants access to any authenticated or anonymous user.\n * \n * You can optionally pass verified or unverified for\n * `status` to target specific types of users.\n * \n * @param {string} status \n * @returns {string}\n */\n public static users(status: string = ''): string {\n if (status === '') {\n return 'users'\n }\n return `users/${status}`\n }\n\n /**\n * Grants access to any guest user without a session.\n * \n * Authenticated users don't have access to this role.\n * \n * @returns {string}\n */\n public static guests(): string {\n return 'guests'\n }\n\n /**\n * Grants access to a team by team ID.\n * \n * You can optionally pass a role for `role` to target\n * team members with the specified role.\n * \n * @param {string} id \n * @param {string} role \n * @returns {string}\n */\n public static team(id: string, role: string = ''): string {\n if (role === '') {\n return `team:${id}`\n }\n return `team:${id}/${role}`\n }\n\n /**\n * Grants access to a specific member of a team.\n * \n * When the member is removed from the team, they will\n * no longer have access.\n * \n * @param {string} id \n * @returns {string}\n */\n public static member(id: string): string {\n return `member:${id}`\n }\n\n /**\n * Grants access to a user with the specified label.\n * \n * @param {string} name \n * @returns {string}\n */\n public static label(name: string): string {\n return `label:${name}`\n }\n}","export class ID {\n // Generate an hex ID based on timestamp\n // Recreated from https://www.php.net/manual/en/function.uniqid.php\n static #hexTimestamp(): string {\n const now = new Date();\n const sec = Math.floor(now.getTime() / 1000);\n const msec = now.getMilliseconds();\n\n // Convert to hexadecimal\n const hexTimestamp = sec.toString(16) + msec.toString(16).padStart(5, '0');\n return hexTimestamp;\n }\n\n public static custom(id: string): string {\n return id\n }\n\n public static unique(padding: number = 7): string {\n // Generate a unique ID with padding to have a longer ID\n const baseId = ID.#hexTimestamp();\n let randomPadding = '';\n for (let i = 0; i < padding; i++) {\n const randomHexDigit = Math.floor(Math.random() * 16).toString(16);\n randomPadding += randomHexDigit;\n }\n return baseId + randomPadding;\n }\n}\n","export enum AuthenticatorType {\n Totp = 'totp',\n}","export enum AuthenticationFactor {\n Email = 'email',\n Phone = 'phone',\n Totp = 'totp',\n Recoverycode = 'recoverycode',\n}","export enum OAuthProvider {\n Amazon = 'amazon',\n Apple = 'apple',\n Auth0 = 'auth0',\n Authentik = 'authentik',\n Autodesk = 'autodesk',\n Bitbucket = 'bitbucket',\n Bitly = 'bitly',\n Box = 'box',\n Dailymotion = 'dailymotion',\n Discord = 'discord',\n Disqus = 'disqus',\n Dropbox = 'dropbox',\n Etsy = 'etsy',\n Facebook = 'facebook',\n Github = 'github',\n Gitlab = 'gitlab',\n Google = 'google',\n Linkedin = 'linkedin',\n Microsoft = 'microsoft',\n Notion = 'notion',\n Oidc = 'oidc',\n Okta = 'okta',\n Paypal = 'paypal',\n PaypalSandbox = 'paypalSandbox',\n Podio = 'podio',\n Salesforce = 'salesforce',\n Slack = 'slack',\n Spotify = 'spotify',\n Stripe = 'stripe',\n Tradeshift = 'tradeshift',\n TradeshiftBox = 'tradeshiftBox',\n Twitch = 'twitch',\n Wordpress = 'wordpress',\n Yahoo = 'yahoo',\n Yammer = 'yammer',\n Yandex = 'yandex',\n Zoho = 'zoho',\n Zoom = 'zoom',\n Mock = 'mock',\n}","export enum Browser {\n AvantBrowser = 'aa',\n AndroidWebViewBeta = 'an',\n GoogleChrome = 'ch',\n GoogleChromeIOS = 'ci',\n GoogleChromeMobile = 'cm',\n Chromium = 'cr',\n MozillaFirefox = 'ff',\n Safari = 'sf',\n MobileSafari = 'mf',\n MicrosoftEdge = 'ps',\n MicrosoftEdgeIOS = 'oi',\n OperaMini = 'om',\n Opera = 'op',\n OperaNext = 'on',\n}","export enum CreditCard {\n AmericanExpress = 'amex',\n Argencard = 'argencard',\n Cabal = 'cabal',\n Consosud = 'censosud',\n DinersClub = 'diners',\n Discover = 'discover',\n Elo = 'elo',\n Hipercard = 'hipercard',\n JCB = 'jcb',\n Mastercard = 'mastercard',\n Naranja = 'naranja',\n TarjetaShopping = 'targeta-shopping',\n UnionChinaPay = 'union-china-pay',\n Visa = 'visa',\n MIR = 'mir',\n Maestro = 'maestro',\n}","export enum Flag {\n Afghanistan = 'af',\n Angola = 'ao',\n Albania = 'al',\n Andorra = 'ad',\n UnitedArabEmirates = 'ae',\n Argentina = 'ar',\n Armenia = 'am',\n AntiguaAndBarbuda = 'ag',\n Australia = 'au',\n Austria = 'at',\n Azerbaijan = 'az',\n Burundi = 'bi',\n Belgium = 'be',\n Benin = 'bj',\n BurkinaFaso = 'bf',\n Bangladesh = 'bd',\n Bulgaria = 'bg',\n Bahrain = 'bh',\n Bahamas = 'bs',\n BosniaAndHerzegovina = 'ba',\n Belarus = 'by',\n Belize = 'bz',\n Bolivia = 'bo',\n Brazil = 'br',\n Barbados = 'bb',\n BruneiDarussalam = 'bn',\n Bhutan = 'bt',\n Botswana = 'bw',\n CentralAfricanRepublic = 'cf',\n Canada = 'ca',\n Switzerland = 'ch',\n Chile = 'cl',\n China = 'cn',\n CoteDIvoire = 'ci',\n Cameroon = 'cm',\n DemocraticRepublicOfTheCongo = 'cd',\n RepublicOfTheCongo = 'cg',\n Colombia = 'co',\n Comoros = 'km',\n CapeVerde = 'cv',\n CostaRica = 'cr',\n Cuba = 'cu',\n Cyprus = 'cy',\n CzechRepublic = 'cz',\n Germany = 'de',\n Djibouti = 'dj',\n Dominica = 'dm',\n Denmark = 'dk',\n DominicanRepublic = 'do',\n Algeria = 'dz',\n Ecuador = 'ec',\n Egypt = 'eg',\n Eritrea = 'er',\n Spain = 'es',\n Estonia = 'ee',\n Ethiopia = 'et',\n Finland = 'fi',\n Fiji = 'fj',\n France = 'fr',\n MicronesiaFederatedStatesOf = 'fm',\n Gabon = 'ga',\n UnitedKingdom = 'gb',\n Georgia = 'ge',\n Ghana = 'gh',\n Guinea = 'gn',\n Gambia = 'gm',\n GuineaBissau = 'gw',\n EquatorialGuinea = 'gq',\n Greece = 'gr',\n Grenada = 'gd',\n Guatemala = 'gt',\n Guyana = 'gy',\n Honduras = 'hn',\n Croatia = 'hr',\n Haiti = 'ht',\n Hungary = 'hu',\n Indonesia = 'id',\n India = 'in',\n Ireland = 'ie',\n IranIslamicRepublicOf = 'ir',\n Iraq = 'iq',\n Iceland = 'is',\n Israel = 'il',\n Italy = 'it',\n Jamaica = 'jm',\n Jordan = 'jo',\n Japan = 'jp',\n Kazakhstan = 'kz',\n Kenya = 'ke',\n Kyrgyzstan = 'kg',\n Cambodia = 'kh',\n Kiribati = 'ki',\n SaintKittsAndNevis = 'kn',\n SouthKorea = 'kr',\n Kuwait = 'kw',\n LaoPeopleSDemocraticRepublic = 'la',\n Lebanon = 'lb',\n Liberia = 'lr',\n Libya = 'ly',\n SaintLucia = 'lc',\n Liechtenstein = 'li',\n SriLanka = 'lk',\n Lesotho = 'ls',\n Lithuania = 'lt',\n Luxembourg = 'lu',\n Latvia = 'lv',\n Morocco = 'ma',\n Monaco = 'mc',\n Moldova = 'md',\n Madagascar = 'mg',\n Maldives = 'mv',\n Mexico = 'mx',\n MarshallIslands = 'mh',\n NorthMacedonia = 'mk',\n Mali = 'ml',\n Malta = 'mt',\n Myanmar = 'mm',\n Montenegro = 'me',\n Mongolia = 'mn',\n Mozambique = 'mz',\n Mauritania = 'mr',\n Mauritius = 'mu',\n Malawi = 'mw',\n Malaysia = 'my',\n Namibia = 'na',\n Niger = 'ne',\n Nigeria = 'ng',\n Nicaragua = 'ni',\n Netherlands = 'nl',\n Norway = 'no',\n Nepal = 'np',\n Nauru = 'nr',\n NewZealand = 'nz',\n Oman = 'om',\n Pakistan = 'pk',\n Panama = 'pa',\n Peru = 'pe',\n Philippines = 'ph',\n Palau = 'pw',\n PapuaNewGuinea = 'pg',\n Poland = 'pl',\n NorthKorea = 'kp',\n Portugal = 'pt',\n Paraguay = 'py',\n Qatar = 'qa',\n Romania = 'ro',\n Russia = 'ru',\n Rwanda = 'rw',\n SaudiArabia = 'sa',\n Sudan = 'sd',\n Senegal = 'sn',\n Singapore = 'sg',\n SolomonIslands = 'sb',\n SierraLeone = 'sl',\n ElSalvador = 'sv',\n SanMarino = 'sm',\n Somalia = 'so',\n Serbia = 'rs',\n SouthSudan = 'ss',\n SaoTomeAndPrincipe = 'st',\n Suriname = 'sr',\n Slovakia = 'sk',\n Slovenia = 'si',\n Sweden = 'se',\n Eswatini = 'sz',\n Seychelles = 'sc',\n Syria = 'sy',\n Chad = 'td',\n Togo = 'tg',\n Thailand = 'th',\n Tajikistan = 'tj',\n Turkmenistan = 'tm',\n TimorLeste = 'tl',\n Tonga = 'to',\n TrinidadAndTobago = 'tt',\n Tunisia = 'tn',\n Turkey = 'tr',\n Tuvalu = 'tv',\n Tanzania = 'tz',\n Uganda = 'ug',\n Ukraine = 'ua',\n Uruguay = 'uy',\n UnitedStates = 'us',\n Uzbekistan = 'uz',\n VaticanCity = 'va',\n SaintVincentAndTheGrenadines = 'vc',\n Venezuela = 've',\n Vietnam = 'vn',\n Vanuatu = 'vu',\n Samoa = 'ws',\n Yemen = 'ye',\n SouthAfrica = 'za',\n Zambia = 'zm',\n Zimbabwe = 'zw',\n}","export enum ExecutionMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n DELETE = 'DELETE',\n OPTIONS = 'OPTIONS',\n}","export enum ImageGravity {\n Center = 'center',\n Topleft = 'top-left',\n Top = 'top',\n Topright = 'top-right',\n Left = 'left',\n Right = 'right',\n Bottomleft = 'bottom-left',\n Bottom = 'bottom',\n Bottomright = 'bottom-right',\n}","export enum ImageFormat {\n Jpg = 'jpg',\n Jpeg = 'jpeg',\n Gif = 'gif',\n Png = 'png',\n Webp = 'webp',\n}"],"names":["fetch","AuthenticatorType","AuthenticationFactor","OAuthProvider","Browser","CreditCard","Flag","ExecutionMethod","ImageGravity","ImageFormat"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/appwrite/dist/esm/sdk.js b/node_modules/appwrite/dist/esm/sdk.js index 6d1df69..db91db5 100644 --- a/node_modules/appwrite/dist/esm/sdk.js +++ b/node_modules/appwrite/dist/esm/sdk.js @@ -1,3 +1,6 @@ +import 'isomorphic-form-data'; +import { fetch } from 'cross-fetch'; + /****************************************************************************** Copyright (c) Microsoft Corporation. @@ -29,17 +32,27 @@ function __classPrivateFieldGet(receiver, state, kind, f) { return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); } -/** - * Helper class to generate query strings. - */ +class Service { + constructor(client) { + this.client = client; + } + static flatten(data, prefix = '') { + let output = {}; + for (const [key, value] of Object.entries(data)) { + let finalKey = prefix ? prefix + '[' + key + ']' : key; + if (Array.isArray(value)) { + output = Object.assign(Object.assign({}, output), Service.flatten(value, finalKey)); + } + else { + output[finalKey] = value; + } + } + return output; + } +} +Service.CHUNK_SIZE = 5 * 1024 * 1024; // 5MB + class Query { - /** - * Constructor for Query class. - * - * @param {string} method - * @param {AttributesTypes} attribute - * @param {QueryTypes} values - */ constructor(method, attribute, values) { this.method = method; this.attribute = attribute; @@ -52,11 +65,6 @@ class Query { } } } - /** - * Convert the query object to a JSON string. - * - * @returns {string} - */ toString() { return JSON.stringify({ method: this.method, @@ -65,186 +73,30 @@ class Query { }); } } -/** - * Filter resources where attribute is equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.equal = (attribute, value) => new Query("equal", attribute, value).toString(); -/** - * Filter resources where attribute is not equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.notEqual = (attribute, value) => new Query("notEqual", attribute, value).toString(); -/** - * Filter resources where attribute is less than value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.lessThan = (attribute, value) => new Query("lessThan", attribute, value).toString(); -/** - * Filter resources where attribute is less than or equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.lessThanEqual = (attribute, value) => new Query("lessThanEqual", attribute, value).toString(); -/** - * Filter resources where attribute is greater than value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.greaterThan = (attribute, value) => new Query("greaterThan", attribute, value).toString(); -/** - * Filter resources where attribute is greater than or equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.greaterThanEqual = (attribute, value) => new Query("greaterThanEqual", attribute, value).toString(); -/** - * Filter resources where attribute is null. - * - * @param {string} attribute - * @returns {string} - */ Query.isNull = (attribute) => new Query("isNull", attribute).toString(); -/** - * Filter resources where attribute is not null. - * - * @param {string} attribute - * @returns {string} - */ Query.isNotNull = (attribute) => new Query("isNotNull", attribute).toString(); -/** - * Filter resources where attribute is between start and end (inclusive). - * - * @param {string} attribute - * @param {string | number} start - * @param {string | number} end - * @returns {string} - */ Query.between = (attribute, start, end) => new Query("between", attribute, [start, end]).toString(); -/** - * Filter resources where attribute starts with value. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ Query.startsWith = (attribute, value) => new Query("startsWith", attribute, value).toString(); -/** - * Filter resources where attribute ends with value. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ Query.endsWith = (attribute, value) => new Query("endsWith", attribute, value).toString(); -/** - * Specify which attributes should be returned by the API call. - * - * @param {string[]} attributes - * @returns {string} - */ Query.select = (attributes) => new Query("select", undefined, attributes).toString(); -/** - * Filter resources by searching attribute for value. - * A fulltext index on attribute is required for this query to work. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ Query.search = (attribute, value) => new Query("search", attribute, value).toString(); -/** - * Sort results by attribute descending. - * - * @param {string} attribute - * @returns {string} - */ Query.orderDesc = (attribute) => new Query("orderDesc", attribute).toString(); -/** - * Sort results by attribute ascending. - * - * @param {string} attribute - * @returns {string} - */ Query.orderAsc = (attribute) => new Query("orderAsc", attribute).toString(); -/** - * Return results after documentId. - * - * @param {string} documentId - * @returns {string} - */ Query.cursorAfter = (documentId) => new Query("cursorAfter", undefined, documentId).toString(); -/** - * Return results before documentId. - * - * @param {string} documentId - * @returns {string} - */ Query.cursorBefore = (documentId) => new Query("cursorBefore", undefined, documentId).toString(); -/** - * Return only limit results. - * - * @param {number} limit - * @returns {string} - */ Query.limit = (limit) => new Query("limit", undefined, limit).toString(); -/** - * Filter resources by skipping the first offset results. - * - * @param {number} offset - * @returns {string} - */ Query.offset = (offset) => new Query("offset", undefined, offset).toString(); -/** - * Filter resources where attribute contains the specified value. - * - * @param {string} attribute - * @param {string | string[]} value - * @returns {string} - */ Query.contains = (attribute, value) => new Query("contains", attribute, value).toString(); -/** - * Combine multiple queries using logical OR operator. - * - * @param {string[]} queries - * @returns {string} - */ Query.or = (queries) => new Query("or", undefined, queries.map((query) => JSON.parse(query))).toString(); -/** - * Combine multiple queries using logical AND operator. - * - * @param {string[]} queries - * @returns {string} - */ Query.and = (queries) => new Query("and", undefined, queries.map((query) => JSON.parse(query))).toString(); -/** - * Exception thrown by the package - */ class AppwriteException extends Error { - /** - * Initializes a Appwrite Exception. - * - * @param {string} message - The error message. - * @param {number} code - The error code. Default is 0. - * @param {string} type - The error type. Default is an empty string. - * @param {string} response - The response string. Default is an empty string. - */ constructor(message, code = 0, type = '', response = '') { super(message); this.name = 'AppwriteException'; @@ -254,14 +106,8 @@ class AppwriteException extends Error { this.response = response; } } -/** - * Client that handles requests to Appwrite - */ class Client { constructor() { - /** - * Holds configuration such as project. - */ this.config = { endpoint: 'https://cloud.appwrite.io/v1', endpointRealtime: '', @@ -270,15 +116,12 @@ class Client { locale: '', session: '', }; - /** - * Custom headers for API requests. - */ this.headers = { 'x-sdk-name': 'Web', 'x-sdk-platform': 'client', 'x-sdk-language': 'web', - 'x-sdk-version': '16.0.2', - 'X-Appwrite-Response-Format': '1.6.0', + 'x-sdk-version': '14.0.1', + 'X-Appwrite-Response-Format': '1.5.0', }; this.realtime = { socket: undefined, @@ -530,160 +373,80 @@ class Client { this.realtime.connect(); }; } - prepareRequest(method, url, headers = {}, params = {}) { - method = method.toUpperCase(); - headers = Object.assign({}, this.headers, headers); - if (typeof window !== 'undefined' && window.localStorage) { - const cookieFallback = window.localStorage.getItem('cookieFallback'); - if (cookieFallback) { - headers['X-Fallback-Cookies'] = cookieFallback; + call(method, url, headers = {}, params = {}) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + method = method.toUpperCase(); + headers = Object.assign({}, this.headers, headers); + let options = { + method, + headers, + credentials: 'include' + }; + if (typeof window !== 'undefined' && window.localStorage) { + headers['X-Fallback-Cookies'] = (_a = window.localStorage.getItem('cookieFallback')) !== null && _a !== void 0 ? _a : ''; } - } - let options = { - method, - headers, - credentials: 'include', - }; - if (method === 'GET') { - for (const [key, value] of Object.entries(Client.flatten(params))) { - url.searchParams.append(key, value); + if (method === 'GET') { + for (const [key, value] of Object.entries(Service.flatten(params))) { + url.searchParams.append(key, value); + } } - } - else { - switch (headers['content-type']) { - case 'application/json': - options.body = JSON.stringify(params); - break; - case 'multipart/form-data': - const formData = new FormData(); - for (const [key, value] of Object.entries(params)) { - if (value instanceof File) { - formData.append(key, value, value.name); - } - else if (Array.isArray(value)) { - for (const nestedValue of value) { - formData.append(`${key}[]`, nestedValue); + else { + switch (headers['content-type']) { + case 'application/json': + options.body = JSON.stringify(params); + break; + case 'multipart/form-data': + let formData = new FormData(); + for (const key in params) { + if (Array.isArray(params[key])) { + params[key].forEach((value) => { + formData.append(key + '[]', value); + }); + } + else { + formData.append(key, params[key]); } } - else { - formData.append(key, value); - } - } - options.body = formData; - delete headers['content-type']; - break; + options.body = formData; + delete headers['content-type']; + break; + } } - } - return { uri: url.toString(), options }; - } - chunkedUpload(method, url, headers = {}, originalPayload = {}, onProgress) { - return __awaiter(this, void 0, void 0, function* () { - const file = Object.values(originalPayload).find((value) => value instanceof File); - if (file.size <= Client.CHUNK_SIZE) { - return yield this.call(method, url, headers, originalPayload); - } - let start = 0; - let response = null; - while (start < file.size) { - let end = start + Client.CHUNK_SIZE; // Prepare end for the next chunk - if (end >= file.size) { - end = file.size; // Adjust for the last chunk to include the last byte + try { + let data = null; + const response = yield fetch(url.toString(), options); + if ((_b = response.headers.get('content-type')) === null || _b === void 0 ? void 0 : _b.includes('application/json')) { + data = yield response.json(); } - headers['content-range'] = `bytes ${start}-${end - 1}/${file.size}`; - const chunk = file.slice(start, end); - let payload = Object.assign(Object.assign({}, originalPayload), { file: new File([chunk], file.name) }); - response = yield this.call(method, url, headers, payload); - if (onProgress && typeof onProgress === 'function') { - onProgress({ - $id: response.$id, - progress: Math.round((end / file.size) * 100), - sizeUploaded: end, - chunksTotal: Math.ceil(file.size / Client.CHUNK_SIZE), - chunksUploaded: Math.ceil(end / Client.CHUNK_SIZE) - }); + else { + data = { + message: yield response.text() + }; } - if (response && response.$id) { - headers['x-appwrite-id'] = response.$id; + if (400 <= response.status) { + throw new AppwriteException(data === null || data === void 0 ? void 0 : data.message, response.status, data === null || data === void 0 ? void 0 : data.type, data); } - start = end; - } - return response; - }); - } - call(method, url, headers = {}, params = {}, responseType = 'json') { - var _a; - return __awaiter(this, void 0, void 0, function* () { - const { uri, options } = this.prepareRequest(method, url, headers, params); - let data = null; - const response = yield fetch(uri, options); - const warnings = response.headers.get('x-appwrite-warning'); - if (warnings) { - warnings.split(';').forEach((warning) => console.warn('Warning: ' + warning)); - } - if ((_a = response.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.includes('application/json')) { - data = yield response.json(); - } - else if (responseType === 'arrayBuffer') { - data = yield response.arrayBuffer(); - } - else { - data = { - message: yield response.text() - }; - } - if (400 <= response.status) { - throw new AppwriteException(data === null || data === void 0 ? void 0 : data.message, response.status, data === null || data === void 0 ? void 0 : data.type, data); + const cookieFallback = response.headers.get('X-Fallback-Cookies'); + if (typeof window !== 'undefined' && window.localStorage && cookieFallback) { + window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.'); + window.localStorage.setItem('cookieFallback', cookieFallback); + } + return data; } - const cookieFallback = response.headers.get('X-Fallback-Cookies'); - if (typeof window !== 'undefined' && window.localStorage && cookieFallback) { - window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.'); - window.localStorage.setItem('cookieFallback', cookieFallback); + catch (e) { + if (e instanceof AppwriteException) { + throw e; + } + throw new AppwriteException(e.message); } - return data; }); } - static flatten(data, prefix = '') { - let output = {}; - for (const [key, value] of Object.entries(data)) { - let finalKey = prefix ? prefix + '[' + key + ']' : key; - if (Array.isArray(value)) { - output = Object.assign(Object.assign({}, output), Client.flatten(value, finalKey)); - } - else { - output[finalKey] = value; - } - } - return output; - } } -Client.CHUNK_SIZE = 1024 * 1024 * 5; -class Service { +class Account extends Service { constructor(client) { - this.client = client; - } - static flatten(data, prefix = '') { - let output = {}; - for (const [key, value] of Object.entries(data)) { - let finalKey = prefix ? prefix + '[' + key + ']' : key; - if (Array.isArray(value)) { - output = Object.assign(Object.assign({}, output), Service.flatten(value, finalKey)); - } - else { - output[finalKey] = value; - } - } - return output; - } -} -/** - * The size for chunked uploads in bytes. - */ -Service.CHUNK_SIZE = 5 * 1024 * 1024; // 5MB - -class Account { - constructor(client) { - this.client = client; + super(client); } /** * Get account @@ -691,31 +454,36 @@ class Account { * Get the currently logged in user. * * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ get() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create account * - * Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession). + * Use this endpoint to allow a new user to register a new account in your + * project. After the user registration completes successfully, you can use + * the + * [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) + * route to start verifying the user email address. To allow the new user to + * login to their new account, you need to create a new [account + * session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession). * * @param {string} userId * @param {string} email * @param {string} password * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ create(userId, email, password, name) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -742,24 +510,28 @@ class Account { payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Update email * - * Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request. -This endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password. - + * Update currently logged in user account email address. After changing user + * address, the user confirmation status will get reset. A new confirmation + * email is not sent automatically however you can use the send confirmation + * email endpoint again to send the confirmation email. For security measures, + * user password is required to complete this request. + * This endpoint can also be used to convert an anonymous account to a normal + * one, by passing an email address and a new password. + * * * @param {string} email * @param {string} password * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateEmail(email, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof email === 'undefined') { @@ -777,10 +549,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -790,8 +561,8 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listIdentities(queries) { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/identities'; @@ -800,10 +571,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** @@ -813,8 +583,8 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string} identityId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteIdentity(identityId) { return __awaiter(this, void 0, void 0, function* () { if (typeof identityId === 'undefined') { @@ -823,40 +593,43 @@ This endpoint can also be used to convert an anonymous account to a normal one, const apiPath = '/account/identities/{identityId}'.replace('{identityId}', identityId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Create JWT * - * Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame. + * Use this endpoint to create a JSON Web Token. You can use the resulting JWT + * to authenticate on behalf of the current user when working with the + * Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes + * from its creation and will be invalid if the user will logout in that time + * frame. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createJWT() { return __awaiter(this, void 0, void 0, function* () { - const apiPath = '/account/jwts'; + const apiPath = '/account/jwt'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * List logs * - * Get the list of latest security activity logs for the currently logged in user. Each log returns user IP address, location and date and time of log. + * Get the list of latest security activity logs for the currently logged in + * user. Each log returns user IP address, location and date and time of log. * * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listLogs(queries) { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/logs'; @@ -865,10 +638,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** @@ -878,8 +650,8 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {boolean} mfa * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateMFA(mfa) { return __awaiter(this, void 0, void 0, function* () { if (typeof mfa === 'undefined') { @@ -891,21 +663,23 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['mfa'] = mfa; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** - * Create Authenticator + * Add Authenticator * - * Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](/docs/references/cloud/client-web/account#updateMfaAuthenticator) method. + * Add an authenticator app to be used as an MFA factor. Verify the + * authenticator using the [verify + * authenticator](/docs/references/cloud/client-web/account#verifyAuthenticator) + * method. * * @param {AuthenticatorType} type * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaAuthenticator(type) { return __awaiter(this, void 0, void 0, function* () { if (typeof type === 'undefined') { @@ -914,22 +688,23 @@ This endpoint can also be used to convert an anonymous account to a normal one, const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Verify Authenticator * - * Verify an authenticator app after adding it using the [add authenticator](/docs/references/cloud/client-web/account#createMfaAuthenticator) method. + * Verify an authenticator app after adding it using the [add + * authenticator](/docs/references/cloud/client-web/account#addAuthenticator) + * method. * * @param {AuthenticatorType} type * @param {string} otp * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateMfaAuthenticator(type, otp) { return __awaiter(this, void 0, void 0, function* () { if (typeof type === 'undefined') { @@ -944,10 +719,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['otp'] = otp; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** @@ -956,32 +730,40 @@ This endpoint can also be used to convert an anonymous account to a normal one, * Delete an authenticator for a user by ID. * * @param {AuthenticatorType} type + * @param {string} otp * @throws {AppwriteException} - * @returns {Promise<{}>} - */ - deleteMfaAuthenticator(type) { + * @returns {Promise} + */ + deleteMfaAuthenticator(type, otp) { return __awaiter(this, void 0, void 0, function* () { if (typeof type === 'undefined') { throw new AppwriteException('Missing required parameter: "type"'); } + if (typeof otp === 'undefined') { + throw new AppwriteException('Missing required parameter: "otp"'); + } const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type); const payload = {}; + if (typeof otp !== 'undefined') { + payload['otp'] = otp; + } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** - * Create MFA Challenge + * Create 2FA Challenge * - * Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) method. + * Begin the process of MFA verification after sign-in. Finish the flow with + * [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) + * method. * * @param {AuthenticationFactor} factor * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaChallenge(factor) { return __awaiter(this, void 0, void 0, function* () { if (typeof factor === 'undefined') { @@ -993,22 +775,25 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['factor'] = factor; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create MFA Challenge (confirmation) * - * Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method. + * Complete the MFA challenge by providing the one-time password. Finish the + * process of MFA verification by providing the one-time password. To begin + * the flow, use + * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) + * method. * * @param {string} challengeId * @param {string} otp * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ updateMfaChallenge(challengeId, otp) { return __awaiter(this, void 0, void 0, function* () { if (typeof challengeId === 'undefined') { @@ -1026,10 +811,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['otp'] = otp; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1038,74 +822,80 @@ This endpoint can also be used to convert an anonymous account to a normal one, * List the factors available on the account to be used as a MFA challange. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listMfaFactors() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/factors'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Get MFA Recovery Codes * - * Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes. + * Get recovery codes that can be used as backup for MFA flow. Before getting + * codes, they must be generated using + * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) + * method. An OTP challenge is required to read recovery codes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getMfaRecoveryCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/recovery-codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create MFA Recovery Codes * - * Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method. + * Generate recovery codes as backup for MFA flow. It's recommended to + * generate and show then immediately after user successfully adds their + * authehticator. Recovery codes can be used as a MFA verification type in + * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) + * method. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaRecoveryCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/recovery-codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Regenerate MFA Recovery Codes * - * Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes. + * Regenerate recovery codes that can be used as backup for MFA flow. Before + * regenerating codes, they must be first generated using + * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) + * method. An OTP challenge is required to regenreate recovery codes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMfaRecoveryCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/recovery-codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1115,8 +905,8 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateName(name) { return __awaiter(this, void 0, void 0, function* () { if (typeof name === 'undefined') { @@ -1128,22 +918,23 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Update password * - * Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional. + * Update currently logged in user password. For validation, user is required + * to pass in the new password, and the old password. For users created with + * OAuth, Team Invites and Magic URL, oldPassword is optional. * * @param {string} password * @param {string} oldPassword * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePassword(password, oldPassword) { return __awaiter(this, void 0, void 0, function* () { if (typeof password === 'undefined') { @@ -1158,22 +949,25 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['oldPassword'] = oldPassword; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Update phone * - * Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) endpoint to send a confirmation SMS. + * Update the currently logged in user's phone number. After updating the + * phone number, the phone verification status will be reset. A confirmation + * SMS is not sent automatically, however you can use the [POST + * /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) + * endpoint to send a confirmation SMS. * * @param {string} phone * @param {string} password * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePhone(phone, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof phone === 'undefined') { @@ -1191,10 +985,9 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1203,28 +996,29 @@ This endpoint can also be used to convert an anonymous account to a normal one, * Get the preferences as a key-value object for the currently logged in user. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getPrefs() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/prefs'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update preferences * - * Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded. + * Update currently logged in user account preferences. The object you pass is + * stored as is, and replaces any previous value. The maximum allowed prefs + * size is 64kB and throws error if exceeded. * * @param {Partial} prefs * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePrefs(prefs) { return __awaiter(this, void 0, void 0, function* () { if (typeof prefs === 'undefined') { @@ -1236,22 +1030,28 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['prefs'] = prefs; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Create password recovery * - * Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour. + * Sends the user an email with a temporary secret key for password reset. + * When the user clicks the confirmation link he is redirected back to your + * app password reset URL with the secret key and email address values + * attached to the URL query string. Use the query string params to submit a + * request to the [PUT + * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) + * endpoint to complete the process. The verification link sent to the user's + * email address is valid for 1 hour. * * @param {string} email * @param {string} url * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createRecovery(email, url) { return __awaiter(this, void 0, void 0, function* () { if (typeof email === 'undefined') { @@ -1269,25 +1069,31 @@ This endpoint can also be used to convert an anonymous account to a normal one, payload['url'] = url; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create password recovery (confirmation) * - * Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) endpoint. - -Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. + * Use this endpoint to complete the user account password reset. Both the + * **userId** and **secret** arguments will be passed as query parameters to + * the redirect URL you have provided when sending your request to the [POST + * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) + * endpoint. + * + * Please note that in order to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * @param {string} userId * @param {string} secret * @param {string} password * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateRecovery(userId, secret, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1311,81 +1117,88 @@ Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/ payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * List sessions * - * Get the list of active sessions across different devices for the currently logged in user. + * Get the list of active sessions across different devices for the currently + * logged in user. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listSessions() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/sessions'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Delete sessions * - * Delete all sessions from the user account and remove any sessions cookies from the end client. + * Delete all sessions from the user account and remove any sessions cookies + * from the end client. * * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSessions() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/sessions'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Create anonymous session * - * Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) or create an [OAuth2 session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session). + * Use this endpoint to allow a new user to register an anonymous account in + * your project. This route will also create a new session for the user. To + * allow the new user to convert an anonymous account to a normal account, you + * need to update its [email and + * password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) + * or create an [OAuth2 + * session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session). * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createAnonymousSession() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/sessions/anonymous'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create email password session * - * Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Allow the user to login into their account by providing a valid email and + * password combination. This route will create a new session for the user. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} email * @param {string} password * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createEmailPasswordSession(email, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof email === 'undefined') { @@ -1403,22 +1216,23 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Update magic URL session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMagicURLSession(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1436,69 +1250,77 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Create OAuth2 session * - * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. - -If there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). - + * Allow the user to login to their account using the OAuth2 provider of their + * choice. Each OAuth2 provider should be enabled from the Appwrite console + * first. Use the success and failure arguments to provide a redirect URL's + * back to your app when login is completed. + * + * If there is already an active session, the new session will be attached to + * the logged-in account. If there are no active sessions, the server will + * attempt to look for a user with the same email address as the email + * received from the OAuth2 provider and attach the new session to the + * existing user. If no matching user is found - the server will create a new + * user. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). + * * * @param {OAuthProvider} provider * @param {string} success * @param {string} failure * @param {string[]} scopes * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {void|string} + */ createOAuth2Session(provider, success, failure, scopes) { - return __awaiter(this, void 0, void 0, function* () { - if (typeof provider === 'undefined') { - throw new AppwriteException('Missing required parameter: "provider"'); - } - const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider); - const payload = {}; - if (typeof success !== 'undefined') { - payload['success'] = success; - } - if (typeof failure !== 'undefined') { - payload['failure'] = failure; - } - if (typeof scopes !== 'undefined') { - payload['scopes'] = scopes; - } - const uri = new URL(this.client.config.endpoint + apiPath); - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { - window.location.href = uri.toString(); - return; - } - else { - return uri.toString(); - } - }); + if (typeof provider === 'undefined') { + throw new AppwriteException('Missing required parameter: "provider"'); + } + const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider); + const payload = {}; + if (typeof success !== 'undefined') { + payload['success'] = success; + } + if (typeof failure !== 'undefined') { + payload['failure'] = failure; + } + if (typeof scopes !== 'undefined') { + payload['scopes'] = scopes; + } + const uri = new URL(this.client.config.endpoint + apiPath); + payload['project'] = this.client.config.project; + for (const [key, value] of Object.entries(Service.flatten(payload))) { + uri.searchParams.append(key, value); + } + if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { + window.location.href = uri.toString(); + } + else { + return uri; + } } /** * Update phone session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePhoneSession(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1516,22 +1338,23 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Create session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createSession(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1549,21 +1372,21 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Get session * - * Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used. + * Use this endpoint to get a logged in user's session using a Session ID. + * Inputting 'current' will return the current session being used. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getSession(sessionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof sessionId === 'undefined') { @@ -1572,21 +1395,22 @@ A user is limited to 10 active sessions at a time by default. [Learn more about const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update session * - * Use this endpoint to extend a session's length. Extending a session is useful when session expiry is short. If the session was created using an OAuth provider, this endpoint refreshes the access token from the provider. + * Use this endpoint to extend a session's length. Extending a session is + * useful when session expiry is short. If the session was created using an + * OAuth provider, this endpoint refreshes the access token from the provider. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateSession(sessionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof sessionId === 'undefined') { @@ -1595,21 +1419,24 @@ A user is limited to 10 active sessions at a time by default. [Learn more about const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Delete session * - * Logout the user. Use 'current' as the session ID to logout on this device, use a session ID to logout on another device. If you're looking to logout the user on all devices, use [Delete Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) instead. + * Logout the user. Use 'current' as the session ID to logout on this device, + * use a session ID to logout on another device. If you're looking to logout + * the user on all devices, use [Delete + * Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) + * instead. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSession(sessionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof sessionId === 'undefined') { @@ -1618,29 +1445,29 @@ A user is limited to 10 active sessions at a time by default. [Learn more about const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Update status * - * Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead. + * Block the currently logged in user account. Behind the scene, the user + * record is not deleted but permanently blocked from any access. To + * completely delete a user, use the Users API instead. * * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateStatus() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/status'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1651,8 +1478,8 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * @param {string} identifier * @param {string} providerId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPushTarget(targetId, identifier, providerId) { return __awaiter(this, void 0, void 0, function* () { if (typeof targetId === 'undefined') { @@ -1673,10 +1500,9 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['providerId'] = providerId; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1686,8 +1512,8 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * @param {string} targetId * @param {string} identifier * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePushTarget(targetId, identifier) { return __awaiter(this, void 0, void 0, function* () { if (typeof targetId === 'undefined') { @@ -1702,10 +1528,9 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['identifier'] = identifier; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1714,8 +1539,8 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * * @param {string} targetId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deletePushTarget(targetId) { return __awaiter(this, void 0, void 0, function* () { if (typeof targetId === 'undefined') { @@ -1724,25 +1549,31 @@ A user is limited to 10 active sessions at a time by default. [Learn more about const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Create email token (OTP) * - * Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Sends the user an email with a secret key for creating a session. If the + * provided user ID has not be registered, a new user will be created. Use the + * returned user ID and secret and submit a request to the [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The secret sent to the user's email + * is valid for 15 minutes. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} userId * @param {string} email * @param {boolean} phrase * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createEmailToken(userId, email, phrase) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1763,27 +1594,38 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['phrase'] = phrase; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create magic URL token * - * Sends the user an email with a secret key for creating a session. If the provided user ID has not been registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). - + * Sends the user an email with a secret key for creating a session. If the + * provided user ID has not been registered, a new user will be created. When + * the user clicks the link in the email, the user is redirected back to the + * URL you provided with the secret key and userId values attached to the URL + * query string. Use the query string parameters to submit a request to the + * [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The link sent to the user's email + * address is valid for 1 hour. If you are on a mobile device you can leave + * the URL parameter empty, so that the login completion will be handled by + * your Appwrite instance by default. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). + * * * @param {string} userId * @param {string} email * @param {string} url * @param {boolean} phrase * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMagicURLToken(userId, email, url, phrase) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1807,70 +1649,82 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['phrase'] = phrase; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create OAuth2 token * - * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. - -If authentication succeeds, `userId` and `secret` of a token will be appended to the success URL as query parameters. These can be used to create a new session using the [Create session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Allow the user to login to their account using the OAuth2 provider of their + * choice. Each OAuth2 provider should be enabled from the Appwrite console + * first. Use the success and failure arguments to provide a redirect URL's + * back to your app when login is completed. + * + * If authentication succeeds, `userId` and `secret` of a token will be + * appended to the success URL as query parameters. These can be used to + * create a new session using the [Create + * session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {OAuthProvider} provider * @param {string} success * @param {string} failure * @param {string[]} scopes * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {void|string} + */ createOAuth2Token(provider, success, failure, scopes) { - return __awaiter(this, void 0, void 0, function* () { - if (typeof provider === 'undefined') { - throw new AppwriteException('Missing required parameter: "provider"'); - } - const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider); - const payload = {}; - if (typeof success !== 'undefined') { - payload['success'] = success; - } - if (typeof failure !== 'undefined') { - payload['failure'] = failure; - } - if (typeof scopes !== 'undefined') { - payload['scopes'] = scopes; - } - const uri = new URL(this.client.config.endpoint + apiPath); - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { - window.location.href = uri.toString(); - return; - } - else { - return uri.toString(); - } - }); + if (typeof provider === 'undefined') { + throw new AppwriteException('Missing required parameter: "provider"'); + } + const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider); + const payload = {}; + if (typeof success !== 'undefined') { + payload['success'] = success; + } + if (typeof failure !== 'undefined') { + payload['failure'] = failure; + } + if (typeof scopes !== 'undefined') { + payload['scopes'] = scopes; + } + const uri = new URL(this.client.config.endpoint + apiPath); + payload['project'] = this.client.config.project; + for (const [key, value] of Object.entries(Service.flatten(payload))) { + uri.searchParams.append(key, value); + } + if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { + window.location.href = uri.toString(); + } + else { + return uri; + } } /** * Create phone token * - * Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Sends the user an SMS with a secret key for creating a session. If the + * provided user ID has not be registered, a new user will be created. Use the + * returned user ID and secret and submit a request to the [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The secret sent to the user's phone + * is valid for 15 minutes. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} userId * @param {string} phone * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPhoneToken(userId, phone) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1888,24 +1742,34 @@ A user is limited to 10 active sessions at a time by default. [Learn more about payload['phone'] = phone; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create email verification * - * Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). The verification link sent to the user's email address is valid for 7 days. - -Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. - + * Use this endpoint to send a verification message to your user email address + * to confirm they are the valid owners of that address. Both the **userId** + * and **secret** arguments will be passed as query parameters to the URL you + * have provided to be attached to the verification email. The provided URL + * should redirect the user back to your app and allow you to complete the + * verification process by verifying both the **userId** and **secret** + * parameters. Learn more about how to [complete the verification + * process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). + * The verification link sent to the user's email address is valid for 7 days. + * + * Please note that in order to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. + * * * @param {string} url * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createVerification(url) { return __awaiter(this, void 0, void 0, function* () { if (typeof url === 'undefined') { @@ -1917,22 +1781,24 @@ Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/ payload['url'] = url; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create email verification (confirmation) * - * Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code. + * Use this endpoint to complete the user email verification process. Use both + * the **userId** and **secret** parameters that were attached to your app URL + * to verify the user email ownership. If confirmed this route will return a + * 200 status code. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateVerification(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1950,41 +1816,49 @@ Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/ payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Create phone verification * - * Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) endpoint. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes. + * Use this endpoint to send a verification SMS to the currently logged in + * user. This endpoint is meant for use after updating a user's phone number + * using the + * [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) + * endpoint. Learn more about how to [complete the verification + * process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). + * The verification code sent to the user's phone number is valid for 15 + * minutes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPhoneVerification() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/verification/phone'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** - * Update phone verification (confirmation) + * Create phone verification (confirmation) * - * Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code. + * Use this endpoint to complete the user phone verification process. Use the + * **userId** and **secret** that were sent to your user's phone number to + * verify the user email ownership. If confirmed this route will return a 200 + * status code. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePhoneVerification(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -2002,32 +1876,38 @@ Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/ payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } } -class Avatars { +class Avatars extends Service { constructor(client) { - this.client = client; + super(client); } /** * Get browser icon * - * You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) endpoint. Use width, height and quality arguments to change the output settings. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. + * You can use this endpoint to show different browser icons to your users. + * The code argument receives the browser code as it appears in your user [GET + * /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) + * endpoint. Use width, height and quality arguments to change the output + * settings. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. * * @param {Browser} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getBrowser(code, width, height, quality) { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); @@ -2048,27 +1928,28 @@ When one dimension is specified and the other is 0, the image is scaled with pre for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get credit card icon * - * The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * The credit card endpoint will return you the icon of the credit card + * provider you need. Use width, height and quality arguments to change the + * output settings. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {CreditCard} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getCreditCard(code, width, height, quality) { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); @@ -2089,23 +1970,19 @@ When one dimension is specified and the other is 0, the image is scaled with pre for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get favicon * - * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL. - -This endpoint does not follow HTTP redirects. + * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote + * website URL. + * * * @param {string} url * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFavicon(url) { if (typeof url === 'undefined') { throw new AppwriteException('Missing required parameter: "url"'); @@ -2120,27 +1997,29 @@ This endpoint does not follow HTTP redirects. for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get country flag * - * You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * You can use this endpoint to show different country flags icons to your + * users. The code argument receives the 2 letter country code. Use width, + * height and quality arguments to change the output settings. Country codes + * follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {Flag} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFlag(code, width, height, quality) { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); @@ -2161,27 +2040,28 @@ When one dimension is specified and the other is 0, the image is scaled with pre for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get image from URL * - * Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px. - -This endpoint does not follow HTTP redirects. + * Use this endpoint to fetch a remote image URL and crop it to any image size + * you want. This endpoint is very useful if you need to crop and display + * remote images in your app or in case you want to make sure a 3rd party + * image is properly served using a TLS protocol. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 400x400px. + * * * @param {string} url * @param {number} width * @param {number} height * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getImage(url, width, height) { if (typeof url === 'undefined') { throw new AppwriteException('Missing required parameter: "url"'); @@ -2202,29 +2082,35 @@ This endpoint does not follow HTTP redirects. for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get user initials * - * Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned. - -You can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * Use this endpoint to show your user initials avatar icon on your website or + * app. By default, this route will try to print your logged-in user name or + * email initials. You can also overwrite the user name if you pass the 'name' + * parameter. If no name is given and no user is logged, an empty avatar will + * be returned. + * + * You can use the color and background params to change the avatar colors. By + * default, a random theme will be selected. The random theme will persist for + * the user's initials when reloading the same theme will always return for + * the same initials. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {string} name * @param {number} width * @param {number} height * @param {string} background * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getInitials(name, width, height, background) { const apiPath = '/avatars/initials'; const payload = {}; @@ -2245,25 +2131,22 @@ When one dimension is specified and the other is 0, the image is scaled with pre for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get QR code * - * Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image. - + * Converts a given plain text to a QR code image. You can use the query + * parameters to change the size and style of the resulting image. + * * * @param {string} text * @param {number} size * @param {number} margin * @param {boolean} download * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getQR(text, size, margin, download) { if (typeof text === 'undefined') { throw new AppwriteException('Missing required parameter: "text"'); @@ -2287,29 +2170,26 @@ When one dimension is specified and the other is 0, the image is scaled with pre for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } } -class Databases { +class Databases extends Service { constructor(client) { - this.client = client; + super(client); } /** * List documents * - * Get a list of all the user's documents in a given collection. You can use the query params to filter your results. + * Get a list of all the user's documents in a given collection. You can use + * the query params to filter your results. * * @param {string} databaseId * @param {string} collectionId * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ listDocuments(databaseId, collectionId, queries) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2324,16 +2204,18 @@ class Databases { payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create document * - * Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) API or directly from your database console. + * Create a new Document. Before using this route, you should create a new + * collection resource using either a [server + * integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) + * API or directly from your database console. * * @param {string} databaseId * @param {string} collectionId @@ -2341,8 +2223,8 @@ class Databases { * @param {Omit} data * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createDocument(databaseId, collectionId, documentId, data, permissions) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2369,24 +2251,24 @@ class Databases { payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Get document * - * Get a document by its unique ID. This endpoint response returns a JSON object with the document data. + * Get a document by its unique ID. This endpoint response returns a JSON + * object with the document data. * * @param {string} databaseId * @param {string} collectionId * @param {string} documentId * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getDocument(databaseId, collectionId, documentId, queries) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2404,16 +2286,16 @@ class Databases { payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update document * - * Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated. + * Update a document by its unique ID. Using the patch method you can pass + * only specific fields that will get updated. * * @param {string} databaseId * @param {string} collectionId @@ -2421,8 +2303,8 @@ class Databases { * @param {Partial>} data * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateDocument(databaseId, collectionId, documentId, data, permissions) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2443,10 +2325,9 @@ class Databases { payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2458,8 +2339,8 @@ class Databases { * @param {string} collectionId * @param {string} documentId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteDocument(databaseId, collectionId, documentId) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2474,29 +2355,29 @@ class Databases { const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } } -class Functions { +class Functions extends Service { constructor(client) { - this.client = client; + super(client); } /** * List executions * - * Get a list of all the current user function execution logs. You can use the query params to filter your results. + * Get a list of all the current user function execution logs. You can use the + * query params to filter your results. * * @param {string} functionId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listExecutions(functionId, queries, search) { return __awaiter(this, void 0, void 0, function* () { if (typeof functionId === 'undefined') { @@ -2511,16 +2392,18 @@ class Functions { payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create execution * - * Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously. + * Trigger a function execution. The returned object will return you the + * current execution status. You can ping the `Get Execution` endpoint to get + * updates on the current execution status. Once this endpoint is called, your + * function execution process will start asynchronously. * * @param {string} functionId * @param {string} body @@ -2528,11 +2411,10 @@ class Functions { * @param {string} xpath * @param {ExecutionMethod} method * @param {object} headers - * @param {string} scheduledAt * @throws {AppwriteException} - * @returns {Promise} - */ - createExecution(functionId, body, async, xpath, method, headers, scheduledAt) { + * @returns {Promise} + */ + createExecution(functionId, body, async, xpath, method, headers) { return __awaiter(this, void 0, void 0, function* () { if (typeof functionId === 'undefined') { throw new AppwriteException('Missing required parameter: "functionId"'); @@ -2554,14 +2436,10 @@ class Functions { if (typeof headers !== 'undefined') { payload['headers'] = headers; } - if (typeof scheduledAt !== 'undefined') { - payload['scheduledAt'] = scheduledAt; - } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2572,8 +2450,8 @@ class Functions { * @param {string} functionId * @param {string} executionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getExecution(functionId, executionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof functionId === 'undefined') { @@ -2585,17 +2463,16 @@ class Functions { const apiPath = '/functions/{functionId}/executions/{executionId}'.replace('{functionId}', functionId).replace('{executionId}', executionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } } -class Graphql { +class Graphql extends Service { constructor(client) { - this.client = client; + super(client); } /** * GraphQL endpoint @@ -2604,8 +2481,8 @@ class Graphql { * * @param {object} query * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ query(query) { return __awaiter(this, void 0, void 0, function* () { if (typeof query === 'undefined') { @@ -2617,11 +2494,10 @@ class Graphql { payload['query'] = query; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'x-sdk-graphql': 'true', 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2631,8 +2507,8 @@ class Graphql { * * @param {object} query * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ mutation(query) { return __awaiter(this, void 0, void 0, function* () { if (typeof query === 'undefined') { @@ -2644,178 +2520,180 @@ class Graphql { payload['query'] = query; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'x-sdk-graphql': 'true', 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } } -class Locale { +class Locale extends Service { constructor(client) { - this.client = client; + super(client); } /** * Get user locale * - * Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language. - -([IP Geolocation by DB-IP](https://db-ip.com)) + * Get the current user location based on IP. Returns an object with user + * country code, country name, continent name, continent code, ip address and + * suggested currency. You can use the locale header to get the data in a + * supported language. + * + * ([IP Geolocation by DB-IP](https://db-ip.com)) * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ get() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List Locale Codes * - * List of all locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). + * List of all locale codes in [ISO + * 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List continents * - * List of all continents. You can use the locale header to get the data in a supported language. + * List of all continents. You can use the locale header to get the data in a + * supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listContinents() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/continents'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List countries * - * List of all countries. You can use the locale header to get the data in a supported language. + * List of all countries. You can use the locale header to get the data in a + * supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountries() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/countries'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List EU countries * - * List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language. + * List of all countries that are currently members of the EU. You can use the + * locale header to get the data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountriesEU() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/countries/eu'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List countries phone codes * - * List of all countries phone codes. You can use the locale header to get the data in a supported language. + * List of all countries phone codes. You can use the locale header to get the + * data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountriesPhones() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/countries/phones'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List currencies * - * List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language. + * List of all currencies, including currency symbol, name, plural, and + * decimal digits for all major and minor currencies. You can use the locale + * header to get the data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCurrencies() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/currencies'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List languages * - * List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language. + * List of all languages classified by ISO 639-1 including 2-letter code, name + * in English, and name in the respective language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listLanguages() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/languages'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } } -class Messaging { +class Messaging extends Service { constructor(client) { - this.client = client; + super(client); } /** * Create subscriber @@ -2826,8 +2704,8 @@ class Messaging { * @param {string} subscriberId * @param {string} targetId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createSubscriber(topicId, subscriberId, targetId) { return __awaiter(this, void 0, void 0, function* () { if (typeof topicId === 'undefined') { @@ -2848,10 +2726,9 @@ class Messaging { payload['targetId'] = targetId; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2862,8 +2739,8 @@ class Messaging { * @param {string} topicId * @param {string} subscriberId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSubscriber(topicId, subscriberId) { return __awaiter(this, void 0, void 0, function* () { if (typeof topicId === 'undefined') { @@ -2875,29 +2752,29 @@ class Messaging { const apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}'.replace('{topicId}', topicId).replace('{subscriberId}', subscriberId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } } -class Storage { +class Storage extends Service { constructor(client) { - this.client = client; + super(client); } /** * List files * - * Get a list of all the user files. You can use the query params to filter your results. + * Get a list of all the user files. You can use the query params to filter + * your results. * * @param {string} bucketId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listFiles(bucketId, queries, search) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -2912,31 +2789,40 @@ class Storage { payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create file * - * Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](https://appwrite.io/docs/server/storage#storageCreateBucket) API or directly from your Appwrite console. - -Larger files should be uploaded using multiple requests with the [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes. - -When the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one. - -If you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally. - + * Create a new file. Before using this route, you should create a new bucket + * resource using either a [server + * integration](https://appwrite.io/docs/server/storage#storageCreateBucket) + * API or directly from your Appwrite console. + * + * Larger files should be uploaded using multiple requests with the + * [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) + * header to send a partial request with a maximum supported chunk of `5MB`. + * The `content-range` header values should always be in bytes. + * + * When the first request is sent, the server will return the **File** object, + * and the subsequent part request must include the file's **id** in + * `x-appwrite-id` header to allow the server to know that the partial upload + * is for the existing file and not for a new one. + * + * If you're creating a new file using one of the Appwrite SDKs, all the + * chunking logic will be managed by the SDK internally. + * * * @param {string} bucketId * @param {string} fileId * @param {File} file * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createFile(bucketId, fileId, file, permissions, onProgress = (progress) => { }) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -2960,22 +2846,62 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); + if (!(file instanceof File)) { + throw new AppwriteException('Parameter "file" has to be a File.'); + } + const size = file.size; + if (size <= Service.CHUNK_SIZE) { + return yield this.client.call('post', uri, { + 'content-type': 'multipart/form-data', + }, payload); + } const apiHeaders = { 'content-type': 'multipart/form-data', }; - return yield this.client.chunkedUpload('post', uri, apiHeaders, payload, onProgress); + let offset = 0; + let response = undefined; + if (fileId != 'unique()') { + try { + response = yield this.client.call('GET', new URL(this.client.config.endpoint + apiPath + '/' + fileId), apiHeaders); + offset = response.chunksUploaded * Service.CHUNK_SIZE; + } + catch (e) { + } + } + while (offset < size) { + let end = Math.min(offset + Service.CHUNK_SIZE - 1, size - 1); + apiHeaders['content-range'] = 'bytes ' + offset + '-' + end + '/' + size; + if (response && response.$id) { + apiHeaders['x-appwrite-id'] = response.$id; + } + const chunk = file.slice(offset, end + 1); + payload['file'] = new File([chunk], file.name); + response = yield this.client.call('post', uri, apiHeaders, payload); + if (onProgress) { + onProgress({ + $id: response.$id, + progress: (offset / size) * 100, + sizeUploaded: offset, + chunksTotal: response.chunksTotal, + chunksUploaded: response.chunksUploaded + }); + } + offset += Service.CHUNK_SIZE; + } + return response; }); } /** * Get file * - * Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata. + * Get a file by its unique ID. This endpoint response returns a JSON object + * with the file metadata. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getFile(bucketId, fileId) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -2987,24 +2913,24 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update file * - * Update a file by its unique ID. Only users with write permissions have access to update this resource. + * Update a file by its unique ID. Only users with write permissions have + * access to update this resource. * * @param {string} bucketId * @param {string} fileId * @param {string} name * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateFile(bucketId, fileId, name, permissions) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -3022,22 +2948,22 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Delete File * - * Delete a file by its unique ID. Only users with write permissions have access to delete this resource. + * Delete a file by its unique ID. Only users with write permissions have + * access to delete this resource. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteFile(bucketId, fileId) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -3049,22 +2975,23 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Get file for download * - * Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory. + * Get a file content by its unique ID. The endpoint response return with a + * 'Content-Disposition: attachment' header that tells the browser to start + * downloading the file to user downloads directory. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFileDownload(bucketId, fileId) { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); @@ -3079,16 +3006,16 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get file preview * - * Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB. + * Get a file preview image. Currently, this method supports preview for image + * files (jpg, png, and gif), other supported formats, like pdf, docs, slides, + * and spreadsheets, will return the file icon image. You can also pass query + * string arguments for cutting and resizing your preview image. Preview is + * supported only for image files smaller than 10MB. * * @param {string} bucketId * @param {string} fileId @@ -3104,8 +3031,8 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk * @param {string} background * @param {ImageFormat} output * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFilePreview(bucketId, fileId, width, height, gravity, quality, borderWidth, borderColor, borderRadius, opacity, rotation, background, output) { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); @@ -3153,22 +3080,20 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get file for view * - * Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header. + * Get a file content by its unique ID. This endpoint is similar to the + * download method but returns with no 'Content-Disposition: attachment' + * header. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFileView(bucketId, fileId) { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); @@ -3183,28 +3108,25 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } } -class Teams { +class Teams extends Service { constructor(client) { - this.client = client; + super(client); } /** * List teams * - * Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results. + * Get a list of all the teams in which the current user is a member. You can + * use the parameters to filter your results. * * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ list(queries, search) { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/teams'; @@ -3216,23 +3138,24 @@ class Teams { payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create team * - * Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team. + * Create a new team. The user who creates the team will automatically be + * assigned as the owner of the team. Only the users with the owner role can + * invite new members, add new owners and delete or update the team. * * @param {string} teamId * @param {string} name * @param {string[]} roles * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ create(teamId, name, roles) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3253,10 +3176,9 @@ class Teams { payload['roles'] = roles; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -3266,8 +3188,8 @@ class Teams { * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ get(teamId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3276,22 +3198,21 @@ class Teams { const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update name * - * Update the team's name by its unique ID. + * Update the team's name by its unique ID. * * @param {string} teamId * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateName(teamId, name) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3306,21 +3227,21 @@ class Teams { payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Delete team * - * Delete a team using its ID. Only team members with the owner role can delete the team. + * Delete a team using its ID. Only team members with the owner role can + * delete the team. * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ delete(teamId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3329,23 +3250,23 @@ class Teams { const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * List team memberships * - * Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint. + * Use this endpoint to list a team's members using the team's ID. All team + * members have read access to this endpoint. * * @param {string} teamId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listMemberships(teamId, queries, search) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3360,23 +3281,35 @@ class Teams { payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create team membership * - * Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appwrite will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn't exist. If initiated from a Server SDK, the new member will be added automatically to the team. - -You only need to provide one of a user ID, email, or phone number. Appwrite will prioritize accepting the user ID > email > phone number if you provide more than one of these parameters. - -Use the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team. - -Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appwrite will accept the only redirect URLs under the domains you have added as a platform on the Appwrite Console. - + * Invite a new member to join your team. Provide an ID for existing users, or + * invite unregistered users using an email or phone number. If initiated from + * a Client SDK, Appwrite will send an email or sms with a link to join the + * team to the invited user, and an account will be created for them if one + * doesn't exist. If initiated from a Server SDK, the new member will be added + * automatically to the team. + * + * You only need to provide one of a user ID, email, or phone number. Appwrite + * will prioritize accepting the user ID > email > phone number if you provide + * more than one of these parameters. + * + * Use the `url` parameter to redirect the user from the invitation email to + * your app. After the user is redirected, use the [Update Team Membership + * Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) + * endpoint to allow the user to accept the invitation to the team. + * + * Please note that to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * Appwrite will accept the only redirect URLs under the domains you have + * added as a platform on the Appwrite Console. + * * * @param {string} teamId * @param {string[]} roles @@ -3386,8 +3319,8 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee * @param {string} url * @param {string} name * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMembership(teamId, roles, email, userId, phone, url, name) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3417,22 +3350,22 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Get team membership * - * Get a team member by the membership unique id. All team members have read access for this resource. + * Get a team member by the membership unique id. All team members have read + * access for this resource. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getMembership(teamId, membershipId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3444,24 +3377,25 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update membership * - * Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https://appwrite.io/docs/permissions). - + * Modify the roles of a team member. Only team members with the owner role + * have access to this endpoint. Learn more about [roles and + * permissions](https://appwrite.io/docs/permissions). + * * * @param {string} teamId * @param {string} membershipId * @param {string[]} roles * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMembership(teamId, membershipId, roles) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3479,22 +3413,23 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee payload['roles'] = roles; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Delete team membership * - * This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted. + * This endpoint allows a user to leave a team or for a team owner to delete + * the membership of any other team member. You can also use this endpoint to + * delete a user membership even if it is not accepted. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteMembership(teamId, membershipId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3506,27 +3441,29 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Update team membership status * - * Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user. - -If the request is successful, a session for the user is automatically created. - + * Use this endpoint to allow a user to accept an invitation to join a team + * after being redirected back to your app from the invitation email received + * by the user. + * + * If the request is successful, a session for the user is automatically + * created. + * * * @param {string} teamId * @param {string} membershipId * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMembershipStatus(teamId, membershipId, userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3550,21 +3487,22 @@ If the request is successful, a session for the user is automatically created. payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Get team preferences * - * Get the team's shared preferences by its unique ID. If a preference doesn't need to be shared by all team members, prefer storing them in [user preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). + * Get the team's shared preferences by its unique ID. If a preference doesn't + * need to be shared by all team members, prefer storing them in [user + * preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getPrefs(teamId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3573,22 +3511,23 @@ If the request is successful, a session for the user is automatically created. const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update preferences * - * Update the team's preferences by its unique ID. The object you pass is stored as is and replaces any previous value. The maximum allowed prefs size is 64kB and throws an error if exceeded. + * Update the team's preferences by its unique ID. The object you pass is + * stored as is and replaces any previous value. The maximum allowed prefs + * size is 64kB and throws an error if exceeded. * * @param {string} teamId * @param {object} prefs * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePrefs(teamId, prefs) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3603,64 +3542,27 @@ If the request is successful, a session for the user is automatically created. payload['prefs'] = prefs; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } } -/** - * Helper class to generate permission strings for resources. - */ class Permission { } -/** - * Generate read permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.read = (role) => { return `read("${role}")`; }; -/** - * Generate write permission string for the provided role. - * - * This is an alias of update, delete, and possibly create. - * Don't use write in combination with update, delete, or create. - * - * @param {string} role - * @returns {string} - */ Permission.write = (role) => { return `write("${role}")`; }; -/** - * Generate create permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.create = (role) => { return `create("${role}")`; }; -/** - * Generate update permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.update = (role) => { return `update("${role}")`; }; -/** - * Generate delete permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.delete = (role) => { return `delete("${role}")`; }; @@ -3760,25 +3662,10 @@ class Role { } var _a, _ID_hexTimestamp; -/** - * Helper class to generate ID strings for resources. - */ class ID { - /** - * Uses the provided ID as the ID for the resource. - * - * @param {string} id - * @returns {string} - */ static custom(id) { return id; } - /** - * Have Appwrite generate a unique ID for you. - * - * @param {number} padding. Default is 7. - * @returns {string} - */ static unique(padding = 7) { // Generate a unique ID with padding to have a longer ID const baseId = __classPrivateFieldGet(ID, _a, "m", _ID_hexTimestamp).call(ID); @@ -3878,7 +3765,7 @@ var CreditCard; CreditCard["AmericanExpress"] = "amex"; CreditCard["Argencard"] = "argencard"; CreditCard["Cabal"] = "cabal"; - CreditCard["Cencosud"] = "cencosud"; + CreditCard["Consosud"] = "censosud"; CreditCard["DinersClub"] = "diners"; CreditCard["Discover"] = "discover"; CreditCard["Elo"] = "elo"; @@ -4036,7 +3923,6 @@ var Flag; Flag["Palau"] = "pw"; Flag["PapuaNewGuinea"] = "pg"; Flag["Poland"] = "pl"; - Flag["FrenchPolynesia"] = "pf"; Flag["NorthKorea"] = "kp"; Flag["Portugal"] = "pt"; Flag["Paraguay"] = "py"; diff --git a/node_modules/appwrite/dist/esm/sdk.js.map b/node_modules/appwrite/dist/esm/sdk.js.map index fc4e78a..5390c01 100644 --- a/node_modules/appwrite/dist/esm/sdk.js.map +++ b/node_modules/appwrite/dist/esm/sdk.js.map @@ -1 +1 @@ -{"version":3,"file":"sdk.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/query.ts","../../src/client.ts","../../src/service.ts","../../src/services/account.ts","../../src/services/avatars.ts","../../src/services/databases.ts","../../src/services/functions.ts","../../src/services/graphql.ts","../../src/services/locale.ts","../../src/services/messaging.ts","../../src/services/storage.ts","../../src/services/teams.ts","../../src/permission.ts","../../src/role.ts","../../src/id.ts","../../src/enums/authenticator-type.ts","../../src/enums/authentication-factor.ts","../../src/enums/o-auth-provider.ts","../../src/enums/browser.ts","../../src/enums/credit-card.ts","../../src/enums/flag.ts","../../src/enums/execution-method.ts","../../src/enums/image-gravity.ts","../../src/enums/image-format.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","type QueryTypesSingle = string | number | boolean;\nexport type QueryTypesList = string[] | number[] | boolean[] | Query[];\nexport type QueryTypes = QueryTypesSingle | QueryTypesList;\ntype AttributesTypes = string | string[];\n\n/**\n * Helper class to generate query strings.\n */\nexport class Query {\n method: string;\n attribute: AttributesTypes | undefined;\n values: QueryTypesList | undefined;\n\n /**\n * Constructor for Query class.\n *\n * @param {string} method\n * @param {AttributesTypes} attribute\n * @param {QueryTypes} values\n */\n constructor(\n method: string,\n attribute?: AttributesTypes,\n values?: QueryTypes\n ) {\n this.method = method;\n this.attribute = attribute;\n\n if (values !== undefined) {\n if (Array.isArray(values)) {\n this.values = values;\n } else {\n this.values = [values] as QueryTypesList;\n }\n }\n }\n\n /**\n * Convert the query object to a JSON string.\n *\n * @returns {string}\n */\n toString(): string {\n return JSON.stringify({\n method: this.method,\n attribute: this.attribute,\n values: this.values,\n });\n }\n\n /**\n * Filter resources where attribute is equal to value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static equal = (attribute: string, value: QueryTypes): string =>\n new Query(\"equal\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is not equal to value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static notEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"notEqual\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is less than value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static lessThan = (attribute: string, value: QueryTypes): string =>\n new Query(\"lessThan\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is less than or equal to value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static lessThanEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"lessThanEqual\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is greater than value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static greaterThan = (attribute: string, value: QueryTypes): string =>\n new Query(\"greaterThan\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is greater than or equal to value.\n *\n * @param {string} attribute\n * @param {QueryTypes} value\n * @returns {string}\n */\n static greaterThanEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"greaterThanEqual\", attribute, value).toString();\n\n /**\n * Filter resources where attribute is null.\n *\n * @param {string} attribute\n * @returns {string}\n */\n static isNull = (attribute: string): string =>\n new Query(\"isNull\", attribute).toString();\n\n /**\n * Filter resources where attribute is not null.\n *\n * @param {string} attribute\n * @returns {string}\n */\n static isNotNull = (attribute: string): string =>\n new Query(\"isNotNull\", attribute).toString();\n\n /**\n * Filter resources where attribute is between start and end (inclusive).\n *\n * @param {string} attribute\n * @param {string | number} start\n * @param {string | number} end\n * @returns {string}\n */\n static between = (attribute: string, start: string | number, end: string | number): string =>\n new Query(\"between\", attribute, [start, end] as QueryTypesList).toString();\n\n /**\n * Filter resources where attribute starts with value.\n *\n * @param {string} attribute\n * @param {string} value\n * @returns {string}\n */\n static startsWith = (attribute: string, value: string): string =>\n new Query(\"startsWith\", attribute, value).toString();\n\n /**\n * Filter resources where attribute ends with value.\n *\n * @param {string} attribute\n * @param {string} value\n * @returns {string}\n */\n static endsWith = (attribute: string, value: string): string =>\n new Query(\"endsWith\", attribute, value).toString();\n\n /**\n * Specify which attributes should be returned by the API call.\n *\n * @param {string[]} attributes\n * @returns {string}\n */\n static select = (attributes: string[]): string =>\n new Query(\"select\", undefined, attributes).toString();\n\n /**\n * Filter resources by searching attribute for value.\n * A fulltext index on attribute is required for this query to work.\n *\n * @param {string} attribute\n * @param {string} value\n * @returns {string}\n */\n static search = (attribute: string, value: string): string =>\n new Query(\"search\", attribute, value).toString();\n\n /**\n * Sort results by attribute descending.\n *\n * @param {string} attribute\n * @returns {string}\n */\n static orderDesc = (attribute: string): string =>\n new Query(\"orderDesc\", attribute).toString();\n\n /**\n * Sort results by attribute ascending.\n *\n * @param {string} attribute\n * @returns {string}\n */\n static orderAsc = (attribute: string): string =>\n new Query(\"orderAsc\", attribute).toString();\n\n /**\n * Return results after documentId.\n *\n * @param {string} documentId\n * @returns {string}\n */\n static cursorAfter = (documentId: string): string =>\n new Query(\"cursorAfter\", undefined, documentId).toString();\n\n /**\n * Return results before documentId.\n *\n * @param {string} documentId\n * @returns {string}\n */\n static cursorBefore = (documentId: string): string =>\n new Query(\"cursorBefore\", undefined, documentId).toString();\n\n /**\n * Return only limit results.\n *\n * @param {number} limit\n * @returns {string}\n */\n static limit = (limit: number): string =>\n new Query(\"limit\", undefined, limit).toString();\n\n /**\n * Filter resources by skipping the first offset results.\n *\n * @param {number} offset\n * @returns {string}\n */\n static offset = (offset: number): string =>\n new Query(\"offset\", undefined, offset).toString();\n\n /**\n * Filter resources where attribute contains the specified value.\n *\n * @param {string} attribute\n * @param {string | string[]} value\n * @returns {string}\n */\n static contains = (attribute: string, value: string | string[]): string =>\n new Query(\"contains\", attribute, value).toString();\n\n /**\n * Combine multiple queries using logical OR operator.\n *\n * @param {string[]} queries\n * @returns {string}\n */\n static or = (queries: string[]) =>\n new Query(\"or\", undefined, queries.map((query) => JSON.parse(query))).toString();\n\n /**\n * Combine multiple queries using logical AND operator.\n *\n * @param {string[]} queries\n * @returns {string}\n */\n static and = (queries: string[]) =>\n new Query(\"and\", undefined, queries.map((query) => JSON.parse(query))).toString();\n}\n","import { Models } from './models';\n\n/**\n * Payload type representing a key-value pair with string keys and any values.\n */\ntype Payload = {\n [key: string]: any;\n}\n\n/**\n * Headers type representing a key-value pair with string keys and string values.\n */\ntype Headers = {\n [key: string]: string;\n}\n\n/**\n * Realtime response structure with different types.\n */\ntype RealtimeResponse = {\n /**\n * Type of the response: 'error', 'event', 'connected', or 'response'.\n */\n type: 'error' | 'event' | 'connected' | 'response';\n\n /**\n * Data associated with the response based on the response type.\n */\n data: RealtimeResponseAuthenticated | RealtimeResponseConnected | RealtimeResponseError | RealtimeResponseEvent;\n}\n\n/**\n * Realtime request structure for authentication.\n */\ntype RealtimeRequest = {\n /**\n * Type of the request: 'authentication'.\n */\n type: 'authentication';\n\n /**\n * Data required for authentication.\n */\n data: RealtimeRequestAuthenticate;\n}\n\n/**\n * Realtime event response structure with generic payload type.\n */\ntype RealtimeResponseEvent = {\n /**\n * List of event names associated with the response.\n */\n events: string[];\n\n /**\n * List of channel names associated with the response.\n */\n channels: string[];\n\n /**\n * Timestamp indicating the time of the event.\n */\n timestamp: number;\n\n /**\n * Payload containing event-specific data.\n */\n payload: T;\n}\n\n/**\n * Realtime response structure for errors.\n */\ntype RealtimeResponseError = {\n /**\n * Numeric error code indicating the type of error.\n */\n code: number;\n\n /**\n * Error message describing the encountered error.\n */\n message: string;\n}\n\n/**\n * Realtime response structure for a successful connection.\n */\ntype RealtimeResponseConnected = {\n /**\n * List of channels the user is connected to.\n */\n channels: string[];\n\n /**\n * User object representing the connected user (optional).\n */\n user?: object;\n}\n\n/**\n * Realtime response structure for authenticated connections.\n */\ntype RealtimeResponseAuthenticated = {\n /**\n * Destination channel for the response.\n */\n to: string;\n\n /**\n * Boolean indicating the success of the authentication process.\n */\n success: boolean;\n\n /**\n * User object representing the authenticated user.\n */\n user: object;\n}\n\n/**\n * Realtime request structure for authentication.\n */\ntype RealtimeRequestAuthenticate = {\n /**\n * Session identifier for authentication.\n */\n session: string;\n}\n\n/**\n * Realtime interface representing the structure of a realtime communication object.\n */\ntype Realtime = {\n /**\n * WebSocket instance for realtime communication.\n */\n socket?: WebSocket;\n\n /**\n * Timeout duration for communication operations.\n */\n timeout?: number;\n\n /**\n * URL for establishing the WebSocket connection.\n */\n url?: string;\n\n /**\n * Last received message from the realtime server.\n */\n lastMessage?: RealtimeResponse;\n\n /**\n * Set of channel names the client is subscribed to.\n */\n channels: Set;\n\n /**\n * Map of subscriptions containing channel names and corresponding callback functions.\n */\n subscriptions: Map) => void\n }>;\n\n /**\n * Counter for managing subscriptions.\n */\n subscriptionsCounter: number;\n\n /**\n * Boolean indicating whether automatic reconnection is enabled.\n */\n reconnect: boolean;\n\n /**\n * Number of reconnection attempts made.\n */\n reconnectAttempts: number;\n\n /**\n * Function to get the timeout duration for communication operations.\n */\n getTimeout: () => number;\n\n /**\n * Function to establish a WebSocket connection.\n */\n connect: () => void;\n\n /**\n * Function to create a new WebSocket instance.\n */\n createSocket: () => void;\n\n /**\n * Function to clean up resources associated with specified channels.\n *\n * @param {string[]} channels - List of channel names to clean up.\n */\n cleanUp: (channels: string[]) => void;\n\n /**\n * Function to handle incoming messages from the WebSocket connection.\n *\n * @param {MessageEvent} event - Event containing the received message.\n */\n onMessage: (event: MessageEvent) => void;\n}\n\n/**\n * Type representing upload progress information.\n */\ntype UploadProgress = {\n /**\n * Identifier for the upload progress.\n */\n $id: string;\n\n /**\n * Current progress of the upload (in percentage).\n */\n progress: number;\n\n /**\n * Total size uploaded (in bytes) during the upload process.\n */\n sizeUploaded: number;\n\n /**\n * Total number of chunks that need to be uploaded.\n */\n chunksTotal: number;\n\n /**\n * Number of chunks that have been successfully uploaded.\n */\n chunksUploaded: number;\n}\n\n/**\n * Exception thrown by the package\n */\nclass AppwriteException extends Error {\n /**\n * The error code associated with the exception.\n */\n code: number;\n\n /**\n * The response string associated with the exception.\n */\n response: string;\n\n /**\n * Error type.\n * See [Error Types](https://appwrite.io/docs/response-codes#errorTypes) for more information.\n */\n type: string;\n\n /**\n * Initializes a Appwrite Exception.\n *\n * @param {string} message - The error message.\n * @param {number} code - The error code. Default is 0.\n * @param {string} type - The error type. Default is an empty string.\n * @param {string} response - The response string. Default is an empty string.\n */\n constructor(message: string, code: number = 0, type: string = '', response: string = '') {\n super(message);\n this.name = 'AppwriteException';\n this.message = message;\n this.code = code;\n this.type = type;\n this.response = response;\n }\n}\n\n/**\n * Client that handles requests to Appwrite\n */\nclass Client {\n static CHUNK_SIZE = 1024 * 1024 * 5;\n\n /**\n * Holds configuration such as project.\n */\n config = {\n endpoint: 'https://cloud.appwrite.io/v1',\n endpointRealtime: '',\n project: '',\n jwt: '',\n locale: '',\n session: '',\n };\n /**\n * Custom headers for API requests.\n */\n headers: Headers = {\n 'x-sdk-name': 'Web',\n 'x-sdk-platform': 'client',\n 'x-sdk-language': 'web',\n 'x-sdk-version': '16.0.2',\n 'X-Appwrite-Response-Format': '1.6.0',\n };\n\n /**\n * Set Endpoint\n *\n * Your project endpoint\n *\n * @param {string} endpoint\n *\n * @returns {this}\n */\n setEndpoint(endpoint: string): this {\n this.config.endpoint = endpoint;\n this.config.endpointRealtime = this.config.endpointRealtime || this.config.endpoint.replace('https://', 'wss://').replace('http://', 'ws://');\n\n return this;\n }\n\n /**\n * Set Realtime Endpoint\n *\n * @param {string} endpointRealtime\n *\n * @returns {this}\n */\n setEndpointRealtime(endpointRealtime: string): this {\n this.config.endpointRealtime = endpointRealtime;\n\n return this;\n }\n\n /**\n * Set Project\n *\n * Your project ID\n *\n * @param value string\n *\n * @return {this}\n */\n setProject(value: string): this {\n this.headers['X-Appwrite-Project'] = value;\n this.config.project = value;\n return this;\n }\n /**\n * Set JWT\n *\n * Your secret JSON Web Token\n *\n * @param value string\n *\n * @return {this}\n */\n setJWT(value: string): this {\n this.headers['X-Appwrite-JWT'] = value;\n this.config.jwt = value;\n return this;\n }\n /**\n * Set Locale\n *\n * @param value string\n *\n * @return {this}\n */\n setLocale(value: string): this {\n this.headers['X-Appwrite-Locale'] = value;\n this.config.locale = value;\n return this;\n }\n /**\n * Set Session\n *\n * The user session to authenticate with\n *\n * @param value string\n *\n * @return {this}\n */\n setSession(value: string): this {\n this.headers['X-Appwrite-Session'] = value;\n this.config.session = value;\n return this;\n }\n\n private realtime: Realtime = {\n socket: undefined,\n timeout: undefined,\n url: '',\n channels: new Set(),\n subscriptions: new Map(),\n subscriptionsCounter: 0,\n reconnect: true,\n reconnectAttempts: 0,\n lastMessage: undefined,\n connect: () => {\n clearTimeout(this.realtime.timeout);\n this.realtime.timeout = window?.setTimeout(() => {\n this.realtime.createSocket();\n }, 50);\n },\n getTimeout: () => {\n switch (true) {\n case this.realtime.reconnectAttempts < 5:\n return 1000;\n case this.realtime.reconnectAttempts < 15:\n return 5000;\n case this.realtime.reconnectAttempts < 100:\n return 10_000;\n default:\n return 60_000;\n }\n },\n createSocket: () => {\n if (this.realtime.channels.size < 1) {\n this.realtime.reconnect = false;\n this.realtime.socket?.close();\n return;\n }\n\n const channels = new URLSearchParams();\n channels.set('project', this.config.project);\n this.realtime.channels.forEach(channel => {\n channels.append('channels[]', channel);\n });\n\n const url = this.config.endpointRealtime + '/realtime?' + channels.toString();\n\n if (\n url !== this.realtime.url || // Check if URL is present\n !this.realtime.socket || // Check if WebSocket has not been created\n this.realtime.socket?.readyState > WebSocket.OPEN // Check if WebSocket is CLOSING (3) or CLOSED (4)\n ) {\n if (\n this.realtime.socket &&\n this.realtime.socket?.readyState < WebSocket.CLOSING // Close WebSocket if it is CONNECTING (0) or OPEN (1)\n ) {\n this.realtime.reconnect = false;\n this.realtime.socket.close();\n }\n\n this.realtime.url = url;\n this.realtime.socket = new WebSocket(url);\n this.realtime.socket.addEventListener('message', this.realtime.onMessage);\n this.realtime.socket.addEventListener('open', _event => {\n this.realtime.reconnectAttempts = 0;\n });\n this.realtime.socket.addEventListener('close', event => {\n if (\n !this.realtime.reconnect ||\n (\n this.realtime?.lastMessage?.type === 'error' && // Check if last message was of type error\n (this.realtime?.lastMessage.data).code === 1008 // Check for policy violation 1008\n )\n ) {\n this.realtime.reconnect = true;\n return;\n }\n\n const timeout = this.realtime.getTimeout();\n console.error(`Realtime got disconnected. Reconnect will be attempted in ${timeout / 1000} seconds.`, event.reason);\n\n setTimeout(() => {\n this.realtime.reconnectAttempts++;\n this.realtime.createSocket();\n }, timeout);\n })\n }\n },\n onMessage: (event) => {\n try {\n const message: RealtimeResponse = JSON.parse(event.data);\n this.realtime.lastMessage = message;\n switch (message.type) {\n case 'connected':\n const cookie = JSON.parse(window.localStorage.getItem('cookieFallback') ?? '{}');\n const session = cookie?.[`a_session_${this.config.project}`];\n const messageData = message.data;\n\n if (session && !messageData.user) {\n this.realtime.socket?.send(JSON.stringify({\n type: 'authentication',\n data: {\n session\n }\n }));\n }\n break;\n case 'event':\n let data = >message.data;\n if (data?.channels) {\n const isSubscribed = data.channels.some(channel => this.realtime.channels.has(channel));\n if (!isSubscribed) return;\n this.realtime.subscriptions.forEach(subscription => {\n if (data.channels.some(channel => subscription.channels.includes(channel))) {\n setTimeout(() => subscription.callback(data));\n }\n })\n }\n break;\n case 'error':\n throw message.data;\n default:\n break;\n }\n } catch (e) {\n console.error(e);\n }\n },\n cleanUp: channels => {\n this.realtime.channels.forEach(channel => {\n if (channels.includes(channel)) {\n let found = Array.from(this.realtime.subscriptions).some(([_key, subscription] )=> {\n return subscription.channels.includes(channel);\n })\n\n if (!found) {\n this.realtime.channels.delete(channel);\n }\n }\n })\n }\n }\n\n /**\n * Subscribes to Appwrite events and passes you the payload in realtime.\n *\n * @param {string|string[]} channels\n * Channel to subscribe - pass a single channel as a string or multiple with an array of strings.\n *\n * Possible channels are:\n * - account\n * - collections\n * - collections.[ID]\n * - collections.[ID].documents\n * - documents\n * - documents.[ID]\n * - files\n * - files.[ID]\n * - executions\n * - executions.[ID]\n * - functions.[ID]\n * - teams\n * - teams.[ID]\n * - memberships\n * - memberships.[ID]\n * @param {(payload: RealtimeMessage) => void} callback Is called on every realtime update.\n * @returns {() => void} Unsubscribes from events.\n */\n subscribe(channels: string | string[], callback: (payload: RealtimeResponseEvent) => void): () => void {\n let channelArray = typeof channels === 'string' ? [channels] : channels;\n channelArray.forEach(channel => this.realtime.channels.add(channel));\n\n const counter = this.realtime.subscriptionsCounter++;\n this.realtime.subscriptions.set(counter, {\n channels: channelArray,\n callback\n });\n\n this.realtime.connect();\n\n return () => {\n this.realtime.subscriptions.delete(counter);\n this.realtime.cleanUp(channelArray);\n this.realtime.connect();\n }\n }\n\n prepareRequest(method: string, url: URL, headers: Headers = {}, params: Payload = {}): { uri: string, options: RequestInit } {\n method = method.toUpperCase();\n\n headers = Object.assign({}, this.headers, headers);\n\n if (typeof window !== 'undefined' && window.localStorage) {\n const cookieFallback = window.localStorage.getItem('cookieFallback');\n if (cookieFallback) {\n headers['X-Fallback-Cookies'] = cookieFallback;\n }\n }\n\n let options: RequestInit = {\n method,\n headers,\n credentials: 'include',\n };\n\n if (method === 'GET') {\n for (const [key, value] of Object.entries(Client.flatten(params))) {\n url.searchParams.append(key, value);\n }\n } else {\n switch (headers['content-type']) {\n case 'application/json':\n options.body = JSON.stringify(params);\n break;\n\n case 'multipart/form-data':\n const formData = new FormData();\n\n for (const [key, value] of Object.entries(params)) {\n if (value instanceof File) {\n formData.append(key, value, value.name);\n } else if (Array.isArray(value)) {\n for (const nestedValue of value) {\n formData.append(`${key}[]`, nestedValue);\n }\n } else {\n formData.append(key, value);\n }\n }\n\n options.body = formData;\n delete headers['content-type'];\n break;\n }\n }\n\n return { uri: url.toString(), options };\n }\n\n async chunkedUpload(method: string, url: URL, headers: Headers = {}, originalPayload: Payload = {}, onProgress: (progress: UploadProgress) => void) {\n const file = Object.values(originalPayload).find((value) => value instanceof File);\n\n if (file.size <= Client.CHUNK_SIZE) {\n return await this.call(method, url, headers, originalPayload);\n }\n\n let start = 0;\n let response = null;\n\n while (start < file.size) {\n let end = start + Client.CHUNK_SIZE; // Prepare end for the next chunk\n if (end >= file.size) {\n end = file.size; // Adjust for the last chunk to include the last byte\n }\n\n headers['content-range'] = `bytes ${start}-${end-1}/${file.size}`;\n const chunk = file.slice(start, end);\n\n let payload = { ...originalPayload, file: new File([chunk], file.name)};\n\n response = await this.call(method, url, headers, payload);\n\n if (onProgress && typeof onProgress === 'function') {\n onProgress({\n $id: response.$id,\n progress: Math.round((end / file.size) * 100),\n sizeUploaded: end,\n chunksTotal: Math.ceil(file.size / Client.CHUNK_SIZE),\n chunksUploaded: Math.ceil(end / Client.CHUNK_SIZE)\n });\n }\n\n if (response && response.$id) {\n headers['x-appwrite-id'] = response.$id;\n }\n\n start = end;\n }\n\n return response;\n }\n\n async call(method: string, url: URL, headers: Headers = {}, params: Payload = {}, responseType = 'json'): Promise {\n const { uri, options } = this.prepareRequest(method, url, headers, params);\n\n let data: any = null;\n\n const response = await fetch(uri, options);\n\n const warnings = response.headers.get('x-appwrite-warning');\n if (warnings) {\n warnings.split(';').forEach((warning: string) => console.warn('Warning: ' + warning));\n }\n\n if (response.headers.get('content-type')?.includes('application/json')) {\n data = await response.json();\n } else if (responseType === 'arrayBuffer') {\n data = await response.arrayBuffer();\n } else {\n data = {\n message: await response.text()\n };\n }\n\n if (400 <= response.status) {\n throw new AppwriteException(data?.message, response.status, data?.type, data);\n }\n\n const cookieFallback = response.headers.get('X-Fallback-Cookies');\n\n if (typeof window !== 'undefined' && window.localStorage && cookieFallback) {\n window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.');\n window.localStorage.setItem('cookieFallback', cookieFallback);\n }\n\n return data;\n }\n\n static flatten(data: Payload, prefix = ''): Payload {\n let output: Payload = {};\n\n for (const [key, value] of Object.entries(data)) {\n let finalKey = prefix ? prefix + '[' + key +']' : key;\n if (Array.isArray(value)) {\n output = { ...output, ...Client.flatten(value, finalKey) };\n } else {\n output[finalKey] = value;\n }\n }\n\n return output;\n }\n}\n\nexport { Client, AppwriteException };\nexport { Query } from './query';\nexport type { Models, Payload, UploadProgress };\nexport type { RealtimeResponseEvent };\nexport type { QueryTypes, QueryTypesList } from './query';\n","import { Client } from './client';\nimport type { Payload } from './client';\n\nexport class Service {\n /**\n * The size for chunked uploads in bytes.\n */\n static CHUNK_SIZE = 5*1024*1024; // 5MB\n\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n static flatten(data: Payload, prefix = ''): Payload {\n let output: Payload = {};\n\n for (const [key, value] of Object.entries(data)) {\n let finalKey = prefix ? prefix + '[' + key +']' : key;\n if (Array.isArray(value)) {\n output = { ...output, ...Service.flatten(value, finalKey) };\n } else {\n output[finalKey] = value;\n }\n }\n\n return output;\n }\n}","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\nimport { AuthenticatorType } from '../enums/authenticator-type';\nimport { AuthenticationFactor } from '../enums/authentication-factor';\nimport { OAuthProvider } from '../enums/o-auth-provider';\n\nexport class Account {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get account\n *\n * Get the currently logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async get(): Promise> {\n const apiPath = '/account';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create account\n *\n * Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession).\n *\n * @param {string} userId\n * @param {string} email\n * @param {string} password\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async create(userId: string, email: string, password: string, name?: string): Promise> {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update email\n *\n * Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n\n *\n * @param {string} email\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateEmail(email: string, password: string): Promise> {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account/email';\n const payload: Payload = {};\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List Identities\n *\n * Get the list of identities for the currently logged in user.\n *\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listIdentities(queries?: string[]): Promise {\n const apiPath = '/account/identities';\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete identity\n *\n * Delete an identity by its unique ID.\n *\n * @param {string} identityId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteIdentity(identityId: string): Promise<{}> {\n if (typeof identityId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identityId\"');\n }\n const apiPath = '/account/identities/{identityId}'.replace('{identityId}', identityId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create JWT\n *\n * Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createJWT(): Promise {\n const apiPath = '/account/jwts';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List logs\n *\n * Get the list of latest security activity logs for the currently logged in user. Each log returns user IP address, location and date and time of log.\n *\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listLogs(queries?: string[]): Promise {\n const apiPath = '/account/logs';\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update MFA\n *\n * Enable or disable MFA on an account.\n *\n * @param {boolean} mfa\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateMFA(mfa: boolean): Promise> {\n if (typeof mfa === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"mfa\"');\n }\n const apiPath = '/account/mfa';\n const payload: Payload = {};\n if (typeof mfa !== 'undefined') {\n payload['mfa'] = mfa;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create Authenticator\n *\n * Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](/docs/references/cloud/client-web/account#updateMfaAuthenticator) method.\n *\n * @param {AuthenticatorType} type\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaAuthenticator(type: AuthenticatorType): Promise {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Verify Authenticator\n *\n * Verify an authenticator app after adding it using the [add authenticator](/docs/references/cloud/client-web/account#createMfaAuthenticator) method.\n *\n * @param {AuthenticatorType} type\n * @param {string} otp\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateMfaAuthenticator(type: AuthenticatorType, otp: string): Promise> {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n if (typeof otp === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"otp\"');\n }\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n if (typeof otp !== 'undefined') {\n payload['otp'] = otp;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete Authenticator\n *\n * Delete an authenticator for a user by ID.\n *\n * @param {AuthenticatorType} type\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteMfaAuthenticator(type: AuthenticatorType): Promise<{}> {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create MFA Challenge\n *\n * Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) method.\n *\n * @param {AuthenticationFactor} factor\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaChallenge(factor: AuthenticationFactor): Promise {\n if (typeof factor === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"factor\"');\n }\n const apiPath = '/account/mfa/challenge';\n const payload: Payload = {};\n if (typeof factor !== 'undefined') {\n payload['factor'] = factor;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create MFA Challenge (confirmation)\n *\n * Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method.\n *\n * @param {string} challengeId\n * @param {string} otp\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async updateMfaChallenge(challengeId: string, otp: string): Promise<{}> {\n if (typeof challengeId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"challengeId\"');\n }\n if (typeof otp === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"otp\"');\n }\n const apiPath = '/account/mfa/challenge';\n const payload: Payload = {};\n if (typeof challengeId !== 'undefined') {\n payload['challengeId'] = challengeId;\n }\n if (typeof otp !== 'undefined') {\n payload['otp'] = otp;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List Factors\n *\n * List the factors available on the account to be used as a MFA challange.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listMfaFactors(): Promise {\n const apiPath = '/account/mfa/factors';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get MFA Recovery Codes\n *\n * Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create MFA Recovery Codes\n *\n * Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Regenerate MFA Recovery Codes\n *\n * Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update name\n *\n * Update currently logged in user account name.\n *\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateName(name: string): Promise> {\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n const apiPath = '/account/name';\n const payload: Payload = {};\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update password\n *\n * Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.\n *\n * @param {string} password\n * @param {string} oldPassword\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updatePassword(password: string, oldPassword?: string): Promise> {\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account/password';\n const payload: Payload = {};\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n if (typeof oldPassword !== 'undefined') {\n payload['oldPassword'] = oldPassword;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update phone\n *\n * Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) endpoint to send a confirmation SMS.\n *\n * @param {string} phone\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updatePhone(phone: string, password: string): Promise> {\n if (typeof phone === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"phone\"');\n }\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account/phone';\n const payload: Payload = {};\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get account preferences\n *\n * Get the preferences as a key-value object for the currently logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getPrefs(): Promise {\n const apiPath = '/account/prefs';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update preferences\n *\n * Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.\n *\n * @param {Partial} prefs\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updatePrefs(prefs: Partial): Promise> {\n if (typeof prefs === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"prefs\"');\n }\n const apiPath = '/account/prefs';\n const payload: Payload = {};\n if (typeof prefs !== 'undefined') {\n payload['prefs'] = prefs;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create password recovery\n *\n * Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.\n *\n * @param {string} email\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createRecovery(email: string, url: string): Promise {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n const apiPath = '/account/recovery';\n const payload: Payload = {};\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create password recovery (confirmation)\n *\n * Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n *\n * @param {string} userId\n * @param {string} secret\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateRecovery(userId: string, secret: string, password: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account/recovery';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List sessions\n *\n * Get the list of active sessions across different devices for the currently logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listSessions(): Promise {\n const apiPath = '/account/sessions';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete sessions\n *\n * Delete all sessions from the user account and remove any sessions cookies from the end client.\n *\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteSessions(): Promise<{}> {\n const apiPath = '/account/sessions';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create anonymous session\n *\n * Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) or create an [OAuth2 session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session).\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createAnonymousSession(): Promise {\n const apiPath = '/account/sessions/anonymous';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create email password session\n *\n * Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} email\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createEmailPasswordSession(email: string, password: string): Promise {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n const apiPath = '/account/sessions/email';\n const payload: Payload = {};\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update magic URL session\n *\n * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMagicURLSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/account/sessions/magic-url';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create OAuth2 session\n *\n * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n\n *\n * @param {OAuthProvider} provider\n * @param {string} success\n * @param {string} failure\n * @param {string[]} scopes\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createOAuth2Session(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): Promise {\n if (typeof provider === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"provider\"');\n }\n const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider);\n const payload: Payload = {};\n if (typeof success !== 'undefined') {\n payload['success'] = success;\n }\n if (typeof failure !== 'undefined') {\n payload['failure'] = failure;\n }\n if (typeof scopes !== 'undefined') {\n payload['scopes'] = scopes;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n if (typeof window !== 'undefined' && window?.location) {\n window.location.href = uri.toString();\n return;\n } else {\n return uri.toString();\n }\n }\n /**\n * Update phone session\n *\n * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePhoneSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/account/sessions/phone';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create session\n *\n * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/account/sessions/token';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get session\n *\n * Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getSession(sessionId: string): Promise {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update session\n *\n * Use this endpoint to extend a session's length. Extending a session is useful when session expiry is short. If the session was created using an OAuth provider, this endpoint refreshes the access token from the provider.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateSession(sessionId: string): Promise {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete session\n *\n * Logout the user. Use 'current' as the session ID to logout on this device, use a session ID to logout on another device. If you're looking to logout the user on all devices, use [Delete Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) instead.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteSession(sessionId: string): Promise<{}> {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update status\n *\n * Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.\n *\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateStatus(): Promise> {\n const apiPath = '/account/status';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create push target\n *\n *\n * @param {string} targetId\n * @param {string} identifier\n * @param {string} providerId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPushTarget(targetId: string, identifier: string, providerId?: string): Promise {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n if (typeof identifier === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identifier\"');\n }\n const apiPath = '/account/targets/push';\n const payload: Payload = {};\n if (typeof targetId !== 'undefined') {\n payload['targetId'] = targetId;\n }\n if (typeof identifier !== 'undefined') {\n payload['identifier'] = identifier;\n }\n if (typeof providerId !== 'undefined') {\n payload['providerId'] = providerId;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update push target\n *\n *\n * @param {string} targetId\n * @param {string} identifier\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePushTarget(targetId: string, identifier: string): Promise {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n if (typeof identifier === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identifier\"');\n }\n const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId);\n const payload: Payload = {};\n if (typeof identifier !== 'undefined') {\n payload['identifier'] = identifier;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete push target\n *\n *\n * @param {string} targetId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deletePushTarget(targetId: string): Promise<{}> {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create email token (OTP)\n *\n * Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} userId\n * @param {string} email\n * @param {boolean} phrase\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createEmailToken(userId: string, email: string, phrase?: boolean): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n const apiPath = '/account/tokens/email';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof phrase !== 'undefined') {\n payload['phrase'] = phrase;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create magic URL token\n *\n * Sends the user an email with a secret key for creating a session. If the provided user ID has not been registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n\n *\n * @param {string} userId\n * @param {string} email\n * @param {string} url\n * @param {boolean} phrase\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMagicURLToken(userId: string, email: string, url?: string, phrase?: boolean): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n const apiPath = '/account/tokens/magic-url';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n if (typeof phrase !== 'undefined') {\n payload['phrase'] = phrase;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create OAuth2 token\n *\n * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. \n\nIf authentication succeeds, `userId` and `secret` of a token will be appended to the success URL as query parameters. These can be used to create a new session using the [Create session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {OAuthProvider} provider\n * @param {string} success\n * @param {string} failure\n * @param {string[]} scopes\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createOAuth2Token(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): Promise {\n if (typeof provider === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"provider\"');\n }\n const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider);\n const payload: Payload = {};\n if (typeof success !== 'undefined') {\n payload['success'] = success;\n }\n if (typeof failure !== 'undefined') {\n payload['failure'] = failure;\n }\n if (typeof scopes !== 'undefined') {\n payload['scopes'] = scopes;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n if (typeof window !== 'undefined' && window?.location) {\n window.location.href = uri.toString();\n return;\n } else {\n return uri.toString();\n }\n }\n /**\n * Create phone token\n *\n * Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} userId\n * @param {string} phone\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPhoneToken(userId: string, phone: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof phone === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"phone\"');\n }\n const apiPath = '/account/tokens/phone';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create email verification\n *\n * Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n\n *\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createVerification(url: string): Promise {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n const apiPath = '/account/verification';\n const payload: Payload = {};\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create email verification (confirmation)\n *\n * Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateVerification(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/account/verification';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create phone verification\n *\n * Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) endpoint. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPhoneVerification(): Promise {\n const apiPath = '/account/verification/phone';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update phone verification (confirmation)\n *\n * Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePhoneVerification(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/account/verification/phone';\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\nimport { Browser } from '../enums/browser';\nimport { CreditCard } from '../enums/credit-card';\nimport { Flag } from '../enums/flag';\n\nexport class Avatars {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get browser icon\n *\n * You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n *\n * @param {Browser} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {string}\n */\n getBrowser(code: Browser, width?: number, height?: number, quality?: number): string {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n const apiPath = '/avatars/browsers/{code}'.replace('{code}', code);\n const payload: Payload = {};\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get credit card icon\n *\n * The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n\n *\n * @param {CreditCard} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {string}\n */\n getCreditCard(code: CreditCard, width?: number, height?: number, quality?: number): string {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n const apiPath = '/avatars/credit-cards/{code}'.replace('{code}', code);\n const payload: Payload = {};\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get favicon\n *\n * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n\nThis endpoint does not follow HTTP redirects.\n *\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {string}\n */\n getFavicon(url: string): string {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n const apiPath = '/avatars/favicon';\n const payload: Payload = {};\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get country flag\n *\n * You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n\n *\n * @param {Flag} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {string}\n */\n getFlag(code: Flag, width?: number, height?: number, quality?: number): string {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n const apiPath = '/avatars/flags/{code}'.replace('{code}', code);\n const payload: Payload = {};\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get image from URL\n *\n * Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n\nThis endpoint does not follow HTTP redirects.\n *\n * @param {string} url\n * @param {number} width\n * @param {number} height\n * @throws {AppwriteException}\n * @returns {string}\n */\n getImage(url: string, width?: number, height?: number): string {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n const apiPath = '/avatars/image';\n const payload: Payload = {};\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get user initials\n *\n * Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n\n *\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @param {string} background\n * @throws {AppwriteException}\n * @returns {string}\n */\n getInitials(name?: string, width?: number, height?: number, background?: string): string {\n const apiPath = '/avatars/initials';\n const payload: Payload = {};\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n if (typeof background !== 'undefined') {\n payload['background'] = background;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get QR code\n *\n * Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n\n *\n * @param {string} text\n * @param {number} size\n * @param {number} margin\n * @param {boolean} download\n * @throws {AppwriteException}\n * @returns {string}\n */\n getQR(text: string, size?: number, margin?: number, download?: boolean): string {\n if (typeof text === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"text\"');\n }\n const apiPath = '/avatars/qr';\n const payload: Payload = {};\n if (typeof text !== 'undefined') {\n payload['text'] = text;\n }\n if (typeof size !== 'undefined') {\n payload['size'] = size;\n }\n if (typeof margin !== 'undefined') {\n payload['margin'] = margin;\n }\n if (typeof download !== 'undefined') {\n payload['download'] = download;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\n\nexport class Databases {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * List documents\n *\n * Get a list of all the user's documents in a given collection. You can use the query params to filter your results.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async listDocuments(databaseId: string, collectionId: string, queries?: string[]): Promise> {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId);\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create document\n *\n * Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) API or directly from your database console.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {Omit} data\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createDocument(databaseId: string, collectionId: string, documentId: string, data: Omit, permissions?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n if (typeof data === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"data\"');\n }\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId);\n const payload: Payload = {};\n if (typeof documentId !== 'undefined') {\n payload['documentId'] = documentId;\n }\n if (typeof data !== 'undefined') {\n payload['data'] = data;\n }\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get document\n *\n * Get a document by its unique ID. This endpoint response returns a JSON object with the document data.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getDocument(databaseId: string, collectionId: string, documentId: string, queries?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update document\n *\n * Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {Partial>} data\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateDocument(databaseId: string, collectionId: string, documentId: string, data?: Partial>, permissions?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n if (typeof data !== 'undefined') {\n payload['data'] = data;\n }\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete document\n *\n * Delete a document by its unique ID.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteDocument(databaseId: string, collectionId: string, documentId: string): Promise<{}> {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\nimport { ExecutionMethod } from '../enums/execution-method';\n\nexport class Functions {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * List executions\n *\n * Get a list of all the current user function execution logs. You can use the query params to filter your results.\n *\n * @param {string} functionId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listExecutions(functionId: string, queries?: string[], search?: string): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n const apiPath = '/functions/{functionId}/executions'.replace('{functionId}', functionId);\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create execution\n *\n * Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.\n *\n * @param {string} functionId\n * @param {string} body\n * @param {boolean} async\n * @param {string} xpath\n * @param {ExecutionMethod} method\n * @param {object} headers\n * @param {string} scheduledAt\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createExecution(functionId: string, body?: string, async?: boolean, xpath?: string, method?: ExecutionMethod, headers?: object, scheduledAt?: string): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n const apiPath = '/functions/{functionId}/executions'.replace('{functionId}', functionId);\n const payload: Payload = {};\n if (typeof body !== 'undefined') {\n payload['body'] = body;\n }\n if (typeof async !== 'undefined') {\n payload['async'] = async;\n }\n if (typeof xpath !== 'undefined') {\n payload['path'] = xpath;\n }\n if (typeof method !== 'undefined') {\n payload['method'] = method;\n }\n if (typeof headers !== 'undefined') {\n payload['headers'] = headers;\n }\n if (typeof scheduledAt !== 'undefined') {\n payload['scheduledAt'] = scheduledAt;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get execution\n *\n * Get a function execution log by its unique ID.\n *\n * @param {string} functionId\n * @param {string} executionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getExecution(functionId: string, executionId: string): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n if (typeof executionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"executionId\"');\n }\n const apiPath = '/functions/{functionId}/executions/{executionId}'.replace('{functionId}', functionId).replace('{executionId}', executionId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\n\nexport class Graphql {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * GraphQL endpoint\n *\n * Execute a GraphQL mutation.\n *\n * @param {object} query\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async query(query: object): Promise<{}> {\n if (typeof query === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"query\"');\n }\n const apiPath = '/graphql';\n const payload: Payload = {};\n if (typeof query !== 'undefined') {\n payload['query'] = query;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'x-sdk-graphql': 'true',\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * GraphQL endpoint\n *\n * Execute a GraphQL mutation.\n *\n * @param {object} query\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async mutation(query: object): Promise<{}> {\n if (typeof query === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"query\"');\n }\n const apiPath = '/graphql/mutation';\n const payload: Payload = {};\n if (typeof query !== 'undefined') {\n payload['query'] = query;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'x-sdk-graphql': 'true',\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\n\nexport class Locale {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get user locale\n *\n * Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https://db-ip.com))\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async get(): Promise {\n const apiPath = '/locale';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List Locale Codes\n *\n * List of all locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes).\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCodes(): Promise {\n const apiPath = '/locale/codes';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List continents\n *\n * List of all continents. You can use the locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listContinents(): Promise {\n const apiPath = '/locale/continents';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List countries\n *\n * List of all countries. You can use the locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountries(): Promise {\n const apiPath = '/locale/countries';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List EU countries\n *\n * List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountriesEU(): Promise {\n const apiPath = '/locale/countries/eu';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List countries phone codes\n *\n * List of all countries phone codes. You can use the locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountriesPhones(): Promise {\n const apiPath = '/locale/countries/phones';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List currencies\n *\n * List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCurrencies(): Promise {\n const apiPath = '/locale/currencies';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List languages\n *\n * List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listLanguages(): Promise {\n const apiPath = '/locale/languages';\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\n\nexport class Messaging {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Create subscriber\n *\n * Create a new subscriber.\n *\n * @param {string} topicId\n * @param {string} subscriberId\n * @param {string} targetId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createSubscriber(topicId: string, subscriberId: string, targetId: string): Promise {\n if (typeof topicId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"topicId\"');\n }\n if (typeof subscriberId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"subscriberId\"');\n }\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n const apiPath = '/messaging/topics/{topicId}/subscribers'.replace('{topicId}', topicId);\n const payload: Payload = {};\n if (typeof subscriberId !== 'undefined') {\n payload['subscriberId'] = subscriberId;\n }\n if (typeof targetId !== 'undefined') {\n payload['targetId'] = targetId;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete subscriber\n *\n * Delete a subscriber by its unique ID.\n *\n * @param {string} topicId\n * @param {string} subscriberId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteSubscriber(topicId: string, subscriberId: string): Promise<{}> {\n if (typeof topicId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"topicId\"');\n }\n if (typeof subscriberId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"subscriberId\"');\n }\n const apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}'.replace('{topicId}', topicId).replace('{subscriberId}', subscriberId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\nimport { ImageGravity } from '../enums/image-gravity';\nimport { ImageFormat } from '../enums/image-format';\n\nexport class Storage {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * List files\n *\n * Get a list of all the user files. You can use the query params to filter your results.\n *\n * @param {string} bucketId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listFiles(bucketId: string, queries?: string[], search?: string): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files'.replace('{bucketId}', bucketId);\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create file\n *\n * Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](https://appwrite.io/docs/server/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {File} file\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createFile(bucketId: string, fileId: string, file: File, permissions?: string[], onProgress = (progress: UploadProgress) => {}): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n if (typeof file === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"file\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files'.replace('{bucketId}', bucketId);\n const payload: Payload = {};\n if (typeof fileId !== 'undefined') {\n payload['fileId'] = fileId;\n }\n if (typeof file !== 'undefined') {\n payload['file'] = file;\n }\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'multipart/form-data',\n }\n\n\n return await this.client.chunkedUpload(\n 'post',\n uri,\n apiHeaders,\n payload,\n onProgress\n );\n }\n /**\n * Get file\n *\n * Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getFile(bucketId: string, fileId: string): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update file\n *\n * Update a file by its unique ID. Only users with write permissions have access to update this resource.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {string} name\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateFile(bucketId: string, fileId: string, name?: string, permissions?: string[]): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete File\n *\n * Delete a file by its unique ID. Only users with write permissions have access to delete this resource.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteFile(bucketId: string, fileId: string): Promise<{}> {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get file for download\n *\n * Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {string}\n */\n getFileDownload(bucketId: string, fileId: string): string {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get file preview\n *\n * Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {number} width\n * @param {number} height\n * @param {ImageGravity} gravity\n * @param {number} quality\n * @param {number} borderWidth\n * @param {string} borderColor\n * @param {number} borderRadius\n * @param {number} opacity\n * @param {number} rotation\n * @param {string} background\n * @param {ImageFormat} output\n * @throws {AppwriteException}\n * @returns {string}\n */\n getFilePreview(bucketId: string, fileId: string, width?: number, height?: number, gravity?: ImageGravity, quality?: number, borderWidth?: number, borderColor?: string, borderRadius?: number, opacity?: number, rotation?: number, background?: string, output?: ImageFormat): string {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n if (typeof gravity !== 'undefined') {\n payload['gravity'] = gravity;\n }\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n if (typeof borderWidth !== 'undefined') {\n payload['borderWidth'] = borderWidth;\n }\n if (typeof borderColor !== 'undefined') {\n payload['borderColor'] = borderColor;\n }\n if (typeof borderRadius !== 'undefined') {\n payload['borderRadius'] = borderRadius;\n }\n if (typeof opacity !== 'undefined') {\n payload['opacity'] = opacity;\n }\n if (typeof rotation !== 'undefined') {\n payload['rotation'] = rotation;\n }\n if (typeof background !== 'undefined') {\n payload['background'] = background;\n }\n if (typeof output !== 'undefined') {\n payload['output'] = output;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n /**\n * Get file for view\n *\n * Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {string}\n */\n getFileView(bucketId: string, fileId: string): string {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n payload['project'] = this.client.config.project;\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n payload['project'] = this.client.config.project;\n\n for (const [key, value] of Object.entries(Client.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n\n return uri.toString();\n }\n}\n","import { Service } from '../service';\nimport { AppwriteException, Client, type Payload, UploadProgress } from '../client';\nimport type { Models } from '../models';\n\nexport class Teams {\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * List teams\n *\n * Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.\n *\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async list(queries?: string[], search?: string): Promise> {\n const apiPath = '/teams';\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create team\n *\n * Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.\n *\n * @param {string} teamId\n * @param {string} name\n * @param {string[]} roles\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async create(teamId: string, name: string, roles?: string[]): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n const apiPath = '/teams';\n const payload: Payload = {};\n if (typeof teamId !== 'undefined') {\n payload['teamId'] = teamId;\n }\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get team\n *\n * Get a team by its ID. All team members have read access for this resource.\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async get(teamId: string): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update name\n *\n * Update the team's name by its unique ID.\n *\n * @param {string} teamId\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise>}\n */\n async updateName(teamId: string, name: string): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete team\n *\n * Delete a team using its ID. Only team members with the owner role can delete the team.\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async delete(teamId: string): Promise<{}> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * List team memberships\n *\n * Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.\n *\n * @param {string} teamId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listMemberships(teamId: string, queries?: string[], search?: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId);\n const payload: Payload = {};\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Create team membership\n *\n * Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appwrite will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn't exist. If initiated from a Server SDK, the new member will be added automatically to the team.\n\nYou only need to provide one of a user ID, email, or phone number. Appwrite will prioritize accepting the user ID > email > phone number if you provide more than one of these parameters.\n\nUse the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appwrite will accept the only redirect URLs under the domains you have added as a platform on the Appwrite Console.\n\n *\n * @param {string} teamId\n * @param {string[]} roles\n * @param {string} email\n * @param {string} userId\n * @param {string} phone\n * @param {string} url\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMembership(teamId: string, roles: string[], email?: string, userId?: string, phone?: string, url?: string, name?: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof roles === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"roles\"');\n }\n const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId);\n const payload: Payload = {};\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'post',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get team membership\n *\n * Get a team member by the membership unique id. All team members have read access for this resource.\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getMembership(teamId: string, membershipId: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update membership\n *\n * Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https://appwrite.io/docs/permissions).\n\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @param {string[]} roles\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMembership(teamId: string, membershipId: string, roles: string[]): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n if (typeof roles === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"roles\"');\n }\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Delete team membership\n *\n * This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @throws {AppwriteException}\n * @returns {Promise<{}>}\n */\n async deleteMembership(teamId: string, membershipId: string): Promise<{}> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'delete',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update team membership status\n *\n * Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMembershipStatus(teamId: string, membershipId: string, userId: string, secret: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n const apiPath = '/teams/{teamId}/memberships/{membershipId}/status'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'patch',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Get team preferences\n *\n * Get the team's shared preferences by its unique ID. If a preference doesn't need to be shared by all team members, prefer storing them in [user preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs).\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getPrefs(teamId: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId);\n const payload: Payload = {};\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'get',\n uri,\n apiHeaders,\n payload\n );\n }\n /**\n * Update preferences\n *\n * Update the team's preferences by its unique ID. The object you pass is stored as is and replaces any previous value. The maximum allowed prefs size is 64kB and throws an error if exceeded.\n *\n * @param {string} teamId\n * @param {object} prefs\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePrefs(teamId: string, prefs: object): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n if (typeof prefs === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"prefs\"');\n }\n const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId);\n const payload: Payload = {};\n if (typeof prefs !== 'undefined') {\n payload['prefs'] = prefs;\n }\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'application/json',\n }\n\n\n return await this.client.call(\n 'put',\n uri,\n apiHeaders,\n payload\n );\n }\n}\n","/**\n * Helper class to generate permission strings for resources.\n */\nexport class Permission {\n /**\n * Generate read permission string for the provided role.\n *\n * @param {string} role\n * @returns {string}\n */\n static read = (role: string): string => {\n return `read(\"${role}\")`;\n }\n\n /**\n * Generate write permission string for the provided role.\n *\n * This is an alias of update, delete, and possibly create.\n * Don't use write in combination with update, delete, or create.\n *\n * @param {string} role\n * @returns {string}\n */\n static write = (role: string): string => {\n return `write(\"${role}\")`;\n }\n\n /**\n * Generate create permission string for the provided role.\n *\n * @param {string} role\n * @returns {string}\n */\n static create = (role: string): string => {\n return `create(\"${role}\")`;\n }\n\n /**\n * Generate update permission string for the provided role.\n *\n * @param {string} role\n * @returns {string}\n */\n static update = (role: string): string => {\n return `update(\"${role}\")`;\n }\n\n /**\n * Generate delete permission string for the provided role.\n *\n * @param {string} role\n * @returns {string}\n */\n static delete = (role: string): string => {\n return `delete(\"${role}\")`;\n }\n}\n","/**\n * Helper class to generate role strings for `Permission`.\n */\nexport class Role {\n\n /**\n * Grants access to anyone.\n * \n * This includes authenticated and unauthenticated users.\n * \n * @returns {string}\n */\n public static any(): string {\n return 'any'\n }\n\n /**\n * Grants access to a specific user by user ID.\n * \n * You can optionally pass verified or unverified for\n * `status` to target specific types of users.\n *\n * @param {string} id \n * @param {string} status \n * @returns {string}\n */\n public static user(id: string, status: string = ''): string {\n if (status === '') {\n return `user:${id}`\n }\n return `user:${id}/${status}`\n }\n\n /**\n * Grants access to any authenticated or anonymous user.\n * \n * You can optionally pass verified or unverified for\n * `status` to target specific types of users.\n * \n * @param {string} status \n * @returns {string}\n */\n public static users(status: string = ''): string {\n if (status === '') {\n return 'users'\n }\n return `users/${status}`\n }\n\n /**\n * Grants access to any guest user without a session.\n * \n * Authenticated users don't have access to this role.\n * \n * @returns {string}\n */\n public static guests(): string {\n return 'guests'\n }\n\n /**\n * Grants access to a team by team ID.\n * \n * You can optionally pass a role for `role` to target\n * team members with the specified role.\n * \n * @param {string} id \n * @param {string} role \n * @returns {string}\n */\n public static team(id: string, role: string = ''): string {\n if (role === '') {\n return `team:${id}`\n }\n return `team:${id}/${role}`\n }\n\n /**\n * Grants access to a specific member of a team.\n * \n * When the member is removed from the team, they will\n * no longer have access.\n * \n * @param {string} id \n * @returns {string}\n */\n public static member(id: string): string {\n return `member:${id}`\n }\n\n /**\n * Grants access to a user with the specified label.\n * \n * @param {string} name \n * @returns {string}\n */\n public static label(name: string): string {\n return `label:${name}`\n }\n}","/**\n * Helper class to generate ID strings for resources.\n */\nexport class ID {\n /**\n * Generate an hex ID based on timestamp.\n * Recreated from https://www.php.net/manual/en/function.uniqid.php\n *\n * @returns {string}\n */\n static #hexTimestamp(): string {\n const now = new Date();\n const sec = Math.floor(now.getTime() / 1000);\n const msec = now.getMilliseconds();\n\n // Convert to hexadecimal\n const hexTimestamp = sec.toString(16) + msec.toString(16).padStart(5, '0');\n return hexTimestamp;\n }\n\n /**\n * Uses the provided ID as the ID for the resource.\n *\n * @param {string} id\n * @returns {string}\n */\n public static custom(id: string): string {\n return id\n }\n\n /**\n * Have Appwrite generate a unique ID for you.\n * \n * @param {number} padding. Default is 7.\n * @returns {string}\n */\n public static unique(padding: number = 7): string {\n // Generate a unique ID with padding to have a longer ID\n const baseId = ID.#hexTimestamp();\n let randomPadding = '';\n for (let i = 0; i < padding; i++) {\n const randomHexDigit = Math.floor(Math.random() * 16).toString(16);\n randomPadding += randomHexDigit;\n }\n return baseId + randomPadding;\n }\n}\n","export enum AuthenticatorType {\n Totp = 'totp',\n}","export enum AuthenticationFactor {\n Email = 'email',\n Phone = 'phone',\n Totp = 'totp',\n Recoverycode = 'recoverycode',\n}","export enum OAuthProvider {\n Amazon = 'amazon',\n Apple = 'apple',\n Auth0 = 'auth0',\n Authentik = 'authentik',\n Autodesk = 'autodesk',\n Bitbucket = 'bitbucket',\n Bitly = 'bitly',\n Box = 'box',\n Dailymotion = 'dailymotion',\n Discord = 'discord',\n Disqus = 'disqus',\n Dropbox = 'dropbox',\n Etsy = 'etsy',\n Facebook = 'facebook',\n Github = 'github',\n Gitlab = 'gitlab',\n Google = 'google',\n Linkedin = 'linkedin',\n Microsoft = 'microsoft',\n Notion = 'notion',\n Oidc = 'oidc',\n Okta = 'okta',\n Paypal = 'paypal',\n PaypalSandbox = 'paypalSandbox',\n Podio = 'podio',\n Salesforce = 'salesforce',\n Slack = 'slack',\n Spotify = 'spotify',\n Stripe = 'stripe',\n Tradeshift = 'tradeshift',\n TradeshiftBox = 'tradeshiftBox',\n Twitch = 'twitch',\n Wordpress = 'wordpress',\n Yahoo = 'yahoo',\n Yammer = 'yammer',\n Yandex = 'yandex',\n Zoho = 'zoho',\n Zoom = 'zoom',\n Mock = 'mock',\n}","export enum Browser {\n AvantBrowser = 'aa',\n AndroidWebViewBeta = 'an',\n GoogleChrome = 'ch',\n GoogleChromeIOS = 'ci',\n GoogleChromeMobile = 'cm',\n Chromium = 'cr',\n MozillaFirefox = 'ff',\n Safari = 'sf',\n MobileSafari = 'mf',\n MicrosoftEdge = 'ps',\n MicrosoftEdgeIOS = 'oi',\n OperaMini = 'om',\n Opera = 'op',\n OperaNext = 'on',\n}","export enum CreditCard {\n AmericanExpress = 'amex',\n Argencard = 'argencard',\n Cabal = 'cabal',\n Cencosud = 'cencosud',\n DinersClub = 'diners',\n Discover = 'discover',\n Elo = 'elo',\n Hipercard = 'hipercard',\n JCB = 'jcb',\n Mastercard = 'mastercard',\n Naranja = 'naranja',\n TarjetaShopping = 'targeta-shopping',\n UnionChinaPay = 'union-china-pay',\n Visa = 'visa',\n MIR = 'mir',\n Maestro = 'maestro',\n}","export enum Flag {\n Afghanistan = 'af',\n Angola = 'ao',\n Albania = 'al',\n Andorra = 'ad',\n UnitedArabEmirates = 'ae',\n Argentina = 'ar',\n Armenia = 'am',\n AntiguaAndBarbuda = 'ag',\n Australia = 'au',\n Austria = 'at',\n Azerbaijan = 'az',\n Burundi = 'bi',\n Belgium = 'be',\n Benin = 'bj',\n BurkinaFaso = 'bf',\n Bangladesh = 'bd',\n Bulgaria = 'bg',\n Bahrain = 'bh',\n Bahamas = 'bs',\n BosniaAndHerzegovina = 'ba',\n Belarus = 'by',\n Belize = 'bz',\n Bolivia = 'bo',\n Brazil = 'br',\n Barbados = 'bb',\n BruneiDarussalam = 'bn',\n Bhutan = 'bt',\n Botswana = 'bw',\n CentralAfricanRepublic = 'cf',\n Canada = 'ca',\n Switzerland = 'ch',\n Chile = 'cl',\n China = 'cn',\n CoteDIvoire = 'ci',\n Cameroon = 'cm',\n DemocraticRepublicOfTheCongo = 'cd',\n RepublicOfTheCongo = 'cg',\n Colombia = 'co',\n Comoros = 'km',\n CapeVerde = 'cv',\n CostaRica = 'cr',\n Cuba = 'cu',\n Cyprus = 'cy',\n CzechRepublic = 'cz',\n Germany = 'de',\n Djibouti = 'dj',\n Dominica = 'dm',\n Denmark = 'dk',\n DominicanRepublic = 'do',\n Algeria = 'dz',\n Ecuador = 'ec',\n Egypt = 'eg',\n Eritrea = 'er',\n Spain = 'es',\n Estonia = 'ee',\n Ethiopia = 'et',\n Finland = 'fi',\n Fiji = 'fj',\n France = 'fr',\n MicronesiaFederatedStatesOf = 'fm',\n Gabon = 'ga',\n UnitedKingdom = 'gb',\n Georgia = 'ge',\n Ghana = 'gh',\n Guinea = 'gn',\n Gambia = 'gm',\n GuineaBissau = 'gw',\n EquatorialGuinea = 'gq',\n Greece = 'gr',\n Grenada = 'gd',\n Guatemala = 'gt',\n Guyana = 'gy',\n Honduras = 'hn',\n Croatia = 'hr',\n Haiti = 'ht',\n Hungary = 'hu',\n Indonesia = 'id',\n India = 'in',\n Ireland = 'ie',\n IranIslamicRepublicOf = 'ir',\n Iraq = 'iq',\n Iceland = 'is',\n Israel = 'il',\n Italy = 'it',\n Jamaica = 'jm',\n Jordan = 'jo',\n Japan = 'jp',\n Kazakhstan = 'kz',\n Kenya = 'ke',\n Kyrgyzstan = 'kg',\n Cambodia = 'kh',\n Kiribati = 'ki',\n SaintKittsAndNevis = 'kn',\n SouthKorea = 'kr',\n Kuwait = 'kw',\n LaoPeopleSDemocraticRepublic = 'la',\n Lebanon = 'lb',\n Liberia = 'lr',\n Libya = 'ly',\n SaintLucia = 'lc',\n Liechtenstein = 'li',\n SriLanka = 'lk',\n Lesotho = 'ls',\n Lithuania = 'lt',\n Luxembourg = 'lu',\n Latvia = 'lv',\n Morocco = 'ma',\n Monaco = 'mc',\n Moldova = 'md',\n Madagascar = 'mg',\n Maldives = 'mv',\n Mexico = 'mx',\n MarshallIslands = 'mh',\n NorthMacedonia = 'mk',\n Mali = 'ml',\n Malta = 'mt',\n Myanmar = 'mm',\n Montenegro = 'me',\n Mongolia = 'mn',\n Mozambique = 'mz',\n Mauritania = 'mr',\n Mauritius = 'mu',\n Malawi = 'mw',\n Malaysia = 'my',\n Namibia = 'na',\n Niger = 'ne',\n Nigeria = 'ng',\n Nicaragua = 'ni',\n Netherlands = 'nl',\n Norway = 'no',\n Nepal = 'np',\n Nauru = 'nr',\n NewZealand = 'nz',\n Oman = 'om',\n Pakistan = 'pk',\n Panama = 'pa',\n Peru = 'pe',\n Philippines = 'ph',\n Palau = 'pw',\n PapuaNewGuinea = 'pg',\n Poland = 'pl',\n FrenchPolynesia = 'pf',\n NorthKorea = 'kp',\n Portugal = 'pt',\n Paraguay = 'py',\n Qatar = 'qa',\n Romania = 'ro',\n Russia = 'ru',\n Rwanda = 'rw',\n SaudiArabia = 'sa',\n Sudan = 'sd',\n Senegal = 'sn',\n Singapore = 'sg',\n SolomonIslands = 'sb',\n SierraLeone = 'sl',\n ElSalvador = 'sv',\n SanMarino = 'sm',\n Somalia = 'so',\n Serbia = 'rs',\n SouthSudan = 'ss',\n SaoTomeAndPrincipe = 'st',\n Suriname = 'sr',\n Slovakia = 'sk',\n Slovenia = 'si',\n Sweden = 'se',\n Eswatini = 'sz',\n Seychelles = 'sc',\n Syria = 'sy',\n Chad = 'td',\n Togo = 'tg',\n Thailand = 'th',\n Tajikistan = 'tj',\n Turkmenistan = 'tm',\n TimorLeste = 'tl',\n Tonga = 'to',\n TrinidadAndTobago = 'tt',\n Tunisia = 'tn',\n Turkey = 'tr',\n Tuvalu = 'tv',\n Tanzania = 'tz',\n Uganda = 'ug',\n Ukraine = 'ua',\n Uruguay = 'uy',\n UnitedStates = 'us',\n Uzbekistan = 'uz',\n VaticanCity = 'va',\n SaintVincentAndTheGrenadines = 'vc',\n Venezuela = 've',\n Vietnam = 'vn',\n Vanuatu = 'vu',\n Samoa = 'ws',\n Yemen = 'ye',\n SouthAfrica = 'za',\n Zambia = 'zm',\n Zimbabwe = 'zw',\n}","export enum ExecutionMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n DELETE = 'DELETE',\n OPTIONS = 'OPTIONS',\n}","export enum ImageGravity {\n Center = 'center',\n Topleft = 'top-left',\n Top = 'top',\n Topright = 'top-right',\n Left = 'left',\n Right = 'right',\n Bottomleft = 'bottom-left',\n Bottom = 'bottom',\n Bottomright = 'bottom-right',\n}","export enum ImageFormat {\n Jpg = 'jpg',\n Jpeg = 'jpeg',\n Gif = 'gif',\n Png = 'png',\n Webp = 'webp',\n}"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"sdk.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/service.ts","../../src/query.ts","../../src/client.ts","../../src/services/account.ts","../../src/services/avatars.ts","../../src/services/databases.ts","../../src/services/functions.ts","../../src/services/graphql.ts","../../src/services/locale.ts","../../src/services/messaging.ts","../../src/services/storage.ts","../../src/services/teams.ts","../../src/permission.ts","../../src/role.ts","../../src/id.ts","../../src/enums/authenticator-type.ts","../../src/enums/authentication-factor.ts","../../src/enums/o-auth-provider.ts","../../src/enums/browser.ts","../../src/enums/credit-card.ts","../../src/enums/flag.ts","../../src/enums/execution-method.ts","../../src/enums/image-gravity.ts","../../src/enums/image-format.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { Client } from './client';\nimport type { Payload } from './client';\n\nexport class Service {\n static CHUNK_SIZE = 5*1024*1024; // 5MB\n\n client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n static flatten(data: Payload, prefix = ''): Payload {\n let output: Payload = {};\n\n for (const [key, value] of Object.entries(data)) {\n let finalKey = prefix ? prefix + '[' + key +']' : key;\n if (Array.isArray(value)) {\n output = { ...output, ...Service.flatten(value, finalKey) };\n } else {\n output[finalKey] = value;\n }\n }\n\n return output;\n }\n}","type QueryTypesSingle = string | number | boolean;\nexport type QueryTypesList = string[] | number[] | boolean[] | Query[];\nexport type QueryTypes = QueryTypesSingle | QueryTypesList;\ntype AttributesTypes = string | string[];\n\nexport class Query {\n method: string;\n attribute: AttributesTypes | undefined;\n values: QueryTypesList | undefined;\n\n constructor(\n method: string,\n attribute?: AttributesTypes,\n values?: QueryTypes\n ) {\n this.method = method;\n this.attribute = attribute;\n\n if (values !== undefined) {\n if (Array.isArray(values)) {\n this.values = values;\n } else {\n this.values = [values] as QueryTypesList;\n }\n }\n }\n\n toString(): string {\n return JSON.stringify({\n method: this.method,\n attribute: this.attribute,\n values: this.values,\n });\n }\n\n static equal = (attribute: string, value: QueryTypes): string =>\n new Query(\"equal\", attribute, value).toString();\n\n static notEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"notEqual\", attribute, value).toString();\n\n static lessThan = (attribute: string, value: QueryTypes): string =>\n new Query(\"lessThan\", attribute, value).toString();\n\n static lessThanEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"lessThanEqual\", attribute, value).toString();\n\n static greaterThan = (attribute: string, value: QueryTypes): string =>\n new Query(\"greaterThan\", attribute, value).toString();\n\n static greaterThanEqual = (attribute: string, value: QueryTypes): string =>\n new Query(\"greaterThanEqual\", attribute, value).toString();\n\n static isNull = (attribute: string): string =>\n new Query(\"isNull\", attribute).toString();\n\n static isNotNull = (attribute: string): string =>\n new Query(\"isNotNull\", attribute).toString();\n\n static between = (attribute: string, start: string | number, end: string | number) =>\n new Query(\"between\", attribute, [start, end] as QueryTypesList).toString();\n\n static startsWith = (attribute: string, value: string): string =>\n new Query(\"startsWith\", attribute, value).toString();\n\n static endsWith = (attribute: string, value: string): string =>\n new Query(\"endsWith\", attribute, value).toString();\n\n static select = (attributes: string[]): string =>\n new Query(\"select\", undefined, attributes).toString();\n\n static search = (attribute: string, value: string): string =>\n new Query(\"search\", attribute, value).toString();\n\n static orderDesc = (attribute: string): string =>\n new Query(\"orderDesc\", attribute).toString();\n\n static orderAsc = (attribute: string): string =>\n new Query(\"orderAsc\", attribute).toString();\n\n static cursorAfter = (documentId: string): string =>\n new Query(\"cursorAfter\", undefined, documentId).toString();\n\n static cursorBefore = (documentId: string): string =>\n new Query(\"cursorBefore\", undefined, documentId).toString();\n\n static limit = (limit: number): string =>\n new Query(\"limit\", undefined, limit).toString();\n\n static offset = (offset: number): string =>\n new Query(\"offset\", undefined, offset).toString();\n\n static contains = (attribute: string, value: string | string[]): string =>\n new Query(\"contains\", attribute, value).toString();\n\n static or = (queries: string[]) =>\n new Query(\"or\", undefined, queries.map((query) => JSON.parse(query))).toString();\n\n static and = (queries: string[]) =>\n new Query(\"and\", undefined, queries.map((query) => JSON.parse(query))).toString();\n}\n","import 'isomorphic-form-data';\nimport { fetch } from 'cross-fetch';\nimport { Models } from './models';\nimport { Service } from './service';\n\ntype Payload = {\n [key: string]: any;\n}\n\ntype Headers = {\n [key: string]: string;\n}\n\ntype RealtimeResponse = {\n type: 'error' | 'event' | 'connected' | 'response';\n data: RealtimeResponseAuthenticated | RealtimeResponseConnected | RealtimeResponseError | RealtimeResponseEvent;\n}\n\ntype RealtimeRequest = {\n type: 'authentication';\n data: RealtimeRequestAuthenticate;\n}\n\nexport type RealtimeResponseEvent = {\n events: string[];\n channels: string[];\n timestamp: number;\n payload: T;\n}\n\ntype RealtimeResponseError = {\n code: number;\n message: string;\n}\n\ntype RealtimeResponseConnected = {\n channels: string[];\n user?: object;\n}\n\ntype RealtimeResponseAuthenticated = {\n to: string;\n success: boolean;\n user: object;\n}\n\ntype RealtimeRequestAuthenticate = {\n session: string;\n}\n\ntype Realtime = {\n socket?: WebSocket;\n timeout?: number;\n url?: string;\n lastMessage?: RealtimeResponse;\n channels: Set;\n subscriptions: Map) => void\n }>;\n subscriptionsCounter: number;\n reconnect: boolean;\n reconnectAttempts: number;\n getTimeout: () => number;\n connect: () => void;\n createSocket: () => void;\n cleanUp: (channels: string[]) => void;\n onMessage: (event: MessageEvent) => void;\n}\n\nexport type UploadProgress = {\n $id: string;\n progress: number;\n sizeUploaded: number;\n chunksTotal: number;\n chunksUploaded: number;\n}\n\nclass AppwriteException extends Error {\n code: number;\n response: string;\n type: string;\n constructor(message: string, code: number = 0, type: string = '', response: string = '') {\n super(message);\n this.name = 'AppwriteException';\n this.message = message;\n this.code = code;\n this.type = type;\n this.response = response;\n }\n}\n\nclass Client {\n config = {\n endpoint: 'https://cloud.appwrite.io/v1',\n endpointRealtime: '',\n project: '',\n jwt: '',\n locale: '',\n session: '',\n };\n headers: Headers = {\n 'x-sdk-name': 'Web',\n 'x-sdk-platform': 'client',\n 'x-sdk-language': 'web',\n 'x-sdk-version': '14.0.1',\n 'X-Appwrite-Response-Format': '1.5.0',\n };\n\n /**\n * Set Endpoint\n *\n * Your project endpoint\n *\n * @param {string} endpoint\n *\n * @returns {this}\n */\n setEndpoint(endpoint: string): this {\n this.config.endpoint = endpoint;\n this.config.endpointRealtime = this.config.endpointRealtime || this.config.endpoint.replace('https://', 'wss://').replace('http://', 'ws://');\n\n return this;\n }\n\n /**\n * Set Realtime Endpoint\n *\n * @param {string} endpointRealtime\n *\n * @returns {this}\n */\n setEndpointRealtime(endpointRealtime: string): this {\n this.config.endpointRealtime = endpointRealtime;\n\n return this;\n }\n\n /**\n * Set Project\n *\n * Your project ID\n *\n * @param value string\n *\n * @return {this}\n */\n setProject(value: string): this {\n this.headers['X-Appwrite-Project'] = value;\n this.config.project = value;\n return this;\n }\n\n /**\n * Set JWT\n *\n * Your secret JSON Web Token\n *\n * @param value string\n *\n * @return {this}\n */\n setJWT(value: string): this {\n this.headers['X-Appwrite-JWT'] = value;\n this.config.jwt = value;\n return this;\n }\n\n /**\n * Set Locale\n *\n * @param value string\n *\n * @return {this}\n */\n setLocale(value: string): this {\n this.headers['X-Appwrite-Locale'] = value;\n this.config.locale = value;\n return this;\n }\n\n /**\n * Set Session\n *\n * The user session to authenticate with\n *\n * @param value string\n *\n * @return {this}\n */\n setSession(value: string): this {\n this.headers['X-Appwrite-Session'] = value;\n this.config.session = value;\n return this;\n }\n\n\n private realtime: Realtime = {\n socket: undefined,\n timeout: undefined,\n url: '',\n channels: new Set(),\n subscriptions: new Map(),\n subscriptionsCounter: 0,\n reconnect: true,\n reconnectAttempts: 0,\n lastMessage: undefined,\n connect: () => {\n clearTimeout(this.realtime.timeout);\n this.realtime.timeout = window?.setTimeout(() => {\n this.realtime.createSocket();\n }, 50);\n },\n getTimeout: () => {\n switch (true) {\n case this.realtime.reconnectAttempts < 5:\n return 1000;\n case this.realtime.reconnectAttempts < 15:\n return 5000;\n case this.realtime.reconnectAttempts < 100:\n return 10_000;\n default:\n return 60_000;\n }\n },\n createSocket: () => {\n if (this.realtime.channels.size < 1) {\n this.realtime.reconnect = false;\n this.realtime.socket?.close();\n return;\n }\n\n const channels = new URLSearchParams();\n channels.set('project', this.config.project);\n this.realtime.channels.forEach(channel => {\n channels.append('channels[]', channel);\n });\n\n const url = this.config.endpointRealtime + '/realtime?' + channels.toString();\n\n if (\n url !== this.realtime.url || // Check if URL is present\n !this.realtime.socket || // Check if WebSocket has not been created\n this.realtime.socket?.readyState > WebSocket.OPEN // Check if WebSocket is CLOSING (3) or CLOSED (4)\n ) {\n if (\n this.realtime.socket &&\n this.realtime.socket?.readyState < WebSocket.CLOSING // Close WebSocket if it is CONNECTING (0) or OPEN (1)\n ) {\n this.realtime.reconnect = false;\n this.realtime.socket.close();\n }\n\n this.realtime.url = url;\n this.realtime.socket = new WebSocket(url);\n this.realtime.socket.addEventListener('message', this.realtime.onMessage);\n this.realtime.socket.addEventListener('open', _event => {\n this.realtime.reconnectAttempts = 0;\n });\n this.realtime.socket.addEventListener('close', event => {\n if (\n !this.realtime.reconnect ||\n (\n this.realtime?.lastMessage?.type === 'error' && // Check if last message was of type error\n (this.realtime?.lastMessage.data).code === 1008 // Check for policy violation 1008\n )\n ) {\n this.realtime.reconnect = true;\n return;\n }\n\n const timeout = this.realtime.getTimeout();\n console.error(`Realtime got disconnected. Reconnect will be attempted in ${timeout / 1000} seconds.`, event.reason);\n\n setTimeout(() => {\n this.realtime.reconnectAttempts++;\n this.realtime.createSocket();\n }, timeout);\n })\n }\n },\n onMessage: (event) => {\n try {\n const message: RealtimeResponse = JSON.parse(event.data);\n this.realtime.lastMessage = message;\n switch (message.type) {\n case 'connected':\n const cookie = JSON.parse(window.localStorage.getItem('cookieFallback') ?? '{}');\n const session = cookie?.[`a_session_${this.config.project}`];\n const messageData = message.data;\n\n if (session && !messageData.user) {\n this.realtime.socket?.send(JSON.stringify({\n type: 'authentication',\n data: {\n session\n }\n }));\n }\n break;\n case 'event':\n let data = >message.data;\n if (data?.channels) {\n const isSubscribed = data.channels.some(channel => this.realtime.channels.has(channel));\n if (!isSubscribed) return;\n this.realtime.subscriptions.forEach(subscription => {\n if (data.channels.some(channel => subscription.channels.includes(channel))) {\n setTimeout(() => subscription.callback(data));\n }\n })\n }\n break;\n case 'error':\n throw message.data;\n default:\n break;\n }\n } catch (e) {\n console.error(e);\n }\n },\n cleanUp: channels => {\n this.realtime.channels.forEach(channel => {\n if (channels.includes(channel)) {\n let found = Array.from(this.realtime.subscriptions).some(([_key, subscription] )=> {\n return subscription.channels.includes(channel);\n })\n\n if (!found) {\n this.realtime.channels.delete(channel);\n }\n }\n })\n }\n }\n\n /**\n * Subscribes to Appwrite events and passes you the payload in realtime.\n * \n * @param {string|string[]} channels \n * Channel to subscribe - pass a single channel as a string or multiple with an array of strings.\n * \n * Possible channels are:\n * - account\n * - collections\n * - collections.[ID]\n * - collections.[ID].documents\n * - documents\n * - documents.[ID]\n * - files\n * - files.[ID]\n * - executions\n * - executions.[ID]\n * - functions.[ID]\n * - teams\n * - teams.[ID]\n * - memberships\n * - memberships.[ID]\n * @param {(payload: RealtimeMessage) => void} callback Is called on every realtime update.\n * @returns {() => void} Unsubscribes from events.\n */\n subscribe(channels: string | string[], callback: (payload: RealtimeResponseEvent) => void): () => void {\n let channelArray = typeof channels === 'string' ? [channels] : channels;\n channelArray.forEach(channel => this.realtime.channels.add(channel));\n\n const counter = this.realtime.subscriptionsCounter++;\n this.realtime.subscriptions.set(counter, {\n channels: channelArray,\n callback\n });\n\n this.realtime.connect();\n\n return () => {\n this.realtime.subscriptions.delete(counter);\n this.realtime.cleanUp(channelArray);\n this.realtime.connect();\n }\n }\n\n async call(method: string, url: URL, headers: Headers = {}, params: Payload = {}): Promise {\n method = method.toUpperCase();\n\n\n headers = Object.assign({}, this.headers, headers);\n\n let options: RequestInit = {\n method,\n headers,\n credentials: 'include'\n };\n\n if (typeof window !== 'undefined' && window.localStorage) {\n headers['X-Fallback-Cookies'] = window.localStorage.getItem('cookieFallback') ?? '';\n }\n\n if (method === 'GET') {\n for (const [key, value] of Object.entries(Service.flatten(params))) {\n url.searchParams.append(key, value);\n }\n } else {\n switch (headers['content-type']) {\n case 'application/json':\n options.body = JSON.stringify(params);\n break;\n\n case 'multipart/form-data':\n let formData = new FormData();\n\n for (const key in params) {\n if (Array.isArray(params[key])) {\n params[key].forEach((value: any) => {\n formData.append(key + '[]', value);\n })\n } else {\n formData.append(key, params[key]);\n }\n }\n\n options.body = formData;\n delete headers['content-type'];\n break;\n }\n }\n\n try {\n let data = null;\n const response = await fetch(url.toString(), options);\n\n if (response.headers.get('content-type')?.includes('application/json')) {\n data = await response.json();\n } else {\n data = {\n message: await response.text()\n };\n }\n\n if (400 <= response.status) {\n throw new AppwriteException(data?.message, response.status, data?.type, data);\n }\n\n const cookieFallback = response.headers.get('X-Fallback-Cookies');\n\n if (typeof window !== 'undefined' && window.localStorage && cookieFallback) {\n window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.');\n window.localStorage.setItem('cookieFallback', cookieFallback);\n }\n\n return data;\n } catch (e) {\n if (e instanceof AppwriteException) {\n throw e;\n }\n throw new AppwriteException((e).message);\n }\n }\n}\n\nexport { Client, AppwriteException };\nexport { Query } from './query';\nexport type { Models, Payload };\nexport type { QueryTypes, QueryTypesList } from './query';\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\nimport { AuthenticatorType } from '../enums/authenticator-type';\nimport { AuthenticationFactor } from '../enums/authentication-factor';\nimport { OAuthProvider } from '../enums/o-auth-provider';\n\nexport class Account extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * Get account\n *\n * Get the currently logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async get(): Promise> {\n const apiPath = '/account';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create account\n *\n * Use this endpoint to allow a new user to register a new account in your\n * project. After the user registration completes successfully, you can use\n * the\n * [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification)\n * route to start verifying the user email address. To allow the new user to\n * login to their new account, you need to create a new [account\n * session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession).\n *\n * @param {string} userId\n * @param {string} email\n * @param {string} password\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async create(userId: string, email: string, password: string, name?: string): Promise> {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update email\n *\n * Update currently logged in user account email address. After changing user\n * address, the user confirmation status will get reset. A new confirmation\n * email is not sent automatically however you can use the send confirmation\n * email endpoint again to send the confirmation email. For security measures,\n * user password is required to complete this request.\n * This endpoint can also be used to convert an anonymous account to a normal\n * one, by passing an email address and a new password.\n * \n *\n * @param {string} email\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateEmail(email: string, password: string): Promise> {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account/email';\n const payload: Payload = {};\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List Identities\n *\n * Get the list of identities for the currently logged in user.\n *\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listIdentities(queries?: string[]): Promise {\n const apiPath = '/account/identities';\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete identity\n *\n * Delete an identity by its unique ID.\n *\n * @param {string} identityId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteIdentity(identityId: string): Promise<{}> {\n if (typeof identityId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identityId\"');\n }\n\n const apiPath = '/account/identities/{identityId}'.replace('{identityId}', identityId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create JWT\n *\n * Use this endpoint to create a JSON Web Token. You can use the resulting JWT\n * to authenticate on behalf of the current user when working with the\n * Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes\n * from its creation and will be invalid if the user will logout in that time\n * frame.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createJWT(): Promise {\n const apiPath = '/account/jwt';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List logs\n *\n * Get the list of latest security activity logs for the currently logged in\n * user. Each log returns user IP address, location and date and time of log.\n *\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listLogs(queries?: string[]): Promise {\n const apiPath = '/account/logs';\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update MFA\n *\n * Enable or disable MFA on an account.\n *\n * @param {boolean} mfa\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMFA(mfa: boolean): Promise> {\n if (typeof mfa === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"mfa\"');\n }\n\n const apiPath = '/account/mfa';\n const payload: Payload = {};\n\n if (typeof mfa !== 'undefined') {\n payload['mfa'] = mfa;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Add Authenticator\n *\n * Add an authenticator app to be used as an MFA factor. Verify the\n * authenticator using the [verify\n * authenticator](/docs/references/cloud/client-web/account#verifyAuthenticator)\n * method.\n *\n * @param {AuthenticatorType} type\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaAuthenticator(type: AuthenticatorType): Promise {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Verify Authenticator\n *\n * Verify an authenticator app after adding it using the [add\n * authenticator](/docs/references/cloud/client-web/account#addAuthenticator)\n * method.\n *\n * @param {AuthenticatorType} type\n * @param {string} otp\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMfaAuthenticator(type: AuthenticatorType, otp: string): Promise> {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n\n if (typeof otp === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"otp\"');\n }\n\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n\n if (typeof otp !== 'undefined') {\n payload['otp'] = otp;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete Authenticator\n *\n * Delete an authenticator for a user by ID.\n *\n * @param {AuthenticatorType} type\n * @param {string} otp\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteMfaAuthenticator(type: AuthenticatorType, otp: string): Promise> {\n if (typeof type === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"type\"');\n }\n\n if (typeof otp === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"otp\"');\n }\n\n const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type);\n const payload: Payload = {};\n\n if (typeof otp !== 'undefined') {\n payload['otp'] = otp;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create 2FA Challenge\n *\n * Begin the process of MFA verification after sign-in. Finish the flow with\n * [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge)\n * method.\n *\n * @param {AuthenticationFactor} factor\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaChallenge(factor: AuthenticationFactor): Promise {\n if (typeof factor === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"factor\"');\n }\n\n const apiPath = '/account/mfa/challenge';\n const payload: Payload = {};\n\n if (typeof factor !== 'undefined') {\n payload['factor'] = factor;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create MFA Challenge (confirmation)\n *\n * Complete the MFA challenge by providing the one-time password. Finish the\n * process of MFA verification by providing the one-time password. To begin\n * the flow, use\n * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge)\n * method.\n *\n * @param {string} challengeId\n * @param {string} otp\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMfaChallenge(challengeId: string, otp: string): Promise<{}> {\n if (typeof challengeId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"challengeId\"');\n }\n\n if (typeof otp === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"otp\"');\n }\n\n const apiPath = '/account/mfa/challenge';\n const payload: Payload = {};\n\n if (typeof challengeId !== 'undefined') {\n payload['challengeId'] = challengeId;\n }\n\n if (typeof otp !== 'undefined') {\n payload['otp'] = otp;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List Factors\n *\n * List the factors available on the account to be used as a MFA challange.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listMfaFactors(): Promise {\n const apiPath = '/account/mfa/factors';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get MFA Recovery Codes\n *\n * Get recovery codes that can be used as backup for MFA flow. Before getting\n * codes, they must be generated using\n * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes)\n * method. An OTP challenge is required to read recovery codes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create MFA Recovery Codes\n *\n * Generate recovery codes as backup for MFA flow. It's recommended to\n * generate and show then immediately after user successfully adds their\n * authehticator. Recovery codes can be used as a MFA verification type in\n * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge)\n * method.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Regenerate MFA Recovery Codes\n *\n * Regenerate recovery codes that can be used as backup for MFA flow. Before\n * regenerating codes, they must be first generated using\n * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes)\n * method. An OTP challenge is required to regenreate recovery codes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMfaRecoveryCodes(): Promise {\n const apiPath = '/account/mfa/recovery-codes';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update name\n *\n * Update currently logged in user account name.\n *\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateName(name: string): Promise> {\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n\n const apiPath = '/account/name';\n const payload: Payload = {};\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update password\n *\n * Update currently logged in user password. For validation, user is required\n * to pass in the new password, and the old password. For users created with\n * OAuth, Team Invites and Magic URL, oldPassword is optional.\n *\n * @param {string} password\n * @param {string} oldPassword\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePassword(password: string, oldPassword?: string): Promise> {\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account/password';\n const payload: Payload = {};\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n if (typeof oldPassword !== 'undefined') {\n payload['oldPassword'] = oldPassword;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update phone\n *\n * Update the currently logged in user's phone number. After updating the\n * phone number, the phone verification status will be reset. A confirmation\n * SMS is not sent automatically, however you can use the [POST\n * /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification)\n * endpoint to send a confirmation SMS.\n *\n * @param {string} phone\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePhone(phone: string, password: string): Promise> {\n if (typeof phone === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"phone\"');\n }\n\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account/phone';\n const payload: Payload = {};\n\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get account preferences\n *\n * Get the preferences as a key-value object for the currently logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getPrefs(): Promise {\n const apiPath = '/account/prefs';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update preferences\n *\n * Update currently logged in user account preferences. The object you pass is\n * stored as is, and replaces any previous value. The maximum allowed prefs\n * size is 64kB and throws error if exceeded.\n *\n * @param {Partial} prefs\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePrefs(prefs: Partial): Promise> {\n if (typeof prefs === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"prefs\"');\n }\n\n const apiPath = '/account/prefs';\n const payload: Payload = {};\n\n if (typeof prefs !== 'undefined') {\n payload['prefs'] = prefs;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create password recovery\n *\n * Sends the user an email with a temporary secret key for password reset.\n * When the user clicks the confirmation link he is redirected back to your\n * app password reset URL with the secret key and email address values\n * attached to the URL query string. Use the query string params to submit a\n * request to the [PUT\n * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery)\n * endpoint to complete the process. The verification link sent to the user's\n * email address is valid for 1 hour.\n *\n * @param {string} email\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createRecovery(email: string, url: string): Promise {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n\n const apiPath = '/account/recovery';\n const payload: Payload = {};\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create password recovery (confirmation)\n *\n * Use this endpoint to complete the user account password reset. Both the\n * **userId** and **secret** arguments will be passed as query parameters to\n * the redirect URL you have provided when sending your request to the [POST\n * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery)\n * endpoint.\n * \n * Please note that in order to avoid a [Redirect\n * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md)\n * the only valid redirect URLs are the ones from domains you have set when\n * adding your platforms in the console interface.\n *\n * @param {string} userId\n * @param {string} secret\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateRecovery(userId: string, secret: string, password: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account/recovery';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List sessions\n *\n * Get the list of active sessions across different devices for the currently\n * logged in user.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listSessions(): Promise {\n const apiPath = '/account/sessions';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete sessions\n *\n * Delete all sessions from the user account and remove any sessions cookies\n * from the end client.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteSessions(): Promise<{}> {\n const apiPath = '/account/sessions';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create anonymous session\n *\n * Use this endpoint to allow a new user to register an anonymous account in\n * your project. This route will also create a new session for the user. To\n * allow the new user to convert an anonymous account to a normal account, you\n * need to update its [email and\n * password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail)\n * or create an [OAuth2\n * session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session).\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createAnonymousSession(): Promise {\n const apiPath = '/account/sessions/anonymous';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create email password session\n *\n * Allow the user to login into their account by providing a valid email and\n * password combination. This route will create a new session for the user.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} email\n * @param {string} password\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createEmailPasswordSession(email: string, password: string): Promise {\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n if (typeof password === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"password\"');\n }\n\n const apiPath = '/account/sessions/email';\n const payload: Payload = {};\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof password !== 'undefined') {\n payload['password'] = password;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update magic URL session\n *\n * Use this endpoint to create a session from token. Provide the **userId**\n * and **secret** parameters from the successful response of authentication\n * flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMagicURLSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/account/sessions/magic-url';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create OAuth2 session\n *\n * Allow the user to login to their account using the OAuth2 provider of their\n * choice. Each OAuth2 provider should be enabled from the Appwrite console\n * first. Use the success and failure arguments to provide a redirect URL's\n * back to your app when login is completed.\n * \n * If there is already an active session, the new session will be attached to\n * the logged-in account. If there are no active sessions, the server will\n * attempt to look for a user with the same email address as the email\n * received from the OAuth2 provider and attach the new session to the\n * existing user. If no matching user is found - the server will create a new\n * user.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n * \n *\n * @param {OAuthProvider} provider\n * @param {string} success\n * @param {string} failure\n * @param {string[]} scopes\n * @throws {AppwriteException}\n * @returns {void|string}\n */\n createOAuth2Session(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): void | URL {\n if (typeof provider === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"provider\"');\n }\n\n const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider);\n const payload: Payload = {};\n\n if (typeof success !== 'undefined') {\n payload['success'] = success;\n }\n\n if (typeof failure !== 'undefined') {\n payload['failure'] = failure;\n }\n\n if (typeof scopes !== 'undefined') {\n payload['scopes'] = scopes;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n if (typeof window !== 'undefined' && window?.location) {\n window.location.href = uri.toString();\n } else {\n return uri;\n }\n }\n\n /**\n * Update phone session\n *\n * Use this endpoint to create a session from token. Provide the **userId**\n * and **secret** parameters from the successful response of authentication\n * flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePhoneSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/account/sessions/phone';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create session\n *\n * Use this endpoint to create a session from token. Provide the **userId**\n * and **secret** parameters from the successful response of authentication\n * flows initiated by token creation. For example, magic URL and phone login.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createSession(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/account/sessions/token';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get session\n *\n * Use this endpoint to get a logged in user's session using a Session ID.\n * Inputting 'current' will return the current session being used.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getSession(sessionId: string): Promise {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update session\n *\n * Use this endpoint to extend a session's length. Extending a session is\n * useful when session expiry is short. If the session was created using an\n * OAuth provider, this endpoint refreshes the access token from the provider.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateSession(sessionId: string): Promise {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete session\n *\n * Logout the user. Use 'current' as the session ID to logout on this device,\n * use a session ID to logout on another device. If you're looking to logout\n * the user on all devices, use [Delete\n * Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions)\n * instead.\n *\n * @param {string} sessionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteSession(sessionId: string): Promise<{}> {\n if (typeof sessionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"sessionId\"');\n }\n\n const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update status\n *\n * Block the currently logged in user account. Behind the scene, the user\n * record is not deleted but permanently blocked from any access. To\n * completely delete a user, use the Users API instead.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateStatus(): Promise> {\n const apiPath = '/account/status';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create push target\n *\n *\n * @param {string} targetId\n * @param {string} identifier\n * @param {string} providerId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPushTarget(targetId: string, identifier: string, providerId?: string): Promise {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n\n if (typeof identifier === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identifier\"');\n }\n\n const apiPath = '/account/targets/push';\n const payload: Payload = {};\n\n if (typeof targetId !== 'undefined') {\n payload['targetId'] = targetId;\n }\n\n if (typeof identifier !== 'undefined') {\n payload['identifier'] = identifier;\n }\n\n if (typeof providerId !== 'undefined') {\n payload['providerId'] = providerId;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update push target\n *\n *\n * @param {string} targetId\n * @param {string} identifier\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePushTarget(targetId: string, identifier: string): Promise {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n\n if (typeof identifier === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"identifier\"');\n }\n\n const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId);\n const payload: Payload = {};\n\n if (typeof identifier !== 'undefined') {\n payload['identifier'] = identifier;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete push target\n *\n *\n * @param {string} targetId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deletePushTarget(targetId: string): Promise<{}> {\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n\n const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create email token (OTP)\n *\n * Sends the user an email with a secret key for creating a session. If the\n * provided user ID has not be registered, a new user will be created. Use the\n * returned user ID and secret and submit a request to the [POST\n * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession)\n * endpoint to complete the login process. The secret sent to the user's email\n * is valid for 15 minutes.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} userId\n * @param {string} email\n * @param {boolean} phrase\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createEmailToken(userId: string, email: string, phrase?: boolean): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n const apiPath = '/account/tokens/email';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof phrase !== 'undefined') {\n payload['phrase'] = phrase;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create magic URL token\n *\n * Sends the user an email with a secret key for creating a session. If the\n * provided user ID has not been registered, a new user will be created. When\n * the user clicks the link in the email, the user is redirected back to the\n * URL you provided with the secret key and userId values attached to the URL\n * query string. Use the query string parameters to submit a request to the\n * [POST\n * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession)\n * endpoint to complete the login process. The link sent to the user's email\n * address is valid for 1 hour. If you are on a mobile device you can leave\n * the URL parameter empty, so that the login completion will be handled by\n * your Appwrite instance by default.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n * \n *\n * @param {string} userId\n * @param {string} email\n * @param {string} url\n * @param {boolean} phrase\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMagicURLToken(userId: string, email: string, url?: string, phrase?: boolean): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof email === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"email\"');\n }\n\n const apiPath = '/account/tokens/magic-url';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n if (typeof phrase !== 'undefined') {\n payload['phrase'] = phrase;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create OAuth2 token\n *\n * Allow the user to login to their account using the OAuth2 provider of their\n * choice. Each OAuth2 provider should be enabled from the Appwrite console\n * first. Use the success and failure arguments to provide a redirect URL's\n * back to your app when login is completed. \n * \n * If authentication succeeds, `userId` and `secret` of a token will be\n * appended to the success URL as query parameters. These can be used to\n * create a new session using the [Create\n * session](https://appwrite.io/docs/references/cloud/client-web/account#createSession)\n * endpoint.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {OAuthProvider} provider\n * @param {string} success\n * @param {string} failure\n * @param {string[]} scopes\n * @throws {AppwriteException}\n * @returns {void|string}\n */\n createOAuth2Token(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): void | URL {\n if (typeof provider === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"provider\"');\n }\n\n const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider);\n const payload: Payload = {};\n\n if (typeof success !== 'undefined') {\n payload['success'] = success;\n }\n\n if (typeof failure !== 'undefined') {\n payload['failure'] = failure;\n }\n\n if (typeof scopes !== 'undefined') {\n payload['scopes'] = scopes;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n if (typeof window !== 'undefined' && window?.location) {\n window.location.href = uri.toString();\n } else {\n return uri;\n }\n }\n\n /**\n * Create phone token\n *\n * Sends the user an SMS with a secret key for creating a session. If the\n * provided user ID has not be registered, a new user will be created. Use the\n * returned user ID and secret and submit a request to the [POST\n * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession)\n * endpoint to complete the login process. The secret sent to the user's phone\n * is valid for 15 minutes.\n * \n * A user is limited to 10 active sessions at a time by default. [Learn more\n * about session\n * limits](https://appwrite.io/docs/authentication-security#limits).\n *\n * @param {string} userId\n * @param {string} phone\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPhoneToken(userId: string, phone: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof phone === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"phone\"');\n }\n\n const apiPath = '/account/tokens/phone';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create email verification\n *\n * Use this endpoint to send a verification message to your user email address\n * to confirm they are the valid owners of that address. Both the **userId**\n * and **secret** arguments will be passed as query parameters to the URL you\n * have provided to be attached to the verification email. The provided URL\n * should redirect the user back to your app and allow you to complete the\n * verification process by verifying both the **userId** and **secret**\n * parameters. Learn more about how to [complete the verification\n * process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification).\n * The verification link sent to the user's email address is valid for 7 days.\n * \n * Please note that in order to avoid a [Redirect\n * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md),\n * the only valid redirect URLs are the ones from domains you have set when\n * adding your platforms in the console interface.\n * \n *\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createVerification(url: string): Promise {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n\n const apiPath = '/account/verification';\n const payload: Payload = {};\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create email verification (confirmation)\n *\n * Use this endpoint to complete the user email verification process. Use both\n * the **userId** and **secret** parameters that were attached to your app URL\n * to verify the user email ownership. If confirmed this route will return a\n * 200 status code.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateVerification(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/account/verification';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create phone verification\n *\n * Use this endpoint to send a verification SMS to the currently logged in\n * user. This endpoint is meant for use after updating a user's phone number\n * using the\n * [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone)\n * endpoint. Learn more about how to [complete the verification\n * process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification).\n * The verification code sent to the user's phone number is valid for 15\n * minutes.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createPhoneVerification(): Promise {\n const apiPath = '/account/verification/phone';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create phone verification (confirmation)\n *\n * Use this endpoint to complete the user phone verification process. Use the\n * **userId** and **secret** that were sent to your user's phone number to\n * verify the user email ownership. If confirmed this route will return a 200\n * status code.\n *\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePhoneVerification(userId: string, secret: string): Promise {\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/account/verification/phone';\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\nimport { Browser } from '../enums/browser';\nimport { CreditCard } from '../enums/credit-card';\nimport { Flag } from '../enums/flag';\n\nexport class Avatars extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * Get browser icon\n *\n * You can use this endpoint to show different browser icons to your users.\n * The code argument receives the browser code as it appears in your user [GET\n * /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions)\n * endpoint. Use width, height and quality arguments to change the output\n * settings.\n * \n * When one dimension is specified and the other is 0, the image is scaled\n * with preserved aspect ratio. If both dimensions are 0, the API provides an\n * image at source quality. If dimensions are not specified, the default size\n * of image returned is 100x100px.\n *\n * @param {Browser} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getBrowser(code: Browser, width?: number, height?: number, quality?: number): URL {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n\n const apiPath = '/avatars/browsers/{code}'.replace('{code}', code);\n const payload: Payload = {};\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get credit card icon\n *\n * The credit card endpoint will return you the icon of the credit card\n * provider you need. Use width, height and quality arguments to change the\n * output settings.\n * \n * When one dimension is specified and the other is 0, the image is scaled\n * with preserved aspect ratio. If both dimensions are 0, the API provides an\n * image at source quality. If dimensions are not specified, the default size\n * of image returned is 100x100px.\n * \n *\n * @param {CreditCard} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getCreditCard(code: CreditCard, width?: number, height?: number, quality?: number): URL {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n\n const apiPath = '/avatars/credit-cards/{code}'.replace('{code}', code);\n const payload: Payload = {};\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get favicon\n *\n * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote\n * website URL.\n * \n *\n * @param {string} url\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getFavicon(url: string): URL {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n\n const apiPath = '/avatars/favicon';\n const payload: Payload = {};\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get country flag\n *\n * You can use this endpoint to show different country flags icons to your\n * users. The code argument receives the 2 letter country code. Use width,\n * height and quality arguments to change the output settings. Country codes\n * follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard.\n * \n * When one dimension is specified and the other is 0, the image is scaled\n * with preserved aspect ratio. If both dimensions are 0, the API provides an\n * image at source quality. If dimensions are not specified, the default size\n * of image returned is 100x100px.\n * \n *\n * @param {Flag} code\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getFlag(code: Flag, width?: number, height?: number, quality?: number): URL {\n if (typeof code === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"code\"');\n }\n\n const apiPath = '/avatars/flags/{code}'.replace('{code}', code);\n const payload: Payload = {};\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get image from URL\n *\n * Use this endpoint to fetch a remote image URL and crop it to any image size\n * you want. This endpoint is very useful if you need to crop and display\n * remote images in your app or in case you want to make sure a 3rd party\n * image is properly served using a TLS protocol.\n * \n * When one dimension is specified and the other is 0, the image is scaled\n * with preserved aspect ratio. If both dimensions are 0, the API provides an\n * image at source quality. If dimensions are not specified, the default size\n * of image returned is 400x400px.\n * \n *\n * @param {string} url\n * @param {number} width\n * @param {number} height\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getImage(url: string, width?: number, height?: number): URL {\n if (typeof url === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"url\"');\n }\n\n const apiPath = '/avatars/image';\n const payload: Payload = {};\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get user initials\n *\n * Use this endpoint to show your user initials avatar icon on your website or\n * app. By default, this route will try to print your logged-in user name or\n * email initials. You can also overwrite the user name if you pass the 'name'\n * parameter. If no name is given and no user is logged, an empty avatar will\n * be returned.\n * \n * You can use the color and background params to change the avatar colors. By\n * default, a random theme will be selected. The random theme will persist for\n * the user's initials when reloading the same theme will always return for\n * the same initials.\n * \n * When one dimension is specified and the other is 0, the image is scaled\n * with preserved aspect ratio. If both dimensions are 0, the API provides an\n * image at source quality. If dimensions are not specified, the default size\n * of image returned is 100x100px.\n * \n *\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @param {string} background\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getInitials(name?: string, width?: number, height?: number, background?: string): URL {\n const apiPath = '/avatars/initials';\n const payload: Payload = {};\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n if (typeof background !== 'undefined') {\n payload['background'] = background;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get QR code\n *\n * Converts a given plain text to a QR code image. You can use the query\n * parameters to change the size and style of the resulting image.\n * \n *\n * @param {string} text\n * @param {number} size\n * @param {number} margin\n * @param {boolean} download\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getQR(text: string, size?: number, margin?: number, download?: boolean): URL {\n if (typeof text === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"text\"');\n }\n\n const apiPath = '/avatars/qr';\n const payload: Payload = {};\n\n if (typeof text !== 'undefined') {\n payload['text'] = text;\n }\n\n if (typeof size !== 'undefined') {\n payload['size'] = size;\n }\n\n if (typeof margin !== 'undefined') {\n payload['margin'] = margin;\n }\n\n if (typeof download !== 'undefined') {\n payload['download'] = download;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\n\nexport class Databases extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * List documents\n *\n * Get a list of all the user's documents in a given collection. You can use\n * the query params to filter your results.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listDocuments(databaseId: string, collectionId: string, queries?: string[]): Promise> {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId);\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create document\n *\n * Create a new Document. Before using this route, you should create a new\n * collection resource using either a [server\n * integration](https://appwrite.io/docs/server/databases#databasesCreateCollection)\n * API or directly from your database console.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {Omit} data\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createDocument(databaseId: string, collectionId: string, documentId: string, data: Omit, permissions?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n\n if (typeof data === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"data\"');\n }\n\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId);\n const payload: Payload = {};\n\n if (typeof documentId !== 'undefined') {\n payload['documentId'] = documentId;\n }\n\n if (typeof data !== 'undefined') {\n payload['data'] = data;\n }\n\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get document\n *\n * Get a document by its unique ID. This endpoint response returns a JSON\n * object with the document data.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {string[]} queries\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getDocument(databaseId: string, collectionId: string, documentId: string, queries?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update document\n *\n * Update a document by its unique ID. Using the patch method you can pass\n * only specific fields that will get updated.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @param {Partial>} data\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateDocument(databaseId: string, collectionId: string, documentId: string, data?: Partial>, permissions?: string[]): Promise {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n\n if (typeof data !== 'undefined') {\n payload['data'] = data;\n }\n\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete document\n *\n * Delete a document by its unique ID.\n *\n * @param {string} databaseId\n * @param {string} collectionId\n * @param {string} documentId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteDocument(databaseId: string, collectionId: string, documentId: string): Promise<{}> {\n if (typeof databaseId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"databaseId\"');\n }\n\n if (typeof collectionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"collectionId\"');\n }\n\n if (typeof documentId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"documentId\"');\n }\n\n const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\nimport { ExecutionMethod } from '../enums/execution-method';\n\nexport class Functions extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * List executions\n *\n * Get a list of all the current user function execution logs. You can use the\n * query params to filter your results.\n *\n * @param {string} functionId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listExecutions(functionId: string, queries?: string[], search?: string): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n\n const apiPath = '/functions/{functionId}/executions'.replace('{functionId}', functionId);\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create execution\n *\n * Trigger a function execution. The returned object will return you the\n * current execution status. You can ping the `Get Execution` endpoint to get\n * updates on the current execution status. Once this endpoint is called, your\n * function execution process will start asynchronously.\n *\n * @param {string} functionId\n * @param {string} body\n * @param {boolean} async\n * @param {string} xpath\n * @param {ExecutionMethod} method\n * @param {object} headers\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createExecution(functionId: string, body?: string, async?: boolean, xpath?: string, method?: ExecutionMethod, headers?: object): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n\n const apiPath = '/functions/{functionId}/executions'.replace('{functionId}', functionId);\n const payload: Payload = {};\n\n if (typeof body !== 'undefined') {\n payload['body'] = body;\n }\n\n if (typeof async !== 'undefined') {\n payload['async'] = async;\n }\n\n if (typeof xpath !== 'undefined') {\n payload['path'] = xpath;\n }\n\n if (typeof method !== 'undefined') {\n payload['method'] = method;\n }\n\n if (typeof headers !== 'undefined') {\n payload['headers'] = headers;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get execution\n *\n * Get a function execution log by its unique ID.\n *\n * @param {string} functionId\n * @param {string} executionId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getExecution(functionId: string, executionId: string): Promise {\n if (typeof functionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"functionId\"');\n }\n\n if (typeof executionId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"executionId\"');\n }\n\n const apiPath = '/functions/{functionId}/executions/{executionId}'.replace('{functionId}', functionId).replace('{executionId}', executionId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\n\nexport class Graphql extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * GraphQL endpoint\n *\n * Execute a GraphQL mutation.\n *\n * @param {object} query\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async query(query: object): Promise<{}> {\n if (typeof query === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"query\"');\n }\n\n const apiPath = '/graphql';\n const payload: Payload = {};\n\n if (typeof query !== 'undefined') {\n payload['query'] = query;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'x-sdk-graphql': 'true',\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * GraphQL endpoint\n *\n * Execute a GraphQL mutation.\n *\n * @param {object} query\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async mutation(query: object): Promise<{}> {\n if (typeof query === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"query\"');\n }\n\n const apiPath = '/graphql/mutation';\n const payload: Payload = {};\n\n if (typeof query !== 'undefined') {\n payload['query'] = query;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'x-sdk-graphql': 'true',\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\n\nexport class Locale extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * Get user locale\n *\n * Get the current user location based on IP. Returns an object with user\n * country code, country name, continent name, continent code, ip address and\n * suggested currency. You can use the locale header to get the data in a\n * supported language.\n * \n * ([IP Geolocation by DB-IP](https://db-ip.com))\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async get(): Promise {\n const apiPath = '/locale';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List Locale Codes\n *\n * List of all locale codes in [ISO\n * 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes).\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCodes(): Promise {\n const apiPath = '/locale/codes';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List continents\n *\n * List of all continents. You can use the locale header to get the data in a\n * supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listContinents(): Promise {\n const apiPath = '/locale/continents';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List countries\n *\n * List of all countries. You can use the locale header to get the data in a\n * supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountries(): Promise {\n const apiPath = '/locale/countries';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List EU countries\n *\n * List of all countries that are currently members of the EU. You can use the\n * locale header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountriesEU(): Promise {\n const apiPath = '/locale/countries/eu';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List countries phone codes\n *\n * List of all countries phone codes. You can use the locale header to get the\n * data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCountriesPhones(): Promise {\n const apiPath = '/locale/countries/phones';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List currencies\n *\n * List of all currencies, including currency symbol, name, plural, and\n * decimal digits for all major and minor currencies. You can use the locale\n * header to get the data in a supported language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listCurrencies(): Promise {\n const apiPath = '/locale/currencies';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List languages\n *\n * List of all languages classified by ISO 639-1 including 2-letter code, name\n * in English, and name in the respective language.\n *\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listLanguages(): Promise {\n const apiPath = '/locale/languages';\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\n\nexport class Messaging extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * Create subscriber\n *\n * Create a new subscriber.\n *\n * @param {string} topicId\n * @param {string} subscriberId\n * @param {string} targetId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createSubscriber(topicId: string, subscriberId: string, targetId: string): Promise {\n if (typeof topicId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"topicId\"');\n }\n\n if (typeof subscriberId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"subscriberId\"');\n }\n\n if (typeof targetId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"targetId\"');\n }\n\n const apiPath = '/messaging/topics/{topicId}/subscribers'.replace('{topicId}', topicId);\n const payload: Payload = {};\n\n if (typeof subscriberId !== 'undefined') {\n payload['subscriberId'] = subscriberId;\n }\n\n if (typeof targetId !== 'undefined') {\n payload['targetId'] = targetId;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete subscriber\n *\n * Delete a subscriber by its unique ID.\n *\n * @param {string} topicId\n * @param {string} subscriberId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteSubscriber(topicId: string, subscriberId: string): Promise<{}> {\n if (typeof topicId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"topicId\"');\n }\n\n if (typeof subscriberId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"subscriberId\"');\n }\n\n const apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}'.replace('{topicId}', topicId).replace('{subscriberId}', subscriberId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\nimport { ImageGravity } from '../enums/image-gravity';\nimport { ImageFormat } from '../enums/image-format';\n\nexport class Storage extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * List files\n *\n * Get a list of all the user files. You can use the query params to filter\n * your results.\n *\n * @param {string} bucketId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listFiles(bucketId: string, queries?: string[], search?: string): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files'.replace('{bucketId}', bucketId);\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create file\n *\n * Create a new file. Before using this route, you should create a new bucket\n * resource using either a [server\n * integration](https://appwrite.io/docs/server/storage#storageCreateBucket)\n * API or directly from your Appwrite console.\n * \n * Larger files should be uploaded using multiple requests with the\n * [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range)\n * header to send a partial request with a maximum supported chunk of `5MB`.\n * The `content-range` header values should always be in bytes.\n * \n * When the first request is sent, the server will return the **File** object,\n * and the subsequent part request must include the file's **id** in\n * `x-appwrite-id` header to allow the server to know that the partial upload\n * is for the existing file and not for a new one.\n * \n * If you're creating a new file using one of the Appwrite SDKs, all the\n * chunking logic will be managed by the SDK internally.\n * \n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {File} file\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createFile(bucketId: string, fileId: string, file: File, permissions?: string[], onProgress = (progress: UploadProgress) => {}): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n if (typeof file === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"file\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files'.replace('{bucketId}', bucketId);\n const payload: Payload = {};\n\n if (typeof fileId !== 'undefined') {\n payload['fileId'] = fileId;\n }\n\n if (typeof file !== 'undefined') {\n payload['file'] = file;\n }\n\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n\n if(!(file instanceof File)) {\n throw new AppwriteException('Parameter \"file\" has to be a File.');\n }\n\n const size = file.size;\n\n if (size <= Service.CHUNK_SIZE) {\n return await this.client.call('post', uri, {\n 'content-type': 'multipart/form-data',\n }, payload);\n }\n\n const apiHeaders: { [header: string]: string } = {\n 'content-type': 'multipart/form-data',\n }\n\n let offset = 0;\n let response = undefined;\n if(fileId != 'unique()') {\n try {\n response = await this.client.call('GET', new URL(this.client.config.endpoint + apiPath + '/' + fileId), apiHeaders);\n offset = response.chunksUploaded * Service.CHUNK_SIZE;\n } catch(e) {\n }\n }\n\n while (offset < size) {\n let end = Math.min(offset + Service.CHUNK_SIZE - 1, size - 1);\n\n apiHeaders['content-range'] = 'bytes ' + offset + '-' + end + '/' + size;\n if (response && response.$id) {\n apiHeaders['x-appwrite-id'] = response.$id;\n }\n\n const chunk = file.slice(offset, end + 1);\n payload['file'] = new File([chunk], file.name);\n response = await this.client.call('post', uri, apiHeaders, payload);\n\n if (onProgress) {\n onProgress({\n $id: response.$id,\n progress: (offset / size) * 100,\n sizeUploaded: offset,\n chunksTotal: response.chunksTotal,\n chunksUploaded: response.chunksUploaded\n });\n }\n offset += Service.CHUNK_SIZE;\n }\n return response;\n }\n\n /**\n * Get file\n *\n * Get a file by its unique ID. This endpoint response returns a JSON object\n * with the file metadata.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getFile(bucketId: string, fileId: string): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update file\n *\n * Update a file by its unique ID. Only users with write permissions have\n * access to update this resource.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {string} name\n * @param {string[]} permissions\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateFile(bucketId: string, fileId: string, name?: string, permissions?: string[]): Promise {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n if (typeof permissions !== 'undefined') {\n payload['permissions'] = permissions;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete File\n *\n * Delete a file by its unique ID. Only users with write permissions have\n * access to delete this resource.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteFile(bucketId: string, fileId: string): Promise<{}> {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get file for download\n *\n * Get a file content by its unique ID. The endpoint response return with a\n * 'Content-Disposition: attachment' header that tells the browser to start\n * downloading the file to user downloads directory.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getFileDownload(bucketId: string, fileId: string): URL {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get file preview\n *\n * Get a file preview image. Currently, this method supports preview for image\n * files (jpg, png, and gif), other supported formats, like pdf, docs, slides,\n * and spreadsheets, will return the file icon image. You can also pass query\n * string arguments for cutting and resizing your preview image. Preview is\n * supported only for image files smaller than 10MB.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @param {number} width\n * @param {number} height\n * @param {ImageGravity} gravity\n * @param {number} quality\n * @param {number} borderWidth\n * @param {string} borderColor\n * @param {number} borderRadius\n * @param {number} opacity\n * @param {number} rotation\n * @param {string} background\n * @param {ImageFormat} output\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getFilePreview(bucketId: string, fileId: string, width?: number, height?: number, gravity?: ImageGravity, quality?: number, borderWidth?: number, borderColor?: string, borderRadius?: number, opacity?: number, rotation?: number, background?: string, output?: ImageFormat): URL {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n if (typeof width !== 'undefined') {\n payload['width'] = width;\n }\n\n if (typeof height !== 'undefined') {\n payload['height'] = height;\n }\n\n if (typeof gravity !== 'undefined') {\n payload['gravity'] = gravity;\n }\n\n if (typeof quality !== 'undefined') {\n payload['quality'] = quality;\n }\n\n if (typeof borderWidth !== 'undefined') {\n payload['borderWidth'] = borderWidth;\n }\n\n if (typeof borderColor !== 'undefined') {\n payload['borderColor'] = borderColor;\n }\n\n if (typeof borderRadius !== 'undefined') {\n payload['borderRadius'] = borderRadius;\n }\n\n if (typeof opacity !== 'undefined') {\n payload['opacity'] = opacity;\n }\n\n if (typeof rotation !== 'undefined') {\n payload['rotation'] = rotation;\n }\n\n if (typeof background !== 'undefined') {\n payload['background'] = background;\n }\n\n if (typeof output !== 'undefined') {\n payload['output'] = output;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n\n /**\n * Get file for view\n *\n * Get a file content by its unique ID. This endpoint is similar to the\n * download method but returns with no 'Content-Disposition: attachment'\n * header.\n *\n * @param {string} bucketId\n * @param {string} fileId\n * @throws {AppwriteException}\n * @returns {URL}\n */\n getFileView(bucketId: string, fileId: string): URL {\n if (typeof bucketId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"bucketId\"');\n }\n\n if (typeof fileId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"fileId\"');\n }\n\n const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view'.replace('{bucketId}', bucketId).replace('{fileId}', fileId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n payload['project'] = this.client.config.project;\n\n\n for (const [key, value] of Object.entries(Service.flatten(payload))) {\n uri.searchParams.append(key, value);\n }\n return uri;\n }\n};\n","import { Service } from '../service';\nimport { AppwriteException, Client } from '../client';\nimport type { Models } from '../models';\nimport type { UploadProgress, Payload } from '../client';\n\nexport class Teams extends Service {\n\n constructor(client: Client)\n {\n super(client);\n }\n\n /**\n * List teams\n *\n * Get a list of all the teams in which the current user is a member. You can\n * use the parameters to filter your results.\n *\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async list(queries?: string[], search?: string): Promise> {\n const apiPath = '/teams';\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create team\n *\n * Create a new team. The user who creates the team will automatically be\n * assigned as the owner of the team. Only the users with the owner role can\n * invite new members, add new owners and delete or update the team.\n *\n * @param {string} teamId\n * @param {string} name\n * @param {string[]} roles\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async create(teamId: string, name: string, roles?: string[]): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n\n const apiPath = '/teams';\n const payload: Payload = {};\n\n if (typeof teamId !== 'undefined') {\n payload['teamId'] = teamId;\n }\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get team\n *\n * Get a team by its ID. All team members have read access for this resource.\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async get(teamId: string): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update name\n *\n * Update the team's name by its unique ID.\n *\n * @param {string} teamId\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateName(teamId: string, name: string): Promise> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof name === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"name\"');\n }\n\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete team\n *\n * Delete a team using its ID. Only team members with the owner role can\n * delete the team.\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async delete(teamId: string): Promise<{}> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * List team memberships\n *\n * Use this endpoint to list a team's members using the team's ID. All team\n * members have read access to this endpoint.\n *\n * @param {string} teamId\n * @param {string[]} queries\n * @param {string} search\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async listMemberships(teamId: string, queries?: string[], search?: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n if (typeof queries !== 'undefined') {\n payload['queries'] = queries;\n }\n\n if (typeof search !== 'undefined') {\n payload['search'] = search;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Create team membership\n *\n * Invite a new member to join your team. Provide an ID for existing users, or\n * invite unregistered users using an email or phone number. If initiated from\n * a Client SDK, Appwrite will send an email or sms with a link to join the\n * team to the invited user, and an account will be created for them if one\n * doesn't exist. If initiated from a Server SDK, the new member will be added\n * automatically to the team.\n * \n * You only need to provide one of a user ID, email, or phone number. Appwrite\n * will prioritize accepting the user ID > email > phone number if you provide\n * more than one of these parameters.\n * \n * Use the `url` parameter to redirect the user from the invitation email to\n * your app. After the user is redirected, use the [Update Team Membership\n * Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus)\n * endpoint to allow the user to accept the invitation to the team. \n * \n * Please note that to avoid a [Redirect\n * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md)\n * Appwrite will accept the only redirect URLs under the domains you have\n * added as a platform on the Appwrite Console.\n * \n *\n * @param {string} teamId\n * @param {string[]} roles\n * @param {string} email\n * @param {string} userId\n * @param {string} phone\n * @param {string} url\n * @param {string} name\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async createMembership(teamId: string, roles: string[], email?: string, userId?: string, phone?: string, url?: string, name?: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof roles === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"roles\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n if (typeof email !== 'undefined') {\n payload['email'] = email;\n }\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof phone !== 'undefined') {\n payload['phone'] = phone;\n }\n\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n\n if (typeof url !== 'undefined') {\n payload['url'] = url;\n }\n\n if (typeof name !== 'undefined') {\n payload['name'] = name;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('post', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get team membership\n *\n * Get a team member by the membership unique id. All team members have read\n * access for this resource.\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getMembership(teamId: string, membershipId: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update membership\n *\n * Modify the roles of a team member. Only team members with the owner role\n * have access to this endpoint. Learn more about [roles and\n * permissions](https://appwrite.io/docs/permissions).\n * \n *\n * @param {string} teamId\n * @param {string} membershipId\n * @param {string[]} roles\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMembership(teamId: string, membershipId: string, roles: string[]): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n\n if (typeof roles === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"roles\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n\n if (typeof roles !== 'undefined') {\n payload['roles'] = roles;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Delete team membership\n *\n * This endpoint allows a user to leave a team or for a team owner to delete\n * the membership of any other team member. You can also use this endpoint to\n * delete a user membership even if it is not accepted.\n *\n * @param {string} teamId\n * @param {string} membershipId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async deleteMembership(teamId: string, membershipId: string): Promise<{}> {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('delete', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update team membership status\n *\n * Use this endpoint to allow a user to accept an invitation to join a team\n * after being redirected back to your app from the invitation email received\n * by the user.\n * \n * If the request is successful, a session for the user is automatically\n * created.\n * \n *\n * @param {string} teamId\n * @param {string} membershipId\n * @param {string} userId\n * @param {string} secret\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updateMembershipStatus(teamId: string, membershipId: string, userId: string, secret: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof membershipId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"membershipId\"');\n }\n\n if (typeof userId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"userId\"');\n }\n\n if (typeof secret === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"secret\"');\n }\n\n const apiPath = '/teams/{teamId}/memberships/{membershipId}/status'.replace('{teamId}', teamId).replace('{membershipId}', membershipId);\n const payload: Payload = {};\n\n if (typeof userId !== 'undefined') {\n payload['userId'] = userId;\n }\n\n if (typeof secret !== 'undefined') {\n payload['secret'] = secret;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('patch', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Get team preferences\n *\n * Get the team's shared preferences by its unique ID. If a preference doesn't\n * need to be shared by all team members, prefer storing them in [user\n * preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs).\n *\n * @param {string} teamId\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async getPrefs(teamId: string): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('get', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n\n /**\n * Update preferences\n *\n * Update the team's preferences by its unique ID. The object you pass is\n * stored as is and replaces any previous value. The maximum allowed prefs\n * size is 64kB and throws an error if exceeded.\n *\n * @param {string} teamId\n * @param {object} prefs\n * @throws {AppwriteException}\n * @returns {Promise}\n */\n async updatePrefs(teamId: string, prefs: object): Promise {\n if (typeof teamId === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"teamId\"');\n }\n\n if (typeof prefs === 'undefined') {\n throw new AppwriteException('Missing required parameter: \"prefs\"');\n }\n\n const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId);\n const payload: Payload = {};\n\n if (typeof prefs !== 'undefined') {\n payload['prefs'] = prefs;\n }\n\n const uri = new URL(this.client.config.endpoint + apiPath);\n return await this.client.call('put', uri, {\n 'content-type': 'application/json',\n }, payload);\n }\n};\n","export class Permission {\n\n static read = (role: string): string => {\n return `read(\"${role}\")`\n }\n\n static write = (role: string): string => {\n return `write(\"${role}\")`\n }\n\n static create = (role: string): string => {\n return `create(\"${role}\")`\n }\n\n static update = (role: string): string => {\n return `update(\"${role}\")`\n }\n\n static delete = (role: string): string => {\n return `delete(\"${role}\")`\n }\n}\n","/**\n * Helper class to generate role strings for `Permission`.\n */\nexport class Role {\n\n /**\n * Grants access to anyone.\n * \n * This includes authenticated and unauthenticated users.\n * \n * @returns {string}\n */\n public static any(): string {\n return 'any'\n }\n\n /**\n * Grants access to a specific user by user ID.\n * \n * You can optionally pass verified or unverified for\n * `status` to target specific types of users.\n *\n * @param {string} id \n * @param {string} status \n * @returns {string}\n */\n public static user(id: string, status: string = ''): string {\n if (status === '') {\n return `user:${id}`\n }\n return `user:${id}/${status}`\n }\n\n /**\n * Grants access to any authenticated or anonymous user.\n * \n * You can optionally pass verified or unverified for\n * `status` to target specific types of users.\n * \n * @param {string} status \n * @returns {string}\n */\n public static users(status: string = ''): string {\n if (status === '') {\n return 'users'\n }\n return `users/${status}`\n }\n\n /**\n * Grants access to any guest user without a session.\n * \n * Authenticated users don't have access to this role.\n * \n * @returns {string}\n */\n public static guests(): string {\n return 'guests'\n }\n\n /**\n * Grants access to a team by team ID.\n * \n * You can optionally pass a role for `role` to target\n * team members with the specified role.\n * \n * @param {string} id \n * @param {string} role \n * @returns {string}\n */\n public static team(id: string, role: string = ''): string {\n if (role === '') {\n return `team:${id}`\n }\n return `team:${id}/${role}`\n }\n\n /**\n * Grants access to a specific member of a team.\n * \n * When the member is removed from the team, they will\n * no longer have access.\n * \n * @param {string} id \n * @returns {string}\n */\n public static member(id: string): string {\n return `member:${id}`\n }\n\n /**\n * Grants access to a user with the specified label.\n * \n * @param {string} name \n * @returns {string}\n */\n public static label(name: string): string {\n return `label:${name}`\n }\n}","export class ID {\n // Generate an hex ID based on timestamp\n // Recreated from https://www.php.net/manual/en/function.uniqid.php\n static #hexTimestamp(): string {\n const now = new Date();\n const sec = Math.floor(now.getTime() / 1000);\n const msec = now.getMilliseconds();\n\n // Convert to hexadecimal\n const hexTimestamp = sec.toString(16) + msec.toString(16).padStart(5, '0');\n return hexTimestamp;\n }\n\n public static custom(id: string): string {\n return id\n }\n\n public static unique(padding: number = 7): string {\n // Generate a unique ID with padding to have a longer ID\n const baseId = ID.#hexTimestamp();\n let randomPadding = '';\n for (let i = 0; i < padding; i++) {\n const randomHexDigit = Math.floor(Math.random() * 16).toString(16);\n randomPadding += randomHexDigit;\n }\n return baseId + randomPadding;\n }\n}\n","export enum AuthenticatorType {\n Totp = 'totp',\n}","export enum AuthenticationFactor {\n Email = 'email',\n Phone = 'phone',\n Totp = 'totp',\n Recoverycode = 'recoverycode',\n}","export enum OAuthProvider {\n Amazon = 'amazon',\n Apple = 'apple',\n Auth0 = 'auth0',\n Authentik = 'authentik',\n Autodesk = 'autodesk',\n Bitbucket = 'bitbucket',\n Bitly = 'bitly',\n Box = 'box',\n Dailymotion = 'dailymotion',\n Discord = 'discord',\n Disqus = 'disqus',\n Dropbox = 'dropbox',\n Etsy = 'etsy',\n Facebook = 'facebook',\n Github = 'github',\n Gitlab = 'gitlab',\n Google = 'google',\n Linkedin = 'linkedin',\n Microsoft = 'microsoft',\n Notion = 'notion',\n Oidc = 'oidc',\n Okta = 'okta',\n Paypal = 'paypal',\n PaypalSandbox = 'paypalSandbox',\n Podio = 'podio',\n Salesforce = 'salesforce',\n Slack = 'slack',\n Spotify = 'spotify',\n Stripe = 'stripe',\n Tradeshift = 'tradeshift',\n TradeshiftBox = 'tradeshiftBox',\n Twitch = 'twitch',\n Wordpress = 'wordpress',\n Yahoo = 'yahoo',\n Yammer = 'yammer',\n Yandex = 'yandex',\n Zoho = 'zoho',\n Zoom = 'zoom',\n Mock = 'mock',\n}","export enum Browser {\n AvantBrowser = 'aa',\n AndroidWebViewBeta = 'an',\n GoogleChrome = 'ch',\n GoogleChromeIOS = 'ci',\n GoogleChromeMobile = 'cm',\n Chromium = 'cr',\n MozillaFirefox = 'ff',\n Safari = 'sf',\n MobileSafari = 'mf',\n MicrosoftEdge = 'ps',\n MicrosoftEdgeIOS = 'oi',\n OperaMini = 'om',\n Opera = 'op',\n OperaNext = 'on',\n}","export enum CreditCard {\n AmericanExpress = 'amex',\n Argencard = 'argencard',\n Cabal = 'cabal',\n Consosud = 'censosud',\n DinersClub = 'diners',\n Discover = 'discover',\n Elo = 'elo',\n Hipercard = 'hipercard',\n JCB = 'jcb',\n Mastercard = 'mastercard',\n Naranja = 'naranja',\n TarjetaShopping = 'targeta-shopping',\n UnionChinaPay = 'union-china-pay',\n Visa = 'visa',\n MIR = 'mir',\n Maestro = 'maestro',\n}","export enum Flag {\n Afghanistan = 'af',\n Angola = 'ao',\n Albania = 'al',\n Andorra = 'ad',\n UnitedArabEmirates = 'ae',\n Argentina = 'ar',\n Armenia = 'am',\n AntiguaAndBarbuda = 'ag',\n Australia = 'au',\n Austria = 'at',\n Azerbaijan = 'az',\n Burundi = 'bi',\n Belgium = 'be',\n Benin = 'bj',\n BurkinaFaso = 'bf',\n Bangladesh = 'bd',\n Bulgaria = 'bg',\n Bahrain = 'bh',\n Bahamas = 'bs',\n BosniaAndHerzegovina = 'ba',\n Belarus = 'by',\n Belize = 'bz',\n Bolivia = 'bo',\n Brazil = 'br',\n Barbados = 'bb',\n BruneiDarussalam = 'bn',\n Bhutan = 'bt',\n Botswana = 'bw',\n CentralAfricanRepublic = 'cf',\n Canada = 'ca',\n Switzerland = 'ch',\n Chile = 'cl',\n China = 'cn',\n CoteDIvoire = 'ci',\n Cameroon = 'cm',\n DemocraticRepublicOfTheCongo = 'cd',\n RepublicOfTheCongo = 'cg',\n Colombia = 'co',\n Comoros = 'km',\n CapeVerde = 'cv',\n CostaRica = 'cr',\n Cuba = 'cu',\n Cyprus = 'cy',\n CzechRepublic = 'cz',\n Germany = 'de',\n Djibouti = 'dj',\n Dominica = 'dm',\n Denmark = 'dk',\n DominicanRepublic = 'do',\n Algeria = 'dz',\n Ecuador = 'ec',\n Egypt = 'eg',\n Eritrea = 'er',\n Spain = 'es',\n Estonia = 'ee',\n Ethiopia = 'et',\n Finland = 'fi',\n Fiji = 'fj',\n France = 'fr',\n MicronesiaFederatedStatesOf = 'fm',\n Gabon = 'ga',\n UnitedKingdom = 'gb',\n Georgia = 'ge',\n Ghana = 'gh',\n Guinea = 'gn',\n Gambia = 'gm',\n GuineaBissau = 'gw',\n EquatorialGuinea = 'gq',\n Greece = 'gr',\n Grenada = 'gd',\n Guatemala = 'gt',\n Guyana = 'gy',\n Honduras = 'hn',\n Croatia = 'hr',\n Haiti = 'ht',\n Hungary = 'hu',\n Indonesia = 'id',\n India = 'in',\n Ireland = 'ie',\n IranIslamicRepublicOf = 'ir',\n Iraq = 'iq',\n Iceland = 'is',\n Israel = 'il',\n Italy = 'it',\n Jamaica = 'jm',\n Jordan = 'jo',\n Japan = 'jp',\n Kazakhstan = 'kz',\n Kenya = 'ke',\n Kyrgyzstan = 'kg',\n Cambodia = 'kh',\n Kiribati = 'ki',\n SaintKittsAndNevis = 'kn',\n SouthKorea = 'kr',\n Kuwait = 'kw',\n LaoPeopleSDemocraticRepublic = 'la',\n Lebanon = 'lb',\n Liberia = 'lr',\n Libya = 'ly',\n SaintLucia = 'lc',\n Liechtenstein = 'li',\n SriLanka = 'lk',\n Lesotho = 'ls',\n Lithuania = 'lt',\n Luxembourg = 'lu',\n Latvia = 'lv',\n Morocco = 'ma',\n Monaco = 'mc',\n Moldova = 'md',\n Madagascar = 'mg',\n Maldives = 'mv',\n Mexico = 'mx',\n MarshallIslands = 'mh',\n NorthMacedonia = 'mk',\n Mali = 'ml',\n Malta = 'mt',\n Myanmar = 'mm',\n Montenegro = 'me',\n Mongolia = 'mn',\n Mozambique = 'mz',\n Mauritania = 'mr',\n Mauritius = 'mu',\n Malawi = 'mw',\n Malaysia = 'my',\n Namibia = 'na',\n Niger = 'ne',\n Nigeria = 'ng',\n Nicaragua = 'ni',\n Netherlands = 'nl',\n Norway = 'no',\n Nepal = 'np',\n Nauru = 'nr',\n NewZealand = 'nz',\n Oman = 'om',\n Pakistan = 'pk',\n Panama = 'pa',\n Peru = 'pe',\n Philippines = 'ph',\n Palau = 'pw',\n PapuaNewGuinea = 'pg',\n Poland = 'pl',\n NorthKorea = 'kp',\n Portugal = 'pt',\n Paraguay = 'py',\n Qatar = 'qa',\n Romania = 'ro',\n Russia = 'ru',\n Rwanda = 'rw',\n SaudiArabia = 'sa',\n Sudan = 'sd',\n Senegal = 'sn',\n Singapore = 'sg',\n SolomonIslands = 'sb',\n SierraLeone = 'sl',\n ElSalvador = 'sv',\n SanMarino = 'sm',\n Somalia = 'so',\n Serbia = 'rs',\n SouthSudan = 'ss',\n SaoTomeAndPrincipe = 'st',\n Suriname = 'sr',\n Slovakia = 'sk',\n Slovenia = 'si',\n Sweden = 'se',\n Eswatini = 'sz',\n Seychelles = 'sc',\n Syria = 'sy',\n Chad = 'td',\n Togo = 'tg',\n Thailand = 'th',\n Tajikistan = 'tj',\n Turkmenistan = 'tm',\n TimorLeste = 'tl',\n Tonga = 'to',\n TrinidadAndTobago = 'tt',\n Tunisia = 'tn',\n Turkey = 'tr',\n Tuvalu = 'tv',\n Tanzania = 'tz',\n Uganda = 'ug',\n Ukraine = 'ua',\n Uruguay = 'uy',\n UnitedStates = 'us',\n Uzbekistan = 'uz',\n VaticanCity = 'va',\n SaintVincentAndTheGrenadines = 'vc',\n Venezuela = 've',\n Vietnam = 'vn',\n Vanuatu = 'vu',\n Samoa = 'ws',\n Yemen = 'ye',\n SouthAfrica = 'za',\n Zambia = 'zm',\n Zimbabwe = 'zw',\n}","export enum ExecutionMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n DELETE = 'DELETE',\n OPTIONS = 'OPTIONS',\n}","export enum ImageGravity {\n Center = 'center',\n Topleft = 'top-left',\n Top = 'top',\n Topright = 'top-right',\n Left = 'left',\n Right = 'right',\n Bottomleft = 'bottom-left',\n Bottom = 'bottom',\n Bottomright = 'bottom-right',\n}","export enum ImageFormat {\n Jpg = 'jpg',\n Jpeg = 'jpeg',\n Gif = 'gif',\n Png = 'png',\n Webp = 'webp',\n}"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/appwrite/dist/iife/sdk.js b/node_modules/appwrite/dist/iife/sdk.js index 0713da7..8404dba 100644 --- a/node_modules/appwrite/dist/iife/sdk.js +++ b/node_modules/appwrite/dist/iife/sdk.js @@ -1,4 +1,4 @@ -(function (exports) { +(function (exports, isomorphicFormData, crossFetch) { 'use strict'; /****************************************************************************** @@ -32,17 +32,27 @@ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); } - /** - * Helper class to generate query strings. - */ + class Service { + constructor(client) { + this.client = client; + } + static flatten(data, prefix = '') { + let output = {}; + for (const [key, value] of Object.entries(data)) { + let finalKey = prefix ? prefix + '[' + key + ']' : key; + if (Array.isArray(value)) { + output = Object.assign(Object.assign({}, output), Service.flatten(value, finalKey)); + } + else { + output[finalKey] = value; + } + } + return output; + } + } + Service.CHUNK_SIZE = 5 * 1024 * 1024; // 5MB + class Query { - /** - * Constructor for Query class. - * - * @param {string} method - * @param {AttributesTypes} attribute - * @param {QueryTypes} values - */ constructor(method, attribute, values) { this.method = method; this.attribute = attribute; @@ -55,11 +65,6 @@ } } } - /** - * Convert the query object to a JSON string. - * - * @returns {string} - */ toString() { return JSON.stringify({ method: this.method, @@ -68,186 +73,30 @@ }); } } - /** - * Filter resources where attribute is equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.equal = (attribute, value) => new Query("equal", attribute, value).toString(); - /** - * Filter resources where attribute is not equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.notEqual = (attribute, value) => new Query("notEqual", attribute, value).toString(); - /** - * Filter resources where attribute is less than value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.lessThan = (attribute, value) => new Query("lessThan", attribute, value).toString(); - /** - * Filter resources where attribute is less than or equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.lessThanEqual = (attribute, value) => new Query("lessThanEqual", attribute, value).toString(); - /** - * Filter resources where attribute is greater than value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.greaterThan = (attribute, value) => new Query("greaterThan", attribute, value).toString(); - /** - * Filter resources where attribute is greater than or equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ Query.greaterThanEqual = (attribute, value) => new Query("greaterThanEqual", attribute, value).toString(); - /** - * Filter resources where attribute is null. - * - * @param {string} attribute - * @returns {string} - */ Query.isNull = (attribute) => new Query("isNull", attribute).toString(); - /** - * Filter resources where attribute is not null. - * - * @param {string} attribute - * @returns {string} - */ Query.isNotNull = (attribute) => new Query("isNotNull", attribute).toString(); - /** - * Filter resources where attribute is between start and end (inclusive). - * - * @param {string} attribute - * @param {string | number} start - * @param {string | number} end - * @returns {string} - */ Query.between = (attribute, start, end) => new Query("between", attribute, [start, end]).toString(); - /** - * Filter resources where attribute starts with value. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ Query.startsWith = (attribute, value) => new Query("startsWith", attribute, value).toString(); - /** - * Filter resources where attribute ends with value. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ Query.endsWith = (attribute, value) => new Query("endsWith", attribute, value).toString(); - /** - * Specify which attributes should be returned by the API call. - * - * @param {string[]} attributes - * @returns {string} - */ Query.select = (attributes) => new Query("select", undefined, attributes).toString(); - /** - * Filter resources by searching attribute for value. - * A fulltext index on attribute is required for this query to work. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ Query.search = (attribute, value) => new Query("search", attribute, value).toString(); - /** - * Sort results by attribute descending. - * - * @param {string} attribute - * @returns {string} - */ Query.orderDesc = (attribute) => new Query("orderDesc", attribute).toString(); - /** - * Sort results by attribute ascending. - * - * @param {string} attribute - * @returns {string} - */ Query.orderAsc = (attribute) => new Query("orderAsc", attribute).toString(); - /** - * Return results after documentId. - * - * @param {string} documentId - * @returns {string} - */ Query.cursorAfter = (documentId) => new Query("cursorAfter", undefined, documentId).toString(); - /** - * Return results before documentId. - * - * @param {string} documentId - * @returns {string} - */ Query.cursorBefore = (documentId) => new Query("cursorBefore", undefined, documentId).toString(); - /** - * Return only limit results. - * - * @param {number} limit - * @returns {string} - */ Query.limit = (limit) => new Query("limit", undefined, limit).toString(); - /** - * Filter resources by skipping the first offset results. - * - * @param {number} offset - * @returns {string} - */ Query.offset = (offset) => new Query("offset", undefined, offset).toString(); - /** - * Filter resources where attribute contains the specified value. - * - * @param {string} attribute - * @param {string | string[]} value - * @returns {string} - */ Query.contains = (attribute, value) => new Query("contains", attribute, value).toString(); - /** - * Combine multiple queries using logical OR operator. - * - * @param {string[]} queries - * @returns {string} - */ Query.or = (queries) => new Query("or", undefined, queries.map((query) => JSON.parse(query))).toString(); - /** - * Combine multiple queries using logical AND operator. - * - * @param {string[]} queries - * @returns {string} - */ Query.and = (queries) => new Query("and", undefined, queries.map((query) => JSON.parse(query))).toString(); - /** - * Exception thrown by the package - */ class AppwriteException extends Error { - /** - * Initializes a Appwrite Exception. - * - * @param {string} message - The error message. - * @param {number} code - The error code. Default is 0. - * @param {string} type - The error type. Default is an empty string. - * @param {string} response - The response string. Default is an empty string. - */ constructor(message, code = 0, type = '', response = '') { super(message); this.name = 'AppwriteException'; @@ -257,14 +106,8 @@ this.response = response; } } - /** - * Client that handles requests to Appwrite - */ class Client { constructor() { - /** - * Holds configuration such as project. - */ this.config = { endpoint: 'https://cloud.appwrite.io/v1', endpointRealtime: '', @@ -273,15 +116,12 @@ locale: '', session: '', }; - /** - * Custom headers for API requests. - */ this.headers = { 'x-sdk-name': 'Web', 'x-sdk-platform': 'client', 'x-sdk-language': 'web', - 'x-sdk-version': '16.0.2', - 'X-Appwrite-Response-Format': '1.6.0', + 'x-sdk-version': '14.0.1', + 'X-Appwrite-Response-Format': '1.5.0', }; this.realtime = { socket: undefined, @@ -533,160 +373,80 @@ this.realtime.connect(); }; } - prepareRequest(method, url, headers = {}, params = {}) { - method = method.toUpperCase(); - headers = Object.assign({}, this.headers, headers); - if (typeof window !== 'undefined' && window.localStorage) { - const cookieFallback = window.localStorage.getItem('cookieFallback'); - if (cookieFallback) { - headers['X-Fallback-Cookies'] = cookieFallback; + call(method, url, headers = {}, params = {}) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + method = method.toUpperCase(); + headers = Object.assign({}, this.headers, headers); + let options = { + method, + headers, + credentials: 'include' + }; + if (typeof window !== 'undefined' && window.localStorage) { + headers['X-Fallback-Cookies'] = (_a = window.localStorage.getItem('cookieFallback')) !== null && _a !== void 0 ? _a : ''; } - } - let options = { - method, - headers, - credentials: 'include', - }; - if (method === 'GET') { - for (const [key, value] of Object.entries(Client.flatten(params))) { - url.searchParams.append(key, value); + if (method === 'GET') { + for (const [key, value] of Object.entries(Service.flatten(params))) { + url.searchParams.append(key, value); + } } - } - else { - switch (headers['content-type']) { - case 'application/json': - options.body = JSON.stringify(params); - break; - case 'multipart/form-data': - const formData = new FormData(); - for (const [key, value] of Object.entries(params)) { - if (value instanceof File) { - formData.append(key, value, value.name); - } - else if (Array.isArray(value)) { - for (const nestedValue of value) { - formData.append(`${key}[]`, nestedValue); + else { + switch (headers['content-type']) { + case 'application/json': + options.body = JSON.stringify(params); + break; + case 'multipart/form-data': + let formData = new FormData(); + for (const key in params) { + if (Array.isArray(params[key])) { + params[key].forEach((value) => { + formData.append(key + '[]', value); + }); + } + else { + formData.append(key, params[key]); } } - else { - formData.append(key, value); - } - } - options.body = formData; - delete headers['content-type']; - break; + options.body = formData; + delete headers['content-type']; + break; + } } - } - return { uri: url.toString(), options }; - } - chunkedUpload(method, url, headers = {}, originalPayload = {}, onProgress) { - return __awaiter(this, void 0, void 0, function* () { - const file = Object.values(originalPayload).find((value) => value instanceof File); - if (file.size <= Client.CHUNK_SIZE) { - return yield this.call(method, url, headers, originalPayload); - } - let start = 0; - let response = null; - while (start < file.size) { - let end = start + Client.CHUNK_SIZE; // Prepare end for the next chunk - if (end >= file.size) { - end = file.size; // Adjust for the last chunk to include the last byte + try { + let data = null; + const response = yield crossFetch.fetch(url.toString(), options); + if ((_b = response.headers.get('content-type')) === null || _b === void 0 ? void 0 : _b.includes('application/json')) { + data = yield response.json(); } - headers['content-range'] = `bytes ${start}-${end - 1}/${file.size}`; - const chunk = file.slice(start, end); - let payload = Object.assign(Object.assign({}, originalPayload), { file: new File([chunk], file.name) }); - response = yield this.call(method, url, headers, payload); - if (onProgress && typeof onProgress === 'function') { - onProgress({ - $id: response.$id, - progress: Math.round((end / file.size) * 100), - sizeUploaded: end, - chunksTotal: Math.ceil(file.size / Client.CHUNK_SIZE), - chunksUploaded: Math.ceil(end / Client.CHUNK_SIZE) - }); + else { + data = { + message: yield response.text() + }; } - if (response && response.$id) { - headers['x-appwrite-id'] = response.$id; + if (400 <= response.status) { + throw new AppwriteException(data === null || data === void 0 ? void 0 : data.message, response.status, data === null || data === void 0 ? void 0 : data.type, data); } - start = end; - } - return response; - }); - } - call(method, url, headers = {}, params = {}, responseType = 'json') { - var _a; - return __awaiter(this, void 0, void 0, function* () { - const { uri, options } = this.prepareRequest(method, url, headers, params); - let data = null; - const response = yield fetch(uri, options); - const warnings = response.headers.get('x-appwrite-warning'); - if (warnings) { - warnings.split(';').forEach((warning) => console.warn('Warning: ' + warning)); - } - if ((_a = response.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.includes('application/json')) { - data = yield response.json(); - } - else if (responseType === 'arrayBuffer') { - data = yield response.arrayBuffer(); - } - else { - data = { - message: yield response.text() - }; - } - if (400 <= response.status) { - throw new AppwriteException(data === null || data === void 0 ? void 0 : data.message, response.status, data === null || data === void 0 ? void 0 : data.type, data); + const cookieFallback = response.headers.get('X-Fallback-Cookies'); + if (typeof window !== 'undefined' && window.localStorage && cookieFallback) { + window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.'); + window.localStorage.setItem('cookieFallback', cookieFallback); + } + return data; } - const cookieFallback = response.headers.get('X-Fallback-Cookies'); - if (typeof window !== 'undefined' && window.localStorage && cookieFallback) { - window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.'); - window.localStorage.setItem('cookieFallback', cookieFallback); + catch (e) { + if (e instanceof AppwriteException) { + throw e; + } + throw new AppwriteException(e.message); } - return data; }); } - static flatten(data, prefix = '') { - let output = {}; - for (const [key, value] of Object.entries(data)) { - let finalKey = prefix ? prefix + '[' + key + ']' : key; - if (Array.isArray(value)) { - output = Object.assign(Object.assign({}, output), Client.flatten(value, finalKey)); - } - else { - output[finalKey] = value; - } - } - return output; - } } - Client.CHUNK_SIZE = 1024 * 1024 * 5; - class Service { + class Account extends Service { constructor(client) { - this.client = client; - } - static flatten(data, prefix = '') { - let output = {}; - for (const [key, value] of Object.entries(data)) { - let finalKey = prefix ? prefix + '[' + key + ']' : key; - if (Array.isArray(value)) { - output = Object.assign(Object.assign({}, output), Service.flatten(value, finalKey)); - } - else { - output[finalKey] = value; - } - } - return output; - } - } - /** - * The size for chunked uploads in bytes. - */ - Service.CHUNK_SIZE = 5 * 1024 * 1024; // 5MB - - class Account { - constructor(client) { - this.client = client; + super(client); } /** * Get account @@ -694,31 +454,36 @@ * Get the currently logged in user. * * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ get() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create account * - * Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession). + * Use this endpoint to allow a new user to register a new account in your + * project. After the user registration completes successfully, you can use + * the + * [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) + * route to start verifying the user email address. To allow the new user to + * login to their new account, you need to create a new [account + * session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession). * * @param {string} userId * @param {string} email * @param {string} password * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ create(userId, email, password, name) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -745,24 +510,28 @@ payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Update email * - * Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request. - This endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password. - + * Update currently logged in user account email address. After changing user + * address, the user confirmation status will get reset. A new confirmation + * email is not sent automatically however you can use the send confirmation + * email endpoint again to send the confirmation email. For security measures, + * user password is required to complete this request. + * This endpoint can also be used to convert an anonymous account to a normal + * one, by passing an email address and a new password. + * * * @param {string} email * @param {string} password * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateEmail(email, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof email === 'undefined') { @@ -780,10 +549,9 @@ payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -793,8 +561,8 @@ * * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listIdentities(queries) { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/identities'; @@ -803,10 +571,9 @@ payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** @@ -816,8 +583,8 @@ * * @param {string} identityId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteIdentity(identityId) { return __awaiter(this, void 0, void 0, function* () { if (typeof identityId === 'undefined') { @@ -826,40 +593,43 @@ const apiPath = '/account/identities/{identityId}'.replace('{identityId}', identityId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Create JWT * - * Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame. + * Use this endpoint to create a JSON Web Token. You can use the resulting JWT + * to authenticate on behalf of the current user when working with the + * Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes + * from its creation and will be invalid if the user will logout in that time + * frame. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createJWT() { return __awaiter(this, void 0, void 0, function* () { - const apiPath = '/account/jwts'; + const apiPath = '/account/jwt'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * List logs * - * Get the list of latest security activity logs for the currently logged in user. Each log returns user IP address, location and date and time of log. + * Get the list of latest security activity logs for the currently logged in + * user. Each log returns user IP address, location and date and time of log. * * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listLogs(queries) { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/logs'; @@ -868,10 +638,9 @@ payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** @@ -881,8 +650,8 @@ * * @param {boolean} mfa * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateMFA(mfa) { return __awaiter(this, void 0, void 0, function* () { if (typeof mfa === 'undefined') { @@ -894,21 +663,23 @@ payload['mfa'] = mfa; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** - * Create Authenticator + * Add Authenticator * - * Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](/docs/references/cloud/client-web/account#updateMfaAuthenticator) method. + * Add an authenticator app to be used as an MFA factor. Verify the + * authenticator using the [verify + * authenticator](/docs/references/cloud/client-web/account#verifyAuthenticator) + * method. * * @param {AuthenticatorType} type * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaAuthenticator(type) { return __awaiter(this, void 0, void 0, function* () { if (typeof type === 'undefined') { @@ -917,22 +688,23 @@ const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Verify Authenticator * - * Verify an authenticator app after adding it using the [add authenticator](/docs/references/cloud/client-web/account#createMfaAuthenticator) method. + * Verify an authenticator app after adding it using the [add + * authenticator](/docs/references/cloud/client-web/account#addAuthenticator) + * method. * * @param {AuthenticatorType} type * @param {string} otp * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateMfaAuthenticator(type, otp) { return __awaiter(this, void 0, void 0, function* () { if (typeof type === 'undefined') { @@ -947,10 +719,9 @@ payload['otp'] = otp; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** @@ -959,32 +730,40 @@ * Delete an authenticator for a user by ID. * * @param {AuthenticatorType} type + * @param {string} otp * @throws {AppwriteException} - * @returns {Promise<{}>} - */ - deleteMfaAuthenticator(type) { + * @returns {Promise} + */ + deleteMfaAuthenticator(type, otp) { return __awaiter(this, void 0, void 0, function* () { if (typeof type === 'undefined') { throw new AppwriteException('Missing required parameter: "type"'); } + if (typeof otp === 'undefined') { + throw new AppwriteException('Missing required parameter: "otp"'); + } const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type); const payload = {}; + if (typeof otp !== 'undefined') { + payload['otp'] = otp; + } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** - * Create MFA Challenge + * Create 2FA Challenge * - * Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) method. + * Begin the process of MFA verification after sign-in. Finish the flow with + * [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) + * method. * * @param {AuthenticationFactor} factor * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaChallenge(factor) { return __awaiter(this, void 0, void 0, function* () { if (typeof factor === 'undefined') { @@ -996,22 +775,25 @@ payload['factor'] = factor; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create MFA Challenge (confirmation) * - * Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method. + * Complete the MFA challenge by providing the one-time password. Finish the + * process of MFA verification by providing the one-time password. To begin + * the flow, use + * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) + * method. * * @param {string} challengeId * @param {string} otp * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ updateMfaChallenge(challengeId, otp) { return __awaiter(this, void 0, void 0, function* () { if (typeof challengeId === 'undefined') { @@ -1029,10 +811,9 @@ payload['otp'] = otp; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1041,74 +822,80 @@ * List the factors available on the account to be used as a MFA challange. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listMfaFactors() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/factors'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Get MFA Recovery Codes * - * Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes. + * Get recovery codes that can be used as backup for MFA flow. Before getting + * codes, they must be generated using + * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) + * method. An OTP challenge is required to read recovery codes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getMfaRecoveryCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/recovery-codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create MFA Recovery Codes * - * Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method. + * Generate recovery codes as backup for MFA flow. It's recommended to + * generate and show then immediately after user successfully adds their + * authehticator. Recovery codes can be used as a MFA verification type in + * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) + * method. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaRecoveryCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/recovery-codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Regenerate MFA Recovery Codes * - * Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes. + * Regenerate recovery codes that can be used as backup for MFA flow. Before + * regenerating codes, they must be first generated using + * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) + * method. An OTP challenge is required to regenreate recovery codes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMfaRecoveryCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/mfa/recovery-codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1118,8 +905,8 @@ * * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateName(name) { return __awaiter(this, void 0, void 0, function* () { if (typeof name === 'undefined') { @@ -1131,22 +918,23 @@ payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Update password * - * Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional. + * Update currently logged in user password. For validation, user is required + * to pass in the new password, and the old password. For users created with + * OAuth, Team Invites and Magic URL, oldPassword is optional. * * @param {string} password * @param {string} oldPassword * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePassword(password, oldPassword) { return __awaiter(this, void 0, void 0, function* () { if (typeof password === 'undefined') { @@ -1161,22 +949,25 @@ payload['oldPassword'] = oldPassword; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Update phone * - * Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) endpoint to send a confirmation SMS. + * Update the currently logged in user's phone number. After updating the + * phone number, the phone verification status will be reset. A confirmation + * SMS is not sent automatically, however you can use the [POST + * /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) + * endpoint to send a confirmation SMS. * * @param {string} phone * @param {string} password * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePhone(phone, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof phone === 'undefined') { @@ -1194,10 +985,9 @@ payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1206,28 +996,29 @@ * Get the preferences as a key-value object for the currently logged in user. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getPrefs() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/prefs'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update preferences * - * Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded. + * Update currently logged in user account preferences. The object you pass is + * stored as is, and replaces any previous value. The maximum allowed prefs + * size is 64kB and throws error if exceeded. * * @param {Partial} prefs * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePrefs(prefs) { return __awaiter(this, void 0, void 0, function* () { if (typeof prefs === 'undefined') { @@ -1239,22 +1030,28 @@ payload['prefs'] = prefs; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Create password recovery * - * Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour. + * Sends the user an email with a temporary secret key for password reset. + * When the user clicks the confirmation link he is redirected back to your + * app password reset URL with the secret key and email address values + * attached to the URL query string. Use the query string params to submit a + * request to the [PUT + * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) + * endpoint to complete the process. The verification link sent to the user's + * email address is valid for 1 hour. * * @param {string} email * @param {string} url * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createRecovery(email, url) { return __awaiter(this, void 0, void 0, function* () { if (typeof email === 'undefined') { @@ -1272,25 +1069,31 @@ payload['url'] = url; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create password recovery (confirmation) * - * Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) endpoint. - - Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. + * Use this endpoint to complete the user account password reset. Both the + * **userId** and **secret** arguments will be passed as query parameters to + * the redirect URL you have provided when sending your request to the [POST + * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) + * endpoint. + * + * Please note that in order to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * @param {string} userId * @param {string} secret * @param {string} password * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateRecovery(userId, secret, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1314,81 +1117,88 @@ payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * List sessions * - * Get the list of active sessions across different devices for the currently logged in user. + * Get the list of active sessions across different devices for the currently + * logged in user. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listSessions() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/sessions'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Delete sessions * - * Delete all sessions from the user account and remove any sessions cookies from the end client. + * Delete all sessions from the user account and remove any sessions cookies + * from the end client. * * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSessions() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/sessions'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Create anonymous session * - * Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) or create an [OAuth2 session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session). + * Use this endpoint to allow a new user to register an anonymous account in + * your project. This route will also create a new session for the user. To + * allow the new user to convert an anonymous account to a normal account, you + * need to update its [email and + * password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) + * or create an [OAuth2 + * session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session). * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createAnonymousSession() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/sessions/anonymous'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create email password session * - * Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user. - - A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Allow the user to login into their account by providing a valid email and + * password combination. This route will create a new session for the user. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} email * @param {string} password * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createEmailPasswordSession(email, password) { return __awaiter(this, void 0, void 0, function* () { if (typeof email === 'undefined') { @@ -1406,22 +1216,23 @@ payload['password'] = password; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Update magic URL session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMagicURLSession(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1439,69 +1250,77 @@ payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Create OAuth2 session * - * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. - - If there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user. - - A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). - + * Allow the user to login to their account using the OAuth2 provider of their + * choice. Each OAuth2 provider should be enabled from the Appwrite console + * first. Use the success and failure arguments to provide a redirect URL's + * back to your app when login is completed. + * + * If there is already an active session, the new session will be attached to + * the logged-in account. If there are no active sessions, the server will + * attempt to look for a user with the same email address as the email + * received from the OAuth2 provider and attach the new session to the + * existing user. If no matching user is found - the server will create a new + * user. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). + * * * @param {OAuthProvider} provider * @param {string} success * @param {string} failure * @param {string[]} scopes * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {void|string} + */ createOAuth2Session(provider, success, failure, scopes) { - return __awaiter(this, void 0, void 0, function* () { - if (typeof provider === 'undefined') { - throw new AppwriteException('Missing required parameter: "provider"'); - } - const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider); - const payload = {}; - if (typeof success !== 'undefined') { - payload['success'] = success; - } - if (typeof failure !== 'undefined') { - payload['failure'] = failure; - } - if (typeof scopes !== 'undefined') { - payload['scopes'] = scopes; - } - const uri = new URL(this.client.config.endpoint + apiPath); - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { - window.location.href = uri.toString(); - return; - } - else { - return uri.toString(); - } - }); + if (typeof provider === 'undefined') { + throw new AppwriteException('Missing required parameter: "provider"'); + } + const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider); + const payload = {}; + if (typeof success !== 'undefined') { + payload['success'] = success; + } + if (typeof failure !== 'undefined') { + payload['failure'] = failure; + } + if (typeof scopes !== 'undefined') { + payload['scopes'] = scopes; + } + const uri = new URL(this.client.config.endpoint + apiPath); + payload['project'] = this.client.config.project; + for (const [key, value] of Object.entries(Service.flatten(payload))) { + uri.searchParams.append(key, value); + } + if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { + window.location.href = uri.toString(); + } + else { + return uri; + } } /** * Update phone session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePhoneSession(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1519,22 +1338,23 @@ payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Create session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createSession(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1552,21 +1372,21 @@ payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Get session * - * Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used. + * Use this endpoint to get a logged in user's session using a Session ID. + * Inputting 'current' will return the current session being used. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getSession(sessionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof sessionId === 'undefined') { @@ -1575,21 +1395,22 @@ const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update session * - * Use this endpoint to extend a session's length. Extending a session is useful when session expiry is short. If the session was created using an OAuth provider, this endpoint refreshes the access token from the provider. + * Use this endpoint to extend a session's length. Extending a session is + * useful when session expiry is short. If the session was created using an + * OAuth provider, this endpoint refreshes the access token from the provider. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateSession(sessionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof sessionId === 'undefined') { @@ -1598,21 +1419,24 @@ const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Delete session * - * Logout the user. Use 'current' as the session ID to logout on this device, use a session ID to logout on another device. If you're looking to logout the user on all devices, use [Delete Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) instead. + * Logout the user. Use 'current' as the session ID to logout on this device, + * use a session ID to logout on another device. If you're looking to logout + * the user on all devices, use [Delete + * Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) + * instead. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSession(sessionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof sessionId === 'undefined') { @@ -1621,29 +1445,29 @@ const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Update status * - * Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead. + * Block the currently logged in user account. Behind the scene, the user + * record is not deleted but permanently blocked from any access. To + * completely delete a user, use the Users API instead. * * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateStatus() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/status'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1654,8 +1478,8 @@ * @param {string} identifier * @param {string} providerId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPushTarget(targetId, identifier, providerId) { return __awaiter(this, void 0, void 0, function* () { if (typeof targetId === 'undefined') { @@ -1676,10 +1500,9 @@ payload['providerId'] = providerId; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1689,8 +1512,8 @@ * @param {string} targetId * @param {string} identifier * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePushTarget(targetId, identifier) { return __awaiter(this, void 0, void 0, function* () { if (typeof targetId === 'undefined') { @@ -1705,10 +1528,9 @@ payload['identifier'] = identifier; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** @@ -1717,8 +1539,8 @@ * * @param {string} targetId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deletePushTarget(targetId) { return __awaiter(this, void 0, void 0, function* () { if (typeof targetId === 'undefined') { @@ -1727,25 +1549,31 @@ const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Create email token (OTP) * - * Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes. - - A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Sends the user an email with a secret key for creating a session. If the + * provided user ID has not be registered, a new user will be created. Use the + * returned user ID and secret and submit a request to the [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The secret sent to the user's email + * is valid for 15 minutes. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} userId * @param {string} email * @param {boolean} phrase * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createEmailToken(userId, email, phrase) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1766,27 +1594,38 @@ payload['phrase'] = phrase; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create magic URL token * - * Sends the user an email with a secret key for creating a session. If the provided user ID has not been registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default. - - A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). - + * Sends the user an email with a secret key for creating a session. If the + * provided user ID has not been registered, a new user will be created. When + * the user clicks the link in the email, the user is redirected back to the + * URL you provided with the secret key and userId values attached to the URL + * query string. Use the query string parameters to submit a request to the + * [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The link sent to the user's email + * address is valid for 1 hour. If you are on a mobile device you can leave + * the URL parameter empty, so that the login completion will be handled by + * your Appwrite instance by default. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). + * * * @param {string} userId * @param {string} email * @param {string} url * @param {boolean} phrase * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMagicURLToken(userId, email, url, phrase) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1810,70 +1649,82 @@ payload['phrase'] = phrase; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create OAuth2 token * - * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. - - If authentication succeeds, `userId` and `secret` of a token will be appended to the success URL as query parameters. These can be used to create a new session using the [Create session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint. - - A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Allow the user to login to their account using the OAuth2 provider of their + * choice. Each OAuth2 provider should be enabled from the Appwrite console + * first. Use the success and failure arguments to provide a redirect URL's + * back to your app when login is completed. + * + * If authentication succeeds, `userId` and `secret` of a token will be + * appended to the success URL as query parameters. These can be used to + * create a new session using the [Create + * session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {OAuthProvider} provider * @param {string} success * @param {string} failure * @param {string[]} scopes * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {void|string} + */ createOAuth2Token(provider, success, failure, scopes) { - return __awaiter(this, void 0, void 0, function* () { - if (typeof provider === 'undefined') { - throw new AppwriteException('Missing required parameter: "provider"'); - } - const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider); - const payload = {}; - if (typeof success !== 'undefined') { - payload['success'] = success; - } - if (typeof failure !== 'undefined') { - payload['failure'] = failure; - } - if (typeof scopes !== 'undefined') { - payload['scopes'] = scopes; - } - const uri = new URL(this.client.config.endpoint + apiPath); - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { - window.location.href = uri.toString(); - return; - } - else { - return uri.toString(); - } - }); + if (typeof provider === 'undefined') { + throw new AppwriteException('Missing required parameter: "provider"'); + } + const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider); + const payload = {}; + if (typeof success !== 'undefined') { + payload['success'] = success; + } + if (typeof failure !== 'undefined') { + payload['failure'] = failure; + } + if (typeof scopes !== 'undefined') { + payload['scopes'] = scopes; + } + const uri = new URL(this.client.config.endpoint + apiPath); + payload['project'] = this.client.config.project; + for (const [key, value] of Object.entries(Service.flatten(payload))) { + uri.searchParams.append(key, value); + } + if (typeof window !== 'undefined' && (window === null || window === void 0 ? void 0 : window.location)) { + window.location.href = uri.toString(); + } + else { + return uri; + } } /** * Create phone token * - * Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes. - - A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Sends the user an SMS with a secret key for creating a session. If the + * provided user ID has not be registered, a new user will be created. Use the + * returned user ID and secret and submit a request to the [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The secret sent to the user's phone + * is valid for 15 minutes. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} userId * @param {string} phone * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPhoneToken(userId, phone) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1891,24 +1742,34 @@ payload['phone'] = phone; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create email verification * - * Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). The verification link sent to the user's email address is valid for 7 days. - - Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. - + * Use this endpoint to send a verification message to your user email address + * to confirm they are the valid owners of that address. Both the **userId** + * and **secret** arguments will be passed as query parameters to the URL you + * have provided to be attached to the verification email. The provided URL + * should redirect the user back to your app and allow you to complete the + * verification process by verifying both the **userId** and **secret** + * parameters. Learn more about how to [complete the verification + * process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). + * The verification link sent to the user's email address is valid for 7 days. + * + * Please note that in order to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. + * * * @param {string} url * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createVerification(url) { return __awaiter(this, void 0, void 0, function* () { if (typeof url === 'undefined') { @@ -1920,22 +1781,24 @@ payload['url'] = url; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Create email verification (confirmation) * - * Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code. + * Use this endpoint to complete the user email verification process. Use both + * the **userId** and **secret** parameters that were attached to your app URL + * to verify the user email ownership. If confirmed this route will return a + * 200 status code. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateVerification(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -1953,41 +1816,49 @@ payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Create phone verification * - * Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) endpoint. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes. + * Use this endpoint to send a verification SMS to the currently logged in + * user. This endpoint is meant for use after updating a user's phone number + * using the + * [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) + * endpoint. Learn more about how to [complete the verification + * process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). + * The verification code sent to the user's phone number is valid for 15 + * minutes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPhoneVerification() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/account/verification/phone'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** - * Update phone verification (confirmation) + * Create phone verification (confirmation) * - * Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code. + * Use this endpoint to complete the user phone verification process. Use the + * **userId** and **secret** that were sent to your user's phone number to + * verify the user email ownership. If confirmed this route will return a 200 + * status code. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePhoneVerification(userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof userId === 'undefined') { @@ -2005,32 +1876,38 @@ payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } } - class Avatars { + class Avatars extends Service { constructor(client) { - this.client = client; + super(client); } /** * Get browser icon * - * You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) endpoint. Use width, height and quality arguments to change the output settings. - - When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. + * You can use this endpoint to show different browser icons to your users. + * The code argument receives the browser code as it appears in your user [GET + * /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) + * endpoint. Use width, height and quality arguments to change the output + * settings. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. * * @param {Browser} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getBrowser(code, width, height, quality) { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); @@ -2051,27 +1928,28 @@ for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get credit card icon * - * The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings. - - When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * The credit card endpoint will return you the icon of the credit card + * provider you need. Use width, height and quality arguments to change the + * output settings. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {CreditCard} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getCreditCard(code, width, height, quality) { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); @@ -2092,23 +1970,19 @@ for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get favicon * - * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL. - - This endpoint does not follow HTTP redirects. + * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote + * website URL. + * * * @param {string} url * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFavicon(url) { if (typeof url === 'undefined') { throw new AppwriteException('Missing required parameter: "url"'); @@ -2123,27 +1997,29 @@ for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get country flag * - * You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. - - When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * You can use this endpoint to show different country flags icons to your + * users. The code argument receives the 2 letter country code. Use width, + * height and quality arguments to change the output settings. Country codes + * follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {Flag} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFlag(code, width, height, quality) { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); @@ -2164,27 +2040,28 @@ for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get image from URL * - * Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol. - - When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px. - - This endpoint does not follow HTTP redirects. + * Use this endpoint to fetch a remote image URL and crop it to any image size + * you want. This endpoint is very useful if you need to crop and display + * remote images in your app or in case you want to make sure a 3rd party + * image is properly served using a TLS protocol. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 400x400px. + * * * @param {string} url * @param {number} width * @param {number} height * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getImage(url, width, height) { if (typeof url === 'undefined') { throw new AppwriteException('Missing required parameter: "url"'); @@ -2205,29 +2082,35 @@ for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get user initials * - * Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned. - - You can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials. - - When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * Use this endpoint to show your user initials avatar icon on your website or + * app. By default, this route will try to print your logged-in user name or + * email initials. You can also overwrite the user name if you pass the 'name' + * parameter. If no name is given and no user is logged, an empty avatar will + * be returned. + * + * You can use the color and background params to change the avatar colors. By + * default, a random theme will be selected. The random theme will persist for + * the user's initials when reloading the same theme will always return for + * the same initials. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {string} name * @param {number} width * @param {number} height * @param {string} background * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getInitials(name, width, height, background) { const apiPath = '/avatars/initials'; const payload = {}; @@ -2248,25 +2131,22 @@ for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get QR code * - * Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image. - + * Converts a given plain text to a QR code image. You can use the query + * parameters to change the size and style of the resulting image. + * * * @param {string} text * @param {number} size * @param {number} margin * @param {boolean} download * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getQR(text, size, margin, download) { if (typeof text === 'undefined') { throw new AppwriteException('Missing required parameter: "text"'); @@ -2290,29 +2170,26 @@ for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } } - class Databases { + class Databases extends Service { constructor(client) { - this.client = client; + super(client); } /** * List documents * - * Get a list of all the user's documents in a given collection. You can use the query params to filter your results. + * Get a list of all the user's documents in a given collection. You can use + * the query params to filter your results. * * @param {string} databaseId * @param {string} collectionId * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ listDocuments(databaseId, collectionId, queries) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2327,16 +2204,18 @@ payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create document * - * Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) API or directly from your database console. + * Create a new Document. Before using this route, you should create a new + * collection resource using either a [server + * integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) + * API or directly from your database console. * * @param {string} databaseId * @param {string} collectionId @@ -2344,8 +2223,8 @@ * @param {Omit} data * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createDocument(databaseId, collectionId, documentId, data, permissions) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2372,24 +2251,24 @@ payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Get document * - * Get a document by its unique ID. This endpoint response returns a JSON object with the document data. + * Get a document by its unique ID. This endpoint response returns a JSON + * object with the document data. * * @param {string} databaseId * @param {string} collectionId * @param {string} documentId * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getDocument(databaseId, collectionId, documentId, queries) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2407,16 +2286,16 @@ payload['queries'] = queries; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update document * - * Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated. + * Update a document by its unique ID. Using the patch method you can pass + * only specific fields that will get updated. * * @param {string} databaseId * @param {string} collectionId @@ -2424,8 +2303,8 @@ * @param {Partial>} data * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateDocument(databaseId, collectionId, documentId, data, permissions) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2446,10 +2325,9 @@ payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2461,8 +2339,8 @@ * @param {string} collectionId * @param {string} documentId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteDocument(databaseId, collectionId, documentId) { return __awaiter(this, void 0, void 0, function* () { if (typeof databaseId === 'undefined') { @@ -2477,29 +2355,29 @@ const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } } - class Functions { + class Functions extends Service { constructor(client) { - this.client = client; + super(client); } /** * List executions * - * Get a list of all the current user function execution logs. You can use the query params to filter your results. + * Get a list of all the current user function execution logs. You can use the + * query params to filter your results. * * @param {string} functionId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listExecutions(functionId, queries, search) { return __awaiter(this, void 0, void 0, function* () { if (typeof functionId === 'undefined') { @@ -2514,16 +2392,18 @@ payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create execution * - * Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously. + * Trigger a function execution. The returned object will return you the + * current execution status. You can ping the `Get Execution` endpoint to get + * updates on the current execution status. Once this endpoint is called, your + * function execution process will start asynchronously. * * @param {string} functionId * @param {string} body @@ -2531,11 +2411,10 @@ * @param {string} xpath * @param {ExecutionMethod} method * @param {object} headers - * @param {string} scheduledAt * @throws {AppwriteException} - * @returns {Promise} - */ - createExecution(functionId, body, async, xpath, method, headers, scheduledAt) { + * @returns {Promise} + */ + createExecution(functionId, body, async, xpath, method, headers) { return __awaiter(this, void 0, void 0, function* () { if (typeof functionId === 'undefined') { throw new AppwriteException('Missing required parameter: "functionId"'); @@ -2557,14 +2436,10 @@ if (typeof headers !== 'undefined') { payload['headers'] = headers; } - if (typeof scheduledAt !== 'undefined') { - payload['scheduledAt'] = scheduledAt; - } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2575,8 +2450,8 @@ * @param {string} functionId * @param {string} executionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getExecution(functionId, executionId) { return __awaiter(this, void 0, void 0, function* () { if (typeof functionId === 'undefined') { @@ -2588,17 +2463,16 @@ const apiPath = '/functions/{functionId}/executions/{executionId}'.replace('{functionId}', functionId).replace('{executionId}', executionId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } } - class Graphql { + class Graphql extends Service { constructor(client) { - this.client = client; + super(client); } /** * GraphQL endpoint @@ -2607,8 +2481,8 @@ * * @param {object} query * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ query(query) { return __awaiter(this, void 0, void 0, function* () { if (typeof query === 'undefined') { @@ -2620,11 +2494,10 @@ payload['query'] = query; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'x-sdk-graphql': 'true', 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2634,8 +2507,8 @@ * * @param {object} query * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ mutation(query) { return __awaiter(this, void 0, void 0, function* () { if (typeof query === 'undefined') { @@ -2647,178 +2520,180 @@ payload['query'] = query; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'x-sdk-graphql': 'true', 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } } - class Locale { + class Locale extends Service { constructor(client) { - this.client = client; + super(client); } /** * Get user locale * - * Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language. - - ([IP Geolocation by DB-IP](https://db-ip.com)) + * Get the current user location based on IP. Returns an object with user + * country code, country name, continent name, continent code, ip address and + * suggested currency. You can use the locale header to get the data in a + * supported language. + * + * ([IP Geolocation by DB-IP](https://db-ip.com)) * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ get() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List Locale Codes * - * List of all locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). + * List of all locale codes in [ISO + * 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCodes() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/codes'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List continents * - * List of all continents. You can use the locale header to get the data in a supported language. + * List of all continents. You can use the locale header to get the data in a + * supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listContinents() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/continents'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List countries * - * List of all countries. You can use the locale header to get the data in a supported language. + * List of all countries. You can use the locale header to get the data in a + * supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountries() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/countries'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List EU countries * - * List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language. + * List of all countries that are currently members of the EU. You can use the + * locale header to get the data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountriesEU() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/countries/eu'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List countries phone codes * - * List of all countries phone codes. You can use the locale header to get the data in a supported language. + * List of all countries phone codes. You can use the locale header to get the + * data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountriesPhones() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/countries/phones'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List currencies * - * List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language. + * List of all currencies, including currency symbol, name, plural, and + * decimal digits for all major and minor currencies. You can use the locale + * header to get the data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCurrencies() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/currencies'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * List languages * - * List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language. + * List of all languages classified by ISO 639-1 including 2-letter code, name + * in English, and name in the respective language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listLanguages() { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/locale/languages'; const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } } - class Messaging { + class Messaging extends Service { constructor(client) { - this.client = client; + super(client); } /** * Create subscriber @@ -2829,8 +2704,8 @@ * @param {string} subscriberId * @param {string} targetId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createSubscriber(topicId, subscriberId, targetId) { return __awaiter(this, void 0, void 0, function* () { if (typeof topicId === 'undefined') { @@ -2851,10 +2726,9 @@ payload['targetId'] = targetId; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -2865,8 +2739,8 @@ * @param {string} topicId * @param {string} subscriberId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSubscriber(topicId, subscriberId) { return __awaiter(this, void 0, void 0, function* () { if (typeof topicId === 'undefined') { @@ -2878,29 +2752,29 @@ const apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}'.replace('{topicId}', topicId).replace('{subscriberId}', subscriberId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } } - class Storage { + class Storage extends Service { constructor(client) { - this.client = client; + super(client); } /** * List files * - * Get a list of all the user files. You can use the query params to filter your results. + * Get a list of all the user files. You can use the query params to filter + * your results. * * @param {string} bucketId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listFiles(bucketId, queries, search) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -2915,31 +2789,40 @@ payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create file * - * Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](https://appwrite.io/docs/server/storage#storageCreateBucket) API or directly from your Appwrite console. - - Larger files should be uploaded using multiple requests with the [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes. - - When the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one. - - If you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally. - + * Create a new file. Before using this route, you should create a new bucket + * resource using either a [server + * integration](https://appwrite.io/docs/server/storage#storageCreateBucket) + * API or directly from your Appwrite console. + * + * Larger files should be uploaded using multiple requests with the + * [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) + * header to send a partial request with a maximum supported chunk of `5MB`. + * The `content-range` header values should always be in bytes. + * + * When the first request is sent, the server will return the **File** object, + * and the subsequent part request must include the file's **id** in + * `x-appwrite-id` header to allow the server to know that the partial upload + * is for the existing file and not for a new one. + * + * If you're creating a new file using one of the Appwrite SDKs, all the + * chunking logic will be managed by the SDK internally. + * * * @param {string} bucketId * @param {string} fileId * @param {File} file * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createFile(bucketId, fileId, file, permissions, onProgress = (progress) => { }) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -2963,22 +2846,62 @@ payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); + if (!(file instanceof File)) { + throw new AppwriteException('Parameter "file" has to be a File.'); + } + const size = file.size; + if (size <= Service.CHUNK_SIZE) { + return yield this.client.call('post', uri, { + 'content-type': 'multipart/form-data', + }, payload); + } const apiHeaders = { 'content-type': 'multipart/form-data', }; - return yield this.client.chunkedUpload('post', uri, apiHeaders, payload, onProgress); + let offset = 0; + let response = undefined; + if (fileId != 'unique()') { + try { + response = yield this.client.call('GET', new URL(this.client.config.endpoint + apiPath + '/' + fileId), apiHeaders); + offset = response.chunksUploaded * Service.CHUNK_SIZE; + } + catch (e) { + } + } + while (offset < size) { + let end = Math.min(offset + Service.CHUNK_SIZE - 1, size - 1); + apiHeaders['content-range'] = 'bytes ' + offset + '-' + end + '/' + size; + if (response && response.$id) { + apiHeaders['x-appwrite-id'] = response.$id; + } + const chunk = file.slice(offset, end + 1); + payload['file'] = new File([chunk], file.name); + response = yield this.client.call('post', uri, apiHeaders, payload); + if (onProgress) { + onProgress({ + $id: response.$id, + progress: (offset / size) * 100, + sizeUploaded: offset, + chunksTotal: response.chunksTotal, + chunksUploaded: response.chunksUploaded + }); + } + offset += Service.CHUNK_SIZE; + } + return response; }); } /** * Get file * - * Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata. + * Get a file by its unique ID. This endpoint response returns a JSON object + * with the file metadata. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getFile(bucketId, fileId) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -2990,24 +2913,24 @@ const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update file * - * Update a file by its unique ID. Only users with write permissions have access to update this resource. + * Update a file by its unique ID. Only users with write permissions have + * access to update this resource. * * @param {string} bucketId * @param {string} fileId * @param {string} name * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateFile(bucketId, fileId, name, permissions) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -3025,22 +2948,22 @@ payload['permissions'] = permissions; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Delete File * - * Delete a file by its unique ID. Only users with write permissions have access to delete this resource. + * Delete a file by its unique ID. Only users with write permissions have + * access to delete this resource. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteFile(bucketId, fileId) { return __awaiter(this, void 0, void 0, function* () { if (typeof bucketId === 'undefined') { @@ -3052,22 +2975,23 @@ const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Get file for download * - * Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory. + * Get a file content by its unique ID. The endpoint response return with a + * 'Content-Disposition: attachment' header that tells the browser to start + * downloading the file to user downloads directory. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFileDownload(bucketId, fileId) { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); @@ -3082,16 +3006,16 @@ for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get file preview * - * Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB. + * Get a file preview image. Currently, this method supports preview for image + * files (jpg, png, and gif), other supported formats, like pdf, docs, slides, + * and spreadsheets, will return the file icon image. You can also pass query + * string arguments for cutting and resizing your preview image. Preview is + * supported only for image files smaller than 10MB. * * @param {string} bucketId * @param {string} fileId @@ -3107,8 +3031,8 @@ * @param {string} background * @param {ImageFormat} output * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFilePreview(bucketId, fileId, width, height, gravity, quality, borderWidth, borderColor, borderRadius, opacity, rotation, background, output) { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); @@ -3156,22 +3080,20 @@ for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } /** * Get file for view * - * Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header. + * Get a file content by its unique ID. This endpoint is similar to the + * download method but returns with no 'Content-Disposition: attachment' + * header. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {string} - */ + * @returns {URL} + */ getFileView(bucketId, fileId) { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); @@ -3186,28 +3108,25 @@ for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { - uri.searchParams.append(key, value); - } - return uri.toString(); + return uri; } } - class Teams { + class Teams extends Service { constructor(client) { - this.client = client; + super(client); } /** * List teams * - * Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results. + * Get a list of all the teams in which the current user is a member. You can + * use the parameters to filter your results. * * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ list(queries, search) { return __awaiter(this, void 0, void 0, function* () { const apiPath = '/teams'; @@ -3219,23 +3138,24 @@ payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create team * - * Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team. + * Create a new team. The user who creates the team will automatically be + * assigned as the owner of the team. Only the users with the owner role can + * invite new members, add new owners and delete or update the team. * * @param {string} teamId * @param {string} name * @param {string[]} roles * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ create(teamId, name, roles) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3256,10 +3176,9 @@ payload['roles'] = roles; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** @@ -3269,8 +3188,8 @@ * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ get(teamId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3279,22 +3198,21 @@ const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update name * - * Update the team's name by its unique ID. + * Update the team's name by its unique ID. * * @param {string} teamId * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateName(teamId, name) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3309,21 +3227,21 @@ payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } /** * Delete team * - * Delete a team using its ID. Only team members with the owner role can delete the team. + * Delete a team using its ID. Only team members with the owner role can + * delete the team. * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ delete(teamId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3332,23 +3250,23 @@ const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * List team memberships * - * Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint. + * Use this endpoint to list a team's members using the team's ID. All team + * members have read access to this endpoint. * * @param {string} teamId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listMemberships(teamId, queries, search) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3363,23 +3281,35 @@ payload['search'] = search; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Create team membership * - * Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appwrite will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn't exist. If initiated from a Server SDK, the new member will be added automatically to the team. - - You only need to provide one of a user ID, email, or phone number. Appwrite will prioritize accepting the user ID > email > phone number if you provide more than one of these parameters. - - Use the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team. - - Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appwrite will accept the only redirect URLs under the domains you have added as a platform on the Appwrite Console. - + * Invite a new member to join your team. Provide an ID for existing users, or + * invite unregistered users using an email or phone number. If initiated from + * a Client SDK, Appwrite will send an email or sms with a link to join the + * team to the invited user, and an account will be created for them if one + * doesn't exist. If initiated from a Server SDK, the new member will be added + * automatically to the team. + * + * You only need to provide one of a user ID, email, or phone number. Appwrite + * will prioritize accepting the user ID > email > phone number if you provide + * more than one of these parameters. + * + * Use the `url` parameter to redirect the user from the invitation email to + * your app. After the user is redirected, use the [Update Team Membership + * Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) + * endpoint to allow the user to accept the invitation to the team. + * + * Please note that to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * Appwrite will accept the only redirect URLs under the domains you have + * added as a platform on the Appwrite Console. + * * * @param {string} teamId * @param {string[]} roles @@ -3389,8 +3319,8 @@ * @param {string} url * @param {string} name * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMembership(teamId, roles, email, userId, phone, url, name) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3420,22 +3350,22 @@ payload['name'] = name; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('post', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('post', uri, apiHeaders, payload); + }, payload); }); } /** * Get team membership * - * Get a team member by the membership unique id. All team members have read access for this resource. + * Get a team member by the membership unique id. All team members have read + * access for this resource. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getMembership(teamId, membershipId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3447,24 +3377,25 @@ const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update membership * - * Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https://appwrite.io/docs/permissions). - + * Modify the roles of a team member. Only team members with the owner role + * have access to this endpoint. Learn more about [roles and + * permissions](https://appwrite.io/docs/permissions). + * * * @param {string} teamId * @param {string} membershipId * @param {string[]} roles * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMembership(teamId, membershipId, roles) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3482,22 +3413,23 @@ payload['roles'] = roles; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Delete team membership * - * This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted. + * This endpoint allows a user to leave a team or for a team owner to delete + * the membership of any other team member. You can also use this endpoint to + * delete a user membership even if it is not accepted. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteMembership(teamId, membershipId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3509,27 +3441,29 @@ const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('delete', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('delete', uri, apiHeaders, payload); + }, payload); }); } /** * Update team membership status * - * Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user. - - If the request is successful, a session for the user is automatically created. - + * Use this endpoint to allow a user to accept an invitation to join a team + * after being redirected back to your app from the invitation email received + * by the user. + * + * If the request is successful, a session for the user is automatically + * created. + * * * @param {string} teamId * @param {string} membershipId * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMembershipStatus(teamId, membershipId, userId, secret) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3553,21 +3487,22 @@ payload['secret'] = secret; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('patch', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('patch', uri, apiHeaders, payload); + }, payload); }); } /** * Get team preferences * - * Get the team's shared preferences by its unique ID. If a preference doesn't need to be shared by all team members, prefer storing them in [user preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). + * Get the team's shared preferences by its unique ID. If a preference doesn't + * need to be shared by all team members, prefer storing them in [user + * preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getPrefs(teamId) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3576,22 +3511,23 @@ const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId); const payload = {}; const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('get', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('get', uri, apiHeaders, payload); + }, payload); }); } /** * Update preferences * - * Update the team's preferences by its unique ID. The object you pass is stored as is and replaces any previous value. The maximum allowed prefs size is 64kB and throws an error if exceeded. + * Update the team's preferences by its unique ID. The object you pass is + * stored as is and replaces any previous value. The maximum allowed prefs + * size is 64kB and throws an error if exceeded. * * @param {string} teamId * @param {object} prefs * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePrefs(teamId, prefs) { return __awaiter(this, void 0, void 0, function* () { if (typeof teamId === 'undefined') { @@ -3606,64 +3542,27 @@ payload['prefs'] = prefs; } const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders = { + return yield this.client.call('put', uri, { 'content-type': 'application/json', - }; - return yield this.client.call('put', uri, apiHeaders, payload); + }, payload); }); } } - /** - * Helper class to generate permission strings for resources. - */ class Permission { } - /** - * Generate read permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.read = (role) => { return `read("${role}")`; }; - /** - * Generate write permission string for the provided role. - * - * This is an alias of update, delete, and possibly create. - * Don't use write in combination with update, delete, or create. - * - * @param {string} role - * @returns {string} - */ Permission.write = (role) => { return `write("${role}")`; }; - /** - * Generate create permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.create = (role) => { return `create("${role}")`; }; - /** - * Generate update permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.update = (role) => { return `update("${role}")`; }; - /** - * Generate delete permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ Permission.delete = (role) => { return `delete("${role}")`; }; @@ -3763,25 +3662,10 @@ } var _a, _ID_hexTimestamp; - /** - * Helper class to generate ID strings for resources. - */ class ID { - /** - * Uses the provided ID as the ID for the resource. - * - * @param {string} id - * @returns {string} - */ static custom(id) { return id; } - /** - * Have Appwrite generate a unique ID for you. - * - * @param {number} padding. Default is 7. - * @returns {string} - */ static unique(padding = 7) { // Generate a unique ID with padding to have a longer ID const baseId = __classPrivateFieldGet(ID, _a, "m", _ID_hexTimestamp).call(ID); @@ -3881,7 +3765,7 @@ CreditCard["AmericanExpress"] = "amex"; CreditCard["Argencard"] = "argencard"; CreditCard["Cabal"] = "cabal"; - CreditCard["Cencosud"] = "cencosud"; + CreditCard["Consosud"] = "censosud"; CreditCard["DinersClub"] = "diners"; CreditCard["Discover"] = "discover"; CreditCard["Elo"] = "elo"; @@ -4039,7 +3923,6 @@ Flag["Palau"] = "pw"; Flag["PapuaNewGuinea"] = "pg"; Flag["Poland"] = "pl"; - Flag["FrenchPolynesia"] = "pf"; Flag["NorthKorea"] = "kp"; Flag["Portugal"] = "pt"; Flag["Paraguay"] = "py"; @@ -4145,4 +4028,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); -})(this.Appwrite = this.Appwrite || {}); +})(this.Appwrite = this.Appwrite || {}, null, window); diff --git a/node_modules/appwrite/docs/examples/account/create-anonymous-session.md b/node_modules/appwrite/docs/examples/account/create-anonymous-session.md index 9a78549..618b003 100644 --- a/node_modules/appwrite/docs/examples/account/create-anonymous-session.md +++ b/node_modules/appwrite/docs/examples/account/create-anonymous-session.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.createAnonymousSession(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-email-password-session.md b/node_modules/appwrite/docs/examples/account/create-email-password-session.md index 517a7c7..7bbb30e 100644 --- a/node_modules/appwrite/docs/examples/account/create-email-password-session.md +++ b/node_modules/appwrite/docs/examples/account/create-email-password-session.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.createEmailPasswordSession( 'password' // password ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-email-token.md b/node_modules/appwrite/docs/examples/account/create-email-token.md index bcc9316..3591fcd 100644 --- a/node_modules/appwrite/docs/examples/account/create-email-token.md +++ b/node_modules/appwrite/docs/examples/account/create-email-token.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -12,4 +12,4 @@ const result = await account.createEmailToken( false // phrase (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-j-w-t.md b/node_modules/appwrite/docs/examples/account/create-j-w-t.md index e01d8de..467d7ab 100644 --- a/node_modules/appwrite/docs/examples/account/create-j-w-t.md +++ b/node_modules/appwrite/docs/examples/account/create-j-w-t.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.createJWT(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-magic-u-r-l-token.md b/node_modules/appwrite/docs/examples/account/create-magic-u-r-l-token.md index 1559447..c65b5e5 100644 --- a/node_modules/appwrite/docs/examples/account/create-magic-u-r-l-token.md +++ b/node_modules/appwrite/docs/examples/account/create-magic-u-r-l-token.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -13,4 +13,4 @@ const result = await account.createMagicURLToken( false // phrase (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-mfa-authenticator.md b/node_modules/appwrite/docs/examples/account/create-mfa-authenticator.md index 6551d13..e367f24 100644 --- a/node_modules/appwrite/docs/examples/account/create-mfa-authenticator.md +++ b/node_modules/appwrite/docs/examples/account/create-mfa-authenticator.md @@ -2,7 +2,7 @@ import { Client, Account, AuthenticatorType } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.createMfaAuthenticator( AuthenticatorType.Totp // type ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-mfa-challenge.md b/node_modules/appwrite/docs/examples/account/create-mfa-challenge.md index c620ca2..48318c7 100644 --- a/node_modules/appwrite/docs/examples/account/create-mfa-challenge.md +++ b/node_modules/appwrite/docs/examples/account/create-mfa-challenge.md @@ -2,7 +2,7 @@ import { Client, Account, AuthenticationFactor } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.createMfaChallenge( AuthenticationFactor.Email // factor ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-mfa-recovery-codes.md b/node_modules/appwrite/docs/examples/account/create-mfa-recovery-codes.md index 5a3f6f2..ef5d35d 100644 --- a/node_modules/appwrite/docs/examples/account/create-mfa-recovery-codes.md +++ b/node_modules/appwrite/docs/examples/account/create-mfa-recovery-codes.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.createMfaRecoveryCodes(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-o-auth2session.md b/node_modules/appwrite/docs/examples/account/create-o-auth2session.md index 0d797a8..c158e3e 100644 --- a/node_modules/appwrite/docs/examples/account/create-o-auth2session.md +++ b/node_modules/appwrite/docs/examples/account/create-o-auth2session.md @@ -2,7 +2,7 @@ import { Client, Account, OAuthProvider } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); diff --git a/node_modules/appwrite/docs/examples/account/create-o-auth2token.md b/node_modules/appwrite/docs/examples/account/create-o-auth2token.md index a8d7300..a4ca049 100644 --- a/node_modules/appwrite/docs/examples/account/create-o-auth2token.md +++ b/node_modules/appwrite/docs/examples/account/create-o-auth2token.md @@ -2,7 +2,7 @@ import { Client, Account, OAuthProvider } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); diff --git a/node_modules/appwrite/docs/examples/account/create-phone-token.md b/node_modules/appwrite/docs/examples/account/create-phone-token.md index 01a5d68..d67892a 100644 --- a/node_modules/appwrite/docs/examples/account/create-phone-token.md +++ b/node_modules/appwrite/docs/examples/account/create-phone-token.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.createPhoneToken( '+12065550100' // phone ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-phone-verification.md b/node_modules/appwrite/docs/examples/account/create-phone-verification.md index 5da89e9..cdb4629 100644 --- a/node_modules/appwrite/docs/examples/account/create-phone-verification.md +++ b/node_modules/appwrite/docs/examples/account/create-phone-verification.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.createPhoneVerification(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-push-target.md b/node_modules/appwrite/docs/examples/account/create-push-target.md index abbbf42..fe6dd99 100644 --- a/node_modules/appwrite/docs/examples/account/create-push-target.md +++ b/node_modules/appwrite/docs/examples/account/create-push-target.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -12,4 +12,4 @@ const result = await account.createPushTarget( '' // providerId (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-recovery.md b/node_modules/appwrite/docs/examples/account/create-recovery.md index 4d3ec34..d6014cd 100644 --- a/node_modules/appwrite/docs/examples/account/create-recovery.md +++ b/node_modules/appwrite/docs/examples/account/create-recovery.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.createRecovery( 'https://example.com' // url ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-session.md b/node_modules/appwrite/docs/examples/account/create-session.md index fe43a12..a3ee7cc 100644 --- a/node_modules/appwrite/docs/examples/account/create-session.md +++ b/node_modules/appwrite/docs/examples/account/create-session.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.createSession( '' // secret ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create-verification.md b/node_modules/appwrite/docs/examples/account/create-verification.md index 60bb2d2..1757f3c 100644 --- a/node_modules/appwrite/docs/examples/account/create-verification.md +++ b/node_modules/appwrite/docs/examples/account/create-verification.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.createVerification( 'https://example.com' // url ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/create.md b/node_modules/appwrite/docs/examples/account/create.md index eb4634f..069ade2 100644 --- a/node_modules/appwrite/docs/examples/account/create.md +++ b/node_modules/appwrite/docs/examples/account/create.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -13,4 +13,4 @@ const result = await account.create( '' // name (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/delete-identity.md b/node_modules/appwrite/docs/examples/account/delete-identity.md index 7a6dbae..07558e0 100644 --- a/node_modules/appwrite/docs/examples/account/delete-identity.md +++ b/node_modules/appwrite/docs/examples/account/delete-identity.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.deleteIdentity( '' // identityId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/delete-mfa-authenticator.md b/node_modules/appwrite/docs/examples/account/delete-mfa-authenticator.md index 44f0065..6d38924 100644 --- a/node_modules/appwrite/docs/examples/account/delete-mfa-authenticator.md +++ b/node_modules/appwrite/docs/examples/account/delete-mfa-authenticator.md @@ -2,12 +2,13 @@ import { Client, Account, AuthenticatorType } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.deleteMfaAuthenticator( - AuthenticatorType.Totp // type + AuthenticatorType.Totp, // type + '' // otp ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/delete-push-target.md b/node_modules/appwrite/docs/examples/account/delete-push-target.md index 7b8f505..a5e7cb3 100644 --- a/node_modules/appwrite/docs/examples/account/delete-push-target.md +++ b/node_modules/appwrite/docs/examples/account/delete-push-target.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.deletePushTarget( '' // targetId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/delete-session.md b/node_modules/appwrite/docs/examples/account/delete-session.md index 15e91fa..4d5129f 100644 --- a/node_modules/appwrite/docs/examples/account/delete-session.md +++ b/node_modules/appwrite/docs/examples/account/delete-session.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.deleteSession( '' // sessionId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/delete-sessions.md b/node_modules/appwrite/docs/examples/account/delete-sessions.md index 71761b2..a15d130 100644 --- a/node_modules/appwrite/docs/examples/account/delete-sessions.md +++ b/node_modules/appwrite/docs/examples/account/delete-sessions.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.deleteSessions(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/get-mfa-recovery-codes.md b/node_modules/appwrite/docs/examples/account/get-mfa-recovery-codes.md index 3a8c308..fe3b7a3 100644 --- a/node_modules/appwrite/docs/examples/account/get-mfa-recovery-codes.md +++ b/node_modules/appwrite/docs/examples/account/get-mfa-recovery-codes.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.getMfaRecoveryCodes(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/get-prefs.md b/node_modules/appwrite/docs/examples/account/get-prefs.md index 749df16..a658911 100644 --- a/node_modules/appwrite/docs/examples/account/get-prefs.md +++ b/node_modules/appwrite/docs/examples/account/get-prefs.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.getPrefs(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/get-session.md b/node_modules/appwrite/docs/examples/account/get-session.md index 6e491f5..b11278b 100644 --- a/node_modules/appwrite/docs/examples/account/get-session.md +++ b/node_modules/appwrite/docs/examples/account/get-session.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.getSession( '' // sessionId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/get.md b/node_modules/appwrite/docs/examples/account/get.md index 16498a4..7c000bb 100644 --- a/node_modules/appwrite/docs/examples/account/get.md +++ b/node_modules/appwrite/docs/examples/account/get.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.get(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/list-identities.md b/node_modules/appwrite/docs/examples/account/list-identities.md index f6febdf..4c627ce 100644 --- a/node_modules/appwrite/docs/examples/account/list-identities.md +++ b/node_modules/appwrite/docs/examples/account/list-identities.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.listIdentities( [] // queries (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/list-logs.md b/node_modules/appwrite/docs/examples/account/list-logs.md index 02f1abb..973e37b 100644 --- a/node_modules/appwrite/docs/examples/account/list-logs.md +++ b/node_modules/appwrite/docs/examples/account/list-logs.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.listLogs( [] // queries (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/list-mfa-factors.md b/node_modules/appwrite/docs/examples/account/list-mfa-factors.md index 9a9c0d4..2e7a6f1 100644 --- a/node_modules/appwrite/docs/examples/account/list-mfa-factors.md +++ b/node_modules/appwrite/docs/examples/account/list-mfa-factors.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.listMfaFactors(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/list-sessions.md b/node_modules/appwrite/docs/examples/account/list-sessions.md index a42018a..0220b3a 100644 --- a/node_modules/appwrite/docs/examples/account/list-sessions.md +++ b/node_modules/appwrite/docs/examples/account/list-sessions.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.listSessions(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-email.md b/node_modules/appwrite/docs/examples/account/update-email.md index e15f23c..06fabe0 100644 --- a/node_modules/appwrite/docs/examples/account/update-email.md +++ b/node_modules/appwrite/docs/examples/account/update-email.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.updateEmail( 'password' // password ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-m-f-a.md b/node_modules/appwrite/docs/examples/account/update-m-f-a.md index 8ac7607..4e6bb65 100644 --- a/node_modules/appwrite/docs/examples/account/update-m-f-a.md +++ b/node_modules/appwrite/docs/examples/account/update-m-f-a.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.updateMFA( false // mfa ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-magic-u-r-l-session.md b/node_modules/appwrite/docs/examples/account/update-magic-u-r-l-session.md index 5f268f8..665b9f2 100644 --- a/node_modules/appwrite/docs/examples/account/update-magic-u-r-l-session.md +++ b/node_modules/appwrite/docs/examples/account/update-magic-u-r-l-session.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.updateMagicURLSession( '' // secret ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-mfa-authenticator.md b/node_modules/appwrite/docs/examples/account/update-mfa-authenticator.md index 3441946..50bd121 100644 --- a/node_modules/appwrite/docs/examples/account/update-mfa-authenticator.md +++ b/node_modules/appwrite/docs/examples/account/update-mfa-authenticator.md @@ -2,7 +2,7 @@ import { Client, Account, AuthenticatorType } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.updateMfaAuthenticator( '' // otp ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-mfa-challenge.md b/node_modules/appwrite/docs/examples/account/update-mfa-challenge.md index 6c83570..ca9a85d 100644 --- a/node_modules/appwrite/docs/examples/account/update-mfa-challenge.md +++ b/node_modules/appwrite/docs/examples/account/update-mfa-challenge.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.updateMfaChallenge( '' // otp ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-mfa-recovery-codes.md b/node_modules/appwrite/docs/examples/account/update-mfa-recovery-codes.md index dce2d4e..529fbae 100644 --- a/node_modules/appwrite/docs/examples/account/update-mfa-recovery-codes.md +++ b/node_modules/appwrite/docs/examples/account/update-mfa-recovery-codes.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.updateMfaRecoveryCodes(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-name.md b/node_modules/appwrite/docs/examples/account/update-name.md index 26258fd..ac11894 100644 --- a/node_modules/appwrite/docs/examples/account/update-name.md +++ b/node_modules/appwrite/docs/examples/account/update-name.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.updateName( '' // name ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-password.md b/node_modules/appwrite/docs/examples/account/update-password.md index 84267c0..f7c815b 100644 --- a/node_modules/appwrite/docs/examples/account/update-password.md +++ b/node_modules/appwrite/docs/examples/account/update-password.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.updatePassword( 'password' // oldPassword (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-phone-session.md b/node_modules/appwrite/docs/examples/account/update-phone-session.md index 5ab1985..1d64eb5 100644 --- a/node_modules/appwrite/docs/examples/account/update-phone-session.md +++ b/node_modules/appwrite/docs/examples/account/update-phone-session.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.updatePhoneSession( '' // secret ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-phone-verification.md b/node_modules/appwrite/docs/examples/account/update-phone-verification.md index 91cb79d..5325169 100644 --- a/node_modules/appwrite/docs/examples/account/update-phone-verification.md +++ b/node_modules/appwrite/docs/examples/account/update-phone-verification.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.updatePhoneVerification( '' // secret ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-phone.md b/node_modules/appwrite/docs/examples/account/update-phone.md index 03947e3..87779d4 100644 --- a/node_modules/appwrite/docs/examples/account/update-phone.md +++ b/node_modules/appwrite/docs/examples/account/update-phone.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.updatePhone( 'password' // password ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-prefs.md b/node_modules/appwrite/docs/examples/account/update-prefs.md index 4f3039f..d97cd05 100644 --- a/node_modules/appwrite/docs/examples/account/update-prefs.md +++ b/node_modules/appwrite/docs/examples/account/update-prefs.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.updatePrefs( {} // prefs ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-push-target.md b/node_modules/appwrite/docs/examples/account/update-push-target.md index 4803f6b..a8ac97c 100644 --- a/node_modules/appwrite/docs/examples/account/update-push-target.md +++ b/node_modules/appwrite/docs/examples/account/update-push-target.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.updatePushTarget( '' // identifier ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-recovery.md b/node_modules/appwrite/docs/examples/account/update-recovery.md index 716efd2..90bfb6d 100644 --- a/node_modules/appwrite/docs/examples/account/update-recovery.md +++ b/node_modules/appwrite/docs/examples/account/update-recovery.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -12,4 +12,4 @@ const result = await account.updateRecovery( '' // password ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-session.md b/node_modules/appwrite/docs/examples/account/update-session.md index b437056..5f30f17 100644 --- a/node_modules/appwrite/docs/examples/account/update-session.md +++ b/node_modules/appwrite/docs/examples/account/update-session.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -10,4 +10,4 @@ const result = await account.updateSession( '' // sessionId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-status.md b/node_modules/appwrite/docs/examples/account/update-status.md index c4b2c0e..e67bc78 100644 --- a/node_modules/appwrite/docs/examples/account/update-status.md +++ b/node_modules/appwrite/docs/examples/account/update-status.md @@ -2,10 +2,10 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); const result = await account.updateStatus(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/account/update-verification.md b/node_modules/appwrite/docs/examples/account/update-verification.md index f928efd..a57fe4b 100644 --- a/node_modules/appwrite/docs/examples/account/update-verification.md +++ b/node_modules/appwrite/docs/examples/account/update-verification.md @@ -2,7 +2,7 @@ import { Client, Account } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const account = new Account(client); @@ -11,4 +11,4 @@ const result = await account.updateVerification( '' // secret ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/avatars/get-browser.md b/node_modules/appwrite/docs/examples/avatars/get-browser.md index 3ead6d6..682ba98 100644 --- a/node_modules/appwrite/docs/examples/avatars/get-browser.md +++ b/node_modules/appwrite/docs/examples/avatars/get-browser.md @@ -2,7 +2,7 @@ import { Client, Avatars, Browser } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const avatars = new Avatars(client); diff --git a/node_modules/appwrite/docs/examples/avatars/get-credit-card.md b/node_modules/appwrite/docs/examples/avatars/get-credit-card.md index 1391a33..68b5337 100644 --- a/node_modules/appwrite/docs/examples/avatars/get-credit-card.md +++ b/node_modules/appwrite/docs/examples/avatars/get-credit-card.md @@ -2,7 +2,7 @@ import { Client, Avatars, CreditCard } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const avatars = new Avatars(client); diff --git a/node_modules/appwrite/docs/examples/avatars/get-favicon.md b/node_modules/appwrite/docs/examples/avatars/get-favicon.md index 4da10c5..5d5e93b 100644 --- a/node_modules/appwrite/docs/examples/avatars/get-favicon.md +++ b/node_modules/appwrite/docs/examples/avatars/get-favicon.md @@ -2,7 +2,7 @@ import { Client, Avatars } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const avatars = new Avatars(client); diff --git a/node_modules/appwrite/docs/examples/avatars/get-flag.md b/node_modules/appwrite/docs/examples/avatars/get-flag.md index 3bfe49d..e8521c9 100644 --- a/node_modules/appwrite/docs/examples/avatars/get-flag.md +++ b/node_modules/appwrite/docs/examples/avatars/get-flag.md @@ -2,7 +2,7 @@ import { Client, Avatars, Flag } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const avatars = new Avatars(client); diff --git a/node_modules/appwrite/docs/examples/avatars/get-image.md b/node_modules/appwrite/docs/examples/avatars/get-image.md index ef639f6..8b8fbd9 100644 --- a/node_modules/appwrite/docs/examples/avatars/get-image.md +++ b/node_modules/appwrite/docs/examples/avatars/get-image.md @@ -2,7 +2,7 @@ import { Client, Avatars } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const avatars = new Avatars(client); diff --git a/node_modules/appwrite/docs/examples/avatars/get-initials.md b/node_modules/appwrite/docs/examples/avatars/get-initials.md index 25d2320..cc456a4 100644 --- a/node_modules/appwrite/docs/examples/avatars/get-initials.md +++ b/node_modules/appwrite/docs/examples/avatars/get-initials.md @@ -2,7 +2,7 @@ import { Client, Avatars } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const avatars = new Avatars(client); diff --git a/node_modules/appwrite/docs/examples/avatars/get-q-r.md b/node_modules/appwrite/docs/examples/avatars/get-q-r.md index 83344a0..5254a56 100644 --- a/node_modules/appwrite/docs/examples/avatars/get-q-r.md +++ b/node_modules/appwrite/docs/examples/avatars/get-q-r.md @@ -2,7 +2,7 @@ import { Client, Avatars } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const avatars = new Avatars(client); diff --git a/node_modules/appwrite/docs/examples/databases/create-document.md b/node_modules/appwrite/docs/examples/databases/create-document.md index 45448a8..3a4d53d 100644 --- a/node_modules/appwrite/docs/examples/databases/create-document.md +++ b/node_modules/appwrite/docs/examples/databases/create-document.md @@ -2,7 +2,7 @@ import { Client, Databases } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const databases = new Databases(client); @@ -14,4 +14,4 @@ const result = await databases.createDocument( ["read("any")"] // permissions (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/databases/delete-document.md b/node_modules/appwrite/docs/examples/databases/delete-document.md index 623e172..a08b3c7 100644 --- a/node_modules/appwrite/docs/examples/databases/delete-document.md +++ b/node_modules/appwrite/docs/examples/databases/delete-document.md @@ -2,7 +2,7 @@ import { Client, Databases } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const databases = new Databases(client); @@ -12,4 +12,4 @@ const result = await databases.deleteDocument( '' // documentId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/databases/get-document.md b/node_modules/appwrite/docs/examples/databases/get-document.md index bdf9089..d8fe456 100644 --- a/node_modules/appwrite/docs/examples/databases/get-document.md +++ b/node_modules/appwrite/docs/examples/databases/get-document.md @@ -2,7 +2,7 @@ import { Client, Databases } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const databases = new Databases(client); @@ -13,4 +13,4 @@ const result = await databases.getDocument( [] // queries (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/databases/list-documents.md b/node_modules/appwrite/docs/examples/databases/list-documents.md index 1d5e48a..3070b00 100644 --- a/node_modules/appwrite/docs/examples/databases/list-documents.md +++ b/node_modules/appwrite/docs/examples/databases/list-documents.md @@ -2,7 +2,7 @@ import { Client, Databases } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const databases = new Databases(client); @@ -12,4 +12,4 @@ const result = await databases.listDocuments( [] // queries (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/databases/update-document.md b/node_modules/appwrite/docs/examples/databases/update-document.md index b7e4d5b..1daaf01 100644 --- a/node_modules/appwrite/docs/examples/databases/update-document.md +++ b/node_modules/appwrite/docs/examples/databases/update-document.md @@ -2,7 +2,7 @@ import { Client, Databases } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const databases = new Databases(client); @@ -14,4 +14,4 @@ const result = await databases.updateDocument( ["read("any")"] // permissions (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/functions/create-execution.md b/node_modules/appwrite/docs/examples/functions/create-execution.md index 401874f..4a62462 100644 --- a/node_modules/appwrite/docs/examples/functions/create-execution.md +++ b/node_modules/appwrite/docs/examples/functions/create-execution.md @@ -2,7 +2,7 @@ import { Client, Functions, ExecutionMethod } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const functions = new Functions(client); @@ -12,8 +12,7 @@ const result = await functions.createExecution( false, // async (optional) '', // path (optional) ExecutionMethod.GET, // method (optional) - {}, // headers (optional) - '' // scheduledAt (optional) + {} // headers (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/functions/get-execution.md b/node_modules/appwrite/docs/examples/functions/get-execution.md index 05e2c3c..06f9e48 100644 --- a/node_modules/appwrite/docs/examples/functions/get-execution.md +++ b/node_modules/appwrite/docs/examples/functions/get-execution.md @@ -2,7 +2,7 @@ import { Client, Functions } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const functions = new Functions(client); @@ -11,4 +11,4 @@ const result = await functions.getExecution( '' // executionId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/functions/list-executions.md b/node_modules/appwrite/docs/examples/functions/list-executions.md index 93a70d9..f6a1c1f 100644 --- a/node_modules/appwrite/docs/examples/functions/list-executions.md +++ b/node_modules/appwrite/docs/examples/functions/list-executions.md @@ -2,7 +2,7 @@ import { Client, Functions } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const functions = new Functions(client); @@ -12,4 +12,4 @@ const result = await functions.listExecutions( '' // search (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/graphql/mutation.md b/node_modules/appwrite/docs/examples/graphql/mutation.md index b875f0e..ca03455 100644 --- a/node_modules/appwrite/docs/examples/graphql/mutation.md +++ b/node_modules/appwrite/docs/examples/graphql/mutation.md @@ -2,7 +2,7 @@ import { Client, Graphql } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const graphql = new Graphql(client); @@ -10,4 +10,4 @@ const result = await graphql.mutation( {} // query ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/graphql/query.md b/node_modules/appwrite/docs/examples/graphql/query.md index c0f925a..305e4c1 100644 --- a/node_modules/appwrite/docs/examples/graphql/query.md +++ b/node_modules/appwrite/docs/examples/graphql/query.md @@ -2,7 +2,7 @@ import { Client, Graphql } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const graphql = new Graphql(client); @@ -10,4 +10,4 @@ const result = await graphql.query( {} // query ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/locale/get.md b/node_modules/appwrite/docs/examples/locale/get.md index f3a46b4..006f339 100644 --- a/node_modules/appwrite/docs/examples/locale/get.md +++ b/node_modules/appwrite/docs/examples/locale/get.md @@ -2,10 +2,10 @@ import { Client, Locale } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const locale = new Locale(client); const result = await locale.get(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/locale/list-codes.md b/node_modules/appwrite/docs/examples/locale/list-codes.md index 36957e9..ca73077 100644 --- a/node_modules/appwrite/docs/examples/locale/list-codes.md +++ b/node_modules/appwrite/docs/examples/locale/list-codes.md @@ -2,10 +2,10 @@ import { Client, Locale } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const locale = new Locale(client); const result = await locale.listCodes(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/locale/list-continents.md b/node_modules/appwrite/docs/examples/locale/list-continents.md index be3b2fa..83e35e2 100644 --- a/node_modules/appwrite/docs/examples/locale/list-continents.md +++ b/node_modules/appwrite/docs/examples/locale/list-continents.md @@ -2,10 +2,10 @@ import { Client, Locale } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const locale = new Locale(client); const result = await locale.listContinents(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/locale/list-countries-e-u.md b/node_modules/appwrite/docs/examples/locale/list-countries-e-u.md index a3af6ae..7a18ab1 100644 --- a/node_modules/appwrite/docs/examples/locale/list-countries-e-u.md +++ b/node_modules/appwrite/docs/examples/locale/list-countries-e-u.md @@ -2,10 +2,10 @@ import { Client, Locale } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const locale = new Locale(client); const result = await locale.listCountriesEU(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/locale/list-countries-phones.md b/node_modules/appwrite/docs/examples/locale/list-countries-phones.md index d6845b7..2e0daa1 100644 --- a/node_modules/appwrite/docs/examples/locale/list-countries-phones.md +++ b/node_modules/appwrite/docs/examples/locale/list-countries-phones.md @@ -2,10 +2,10 @@ import { Client, Locale } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const locale = new Locale(client); const result = await locale.listCountriesPhones(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/locale/list-countries.md b/node_modules/appwrite/docs/examples/locale/list-countries.md index defdfec..28ce9cc 100644 --- a/node_modules/appwrite/docs/examples/locale/list-countries.md +++ b/node_modules/appwrite/docs/examples/locale/list-countries.md @@ -2,10 +2,10 @@ import { Client, Locale } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const locale = new Locale(client); const result = await locale.listCountries(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/locale/list-currencies.md b/node_modules/appwrite/docs/examples/locale/list-currencies.md index 7cbf8b8..9ab5b13 100644 --- a/node_modules/appwrite/docs/examples/locale/list-currencies.md +++ b/node_modules/appwrite/docs/examples/locale/list-currencies.md @@ -2,10 +2,10 @@ import { Client, Locale } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const locale = new Locale(client); const result = await locale.listCurrencies(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/locale/list-languages.md b/node_modules/appwrite/docs/examples/locale/list-languages.md index 4f3f877..ea02c7f 100644 --- a/node_modules/appwrite/docs/examples/locale/list-languages.md +++ b/node_modules/appwrite/docs/examples/locale/list-languages.md @@ -2,10 +2,10 @@ import { Client, Locale } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const locale = new Locale(client); const result = await locale.listLanguages(); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/messaging/create-subscriber.md b/node_modules/appwrite/docs/examples/messaging/create-subscriber.md index 1fa1de5..6485fe3 100644 --- a/node_modules/appwrite/docs/examples/messaging/create-subscriber.md +++ b/node_modules/appwrite/docs/examples/messaging/create-subscriber.md @@ -2,7 +2,7 @@ import { Client, Messaging } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const messaging = new Messaging(client); @@ -12,4 +12,4 @@ const result = await messaging.createSubscriber( '' // targetId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/messaging/delete-subscriber.md b/node_modules/appwrite/docs/examples/messaging/delete-subscriber.md index bbed071..1319c9a 100644 --- a/node_modules/appwrite/docs/examples/messaging/delete-subscriber.md +++ b/node_modules/appwrite/docs/examples/messaging/delete-subscriber.md @@ -2,7 +2,7 @@ import { Client, Messaging } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const messaging = new Messaging(client); @@ -11,4 +11,4 @@ const result = await messaging.deleteSubscriber( '' // subscriberId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/storage/create-file.md b/node_modules/appwrite/docs/examples/storage/create-file.md index db2200b..644fc65 100644 --- a/node_modules/appwrite/docs/examples/storage/create-file.md +++ b/node_modules/appwrite/docs/examples/storage/create-file.md @@ -2,7 +2,7 @@ import { Client, Storage } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const storage = new Storage(client); @@ -13,4 +13,4 @@ const result = await storage.createFile( ["read("any")"] // permissions (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/storage/delete-file.md b/node_modules/appwrite/docs/examples/storage/delete-file.md index 52cc1d4..aefef46 100644 --- a/node_modules/appwrite/docs/examples/storage/delete-file.md +++ b/node_modules/appwrite/docs/examples/storage/delete-file.md @@ -2,7 +2,7 @@ import { Client, Storage } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const storage = new Storage(client); @@ -11,4 +11,4 @@ const result = await storage.deleteFile( '' // fileId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/storage/get-file-download.md b/node_modules/appwrite/docs/examples/storage/get-file-download.md index d37541d..4ec5e63 100644 --- a/node_modules/appwrite/docs/examples/storage/get-file-download.md +++ b/node_modules/appwrite/docs/examples/storage/get-file-download.md @@ -2,7 +2,7 @@ import { Client, Storage } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const storage = new Storage(client); diff --git a/node_modules/appwrite/docs/examples/storage/get-file-preview.md b/node_modules/appwrite/docs/examples/storage/get-file-preview.md index 6294173..c674e93 100644 --- a/node_modules/appwrite/docs/examples/storage/get-file-preview.md +++ b/node_modules/appwrite/docs/examples/storage/get-file-preview.md @@ -2,7 +2,7 @@ import { Client, Storage, ImageGravity, ImageFormat } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const storage = new Storage(client); diff --git a/node_modules/appwrite/docs/examples/storage/get-file-view.md b/node_modules/appwrite/docs/examples/storage/get-file-view.md index 9a58250..db16105 100644 --- a/node_modules/appwrite/docs/examples/storage/get-file-view.md +++ b/node_modules/appwrite/docs/examples/storage/get-file-view.md @@ -2,7 +2,7 @@ import { Client, Storage } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const storage = new Storage(client); diff --git a/node_modules/appwrite/docs/examples/storage/get-file.md b/node_modules/appwrite/docs/examples/storage/get-file.md index 36c4b45..e52dc19 100644 --- a/node_modules/appwrite/docs/examples/storage/get-file.md +++ b/node_modules/appwrite/docs/examples/storage/get-file.md @@ -2,7 +2,7 @@ import { Client, Storage } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const storage = new Storage(client); @@ -11,4 +11,4 @@ const result = await storage.getFile( '' // fileId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/storage/list-files.md b/node_modules/appwrite/docs/examples/storage/list-files.md index 731a76e..ab5a755 100644 --- a/node_modules/appwrite/docs/examples/storage/list-files.md +++ b/node_modules/appwrite/docs/examples/storage/list-files.md @@ -2,7 +2,7 @@ import { Client, Storage } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const storage = new Storage(client); @@ -12,4 +12,4 @@ const result = await storage.listFiles( '' // search (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/storage/update-file.md b/node_modules/appwrite/docs/examples/storage/update-file.md index 75aefc1..8eac864 100644 --- a/node_modules/appwrite/docs/examples/storage/update-file.md +++ b/node_modules/appwrite/docs/examples/storage/update-file.md @@ -2,7 +2,7 @@ import { Client, Storage } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const storage = new Storage(client); @@ -13,4 +13,4 @@ const result = await storage.updateFile( ["read("any")"] // permissions (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/create-membership.md b/node_modules/appwrite/docs/examples/teams/create-membership.md index 3f58585..9d255ec 100644 --- a/node_modules/appwrite/docs/examples/teams/create-membership.md +++ b/node_modules/appwrite/docs/examples/teams/create-membership.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -16,4 +16,4 @@ const result = await teams.createMembership( '' // name (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/create.md b/node_modules/appwrite/docs/examples/teams/create.md index ffa1414..00ca64d 100644 --- a/node_modules/appwrite/docs/examples/teams/create.md +++ b/node_modules/appwrite/docs/examples/teams/create.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -12,4 +12,4 @@ const result = await teams.create( [] // roles (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/delete-membership.md b/node_modules/appwrite/docs/examples/teams/delete-membership.md index dc87116..c2045cd 100644 --- a/node_modules/appwrite/docs/examples/teams/delete-membership.md +++ b/node_modules/appwrite/docs/examples/teams/delete-membership.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -11,4 +11,4 @@ const result = await teams.deleteMembership( '' // membershipId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/delete.md b/node_modules/appwrite/docs/examples/teams/delete.md index 99ce856..f6e5cb7 100644 --- a/node_modules/appwrite/docs/examples/teams/delete.md +++ b/node_modules/appwrite/docs/examples/teams/delete.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -10,4 +10,4 @@ const result = await teams.delete( '' // teamId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/get-membership.md b/node_modules/appwrite/docs/examples/teams/get-membership.md index d4abeef..9871a42 100644 --- a/node_modules/appwrite/docs/examples/teams/get-membership.md +++ b/node_modules/appwrite/docs/examples/teams/get-membership.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -11,4 +11,4 @@ const result = await teams.getMembership( '' // membershipId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/get-prefs.md b/node_modules/appwrite/docs/examples/teams/get-prefs.md index b5b3d12..a3d036b 100644 --- a/node_modules/appwrite/docs/examples/teams/get-prefs.md +++ b/node_modules/appwrite/docs/examples/teams/get-prefs.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -10,4 +10,4 @@ const result = await teams.getPrefs( '' // teamId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/get.md b/node_modules/appwrite/docs/examples/teams/get.md index 8306cc5..f54180f 100644 --- a/node_modules/appwrite/docs/examples/teams/get.md +++ b/node_modules/appwrite/docs/examples/teams/get.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -10,4 +10,4 @@ const result = await teams.get( '' // teamId ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/list-memberships.md b/node_modules/appwrite/docs/examples/teams/list-memberships.md index b1c0681..436a79b 100644 --- a/node_modules/appwrite/docs/examples/teams/list-memberships.md +++ b/node_modules/appwrite/docs/examples/teams/list-memberships.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -12,4 +12,4 @@ const result = await teams.listMemberships( '' // search (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/list.md b/node_modules/appwrite/docs/examples/teams/list.md index 0d000e9..2376863 100644 --- a/node_modules/appwrite/docs/examples/teams/list.md +++ b/node_modules/appwrite/docs/examples/teams/list.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -11,4 +11,4 @@ const result = await teams.list( '' // search (optional) ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/update-membership-status.md b/node_modules/appwrite/docs/examples/teams/update-membership-status.md index dd32bbb..2e240fa 100644 --- a/node_modules/appwrite/docs/examples/teams/update-membership-status.md +++ b/node_modules/appwrite/docs/examples/teams/update-membership-status.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -13,4 +13,4 @@ const result = await teams.updateMembershipStatus( '' // secret ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/update-membership.md b/node_modules/appwrite/docs/examples/teams/update-membership.md index ae7fb9a..dc55d04 100644 --- a/node_modules/appwrite/docs/examples/teams/update-membership.md +++ b/node_modules/appwrite/docs/examples/teams/update-membership.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -12,4 +12,4 @@ const result = await teams.updateMembership( [] // roles ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/update-name.md b/node_modules/appwrite/docs/examples/teams/update-name.md index 553c77d..c000401 100644 --- a/node_modules/appwrite/docs/examples/teams/update-name.md +++ b/node_modules/appwrite/docs/examples/teams/update-name.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -11,4 +11,4 @@ const result = await teams.updateName( '' // name ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/docs/examples/teams/update-prefs.md b/node_modules/appwrite/docs/examples/teams/update-prefs.md index 55b273b..e0fbb76 100644 --- a/node_modules/appwrite/docs/examples/teams/update-prefs.md +++ b/node_modules/appwrite/docs/examples/teams/update-prefs.md @@ -2,7 +2,7 @@ import { Client, Teams } from "appwrite"; const client = new Client() .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint - .setProject(''); // Your project ID + .setProject('5df5acd0d48c2'); // Your project ID const teams = new Teams(client); @@ -11,4 +11,4 @@ const result = await teams.updatePrefs( {} // prefs ); -console.log(result); +console.log(response); diff --git a/node_modules/appwrite/package.json b/node_modules/appwrite/package.json index 88e6d4f..9929e7d 100644 --- a/node_modules/appwrite/package.json +++ b/node_modules/appwrite/package.json @@ -2,7 +2,7 @@ "name": "appwrite", "homepage": "https://appwrite.io/support", "description": "Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API", - "version": "16.0.2", + "version": "14.0.1", "license": "BSD-3-Clause", "main": "dist/cjs/sdk.js", "exports": { @@ -32,6 +32,10 @@ "tslib": "2.4.0", "typescript": "4.7.2" }, + "dependencies": { + "cross-fetch": "3.1.5", + "isomorphic-form-data": "2.0.0" + }, "jsdelivr": "dist/iife/sdk.js", "unpkg": "dist/iife/sdk.js" } diff --git a/node_modules/appwrite/rollup.config.js b/node_modules/appwrite/rollup.config.js index cae7a89..a9c3354 100644 --- a/node_modules/appwrite/rollup.config.js +++ b/node_modules/appwrite/rollup.config.js @@ -2,7 +2,7 @@ import pkg from "./package.json"; import typescript from "@rollup/plugin-typescript"; export default { - external: Object.keys(pkg.dependencies ?? {}), + external: Object.keys(pkg.dependencies), input: "src/index.ts", plugins: [typescript()], output: [ @@ -22,6 +22,10 @@ export default { file: pkg.jsdelivr, name: "Appwrite", extend: true, + globals: { + "cross-fetch": "window", + "FormData": "FormData", + }, }, ], }; diff --git a/node_modules/appwrite/src/client.ts b/node_modules/appwrite/src/client.ts index d434c64..5c1df24 100644 --- a/node_modules/appwrite/src/client.ts +++ b/node_modules/appwrite/src/client.ts @@ -1,274 +1,85 @@ +import 'isomorphic-form-data'; +import { fetch } from 'cross-fetch'; import { Models } from './models'; +import { Service } from './service'; -/** - * Payload type representing a key-value pair with string keys and any values. - */ type Payload = { [key: string]: any; } -/** - * Headers type representing a key-value pair with string keys and string values. - */ type Headers = { [key: string]: string; } -/** - * Realtime response structure with different types. - */ type RealtimeResponse = { - /** - * Type of the response: 'error', 'event', 'connected', or 'response'. - */ type: 'error' | 'event' | 'connected' | 'response'; - - /** - * Data associated with the response based on the response type. - */ data: RealtimeResponseAuthenticated | RealtimeResponseConnected | RealtimeResponseError | RealtimeResponseEvent; } -/** - * Realtime request structure for authentication. - */ type RealtimeRequest = { - /** - * Type of the request: 'authentication'. - */ type: 'authentication'; - - /** - * Data required for authentication. - */ data: RealtimeRequestAuthenticate; } -/** - * Realtime event response structure with generic payload type. - */ -type RealtimeResponseEvent = { - /** - * List of event names associated with the response. - */ +export type RealtimeResponseEvent = { events: string[]; - - /** - * List of channel names associated with the response. - */ channels: string[]; - - /** - * Timestamp indicating the time of the event. - */ timestamp: number; - - /** - * Payload containing event-specific data. - */ payload: T; } -/** - * Realtime response structure for errors. - */ type RealtimeResponseError = { - /** - * Numeric error code indicating the type of error. - */ code: number; - - /** - * Error message describing the encountered error. - */ message: string; } -/** - * Realtime response structure for a successful connection. - */ type RealtimeResponseConnected = { - /** - * List of channels the user is connected to. - */ channels: string[]; - - /** - * User object representing the connected user (optional). - */ user?: object; } -/** - * Realtime response structure for authenticated connections. - */ type RealtimeResponseAuthenticated = { - /** - * Destination channel for the response. - */ to: string; - - /** - * Boolean indicating the success of the authentication process. - */ success: boolean; - - /** - * User object representing the authenticated user. - */ user: object; } -/** - * Realtime request structure for authentication. - */ type RealtimeRequestAuthenticate = { - /** - * Session identifier for authentication. - */ session: string; } -/** - * Realtime interface representing the structure of a realtime communication object. - */ type Realtime = { - /** - * WebSocket instance for realtime communication. - */ socket?: WebSocket; - - /** - * Timeout duration for communication operations. - */ timeout?: number; - - /** - * URL for establishing the WebSocket connection. - */ url?: string; - - /** - * Last received message from the realtime server. - */ lastMessage?: RealtimeResponse; - - /** - * Set of channel names the client is subscribed to. - */ channels: Set; - - /** - * Map of subscriptions containing channel names and corresponding callback functions. - */ subscriptions: Map) => void }>; - - /** - * Counter for managing subscriptions. - */ subscriptionsCounter: number; - - /** - * Boolean indicating whether automatic reconnection is enabled. - */ reconnect: boolean; - - /** - * Number of reconnection attempts made. - */ reconnectAttempts: number; - - /** - * Function to get the timeout duration for communication operations. - */ getTimeout: () => number; - - /** - * Function to establish a WebSocket connection. - */ connect: () => void; - - /** - * Function to create a new WebSocket instance. - */ createSocket: () => void; - - /** - * Function to clean up resources associated with specified channels. - * - * @param {string[]} channels - List of channel names to clean up. - */ cleanUp: (channels: string[]) => void; - - /** - * Function to handle incoming messages from the WebSocket connection. - * - * @param {MessageEvent} event - Event containing the received message. - */ onMessage: (event: MessageEvent) => void; } -/** - * Type representing upload progress information. - */ -type UploadProgress = { - /** - * Identifier for the upload progress. - */ +export type UploadProgress = { $id: string; - - /** - * Current progress of the upload (in percentage). - */ progress: number; - - /** - * Total size uploaded (in bytes) during the upload process. - */ sizeUploaded: number; - - /** - * Total number of chunks that need to be uploaded. - */ chunksTotal: number; - - /** - * Number of chunks that have been successfully uploaded. - */ chunksUploaded: number; } -/** - * Exception thrown by the package - */ class AppwriteException extends Error { - /** - * The error code associated with the exception. - */ code: number; - - /** - * The response string associated with the exception. - */ response: string; - - /** - * Error type. - * See [Error Types](https://appwrite.io/docs/response-codes#errorTypes) for more information. - */ type: string; - - /** - * Initializes a Appwrite Exception. - * - * @param {string} message - The error message. - * @param {number} code - The error code. Default is 0. - * @param {string} type - The error type. Default is an empty string. - * @param {string} response - The response string. Default is an empty string. - */ constructor(message: string, code: number = 0, type: string = '', response: string = '') { super(message); this.name = 'AppwriteException'; @@ -279,15 +90,7 @@ class AppwriteException extends Error { } } -/** - * Client that handles requests to Appwrite - */ class Client { - static CHUNK_SIZE = 1024 * 1024 * 5; - - /** - * Holds configuration such as project. - */ config = { endpoint: 'https://cloud.appwrite.io/v1', endpointRealtime: '', @@ -296,15 +99,12 @@ class Client { locale: '', session: '', }; - /** - * Custom headers for API requests. - */ headers: Headers = { 'x-sdk-name': 'Web', 'x-sdk-platform': 'client', 'x-sdk-language': 'web', - 'x-sdk-version': '16.0.2', - 'X-Appwrite-Response-Format': '1.6.0', + 'x-sdk-version': '14.0.1', + 'X-Appwrite-Response-Format': '1.5.0', }; /** @@ -350,6 +150,7 @@ class Client { this.config.project = value; return this; } + /** * Set JWT * @@ -364,6 +165,7 @@ class Client { this.config.jwt = value; return this; } + /** * Set Locale * @@ -376,6 +178,7 @@ class Client { this.config.locale = value; return this; } + /** * Set Session * @@ -391,6 +194,7 @@ class Client { return this; } + private realtime: Realtime = { socket: undefined, timeout: undefined, @@ -532,10 +336,10 @@ class Client { /** * Subscribes to Appwrite events and passes you the payload in realtime. - * - * @param {string|string[]} channels + * + * @param {string|string[]} channels * Channel to subscribe - pass a single channel as a string or multiple with an array of strings. - * + * * Possible channels are: * - account * - collections @@ -574,26 +378,24 @@ class Client { } } - prepareRequest(method: string, url: URL, headers: Headers = {}, params: Payload = {}): { uri: string, options: RequestInit } { + async call(method: string, url: URL, headers: Headers = {}, params: Payload = {}): Promise { method = method.toUpperCase(); - headers = Object.assign({}, this.headers, headers); - if (typeof window !== 'undefined' && window.localStorage) { - const cookieFallback = window.localStorage.getItem('cookieFallback'); - if (cookieFallback) { - headers['X-Fallback-Cookies'] = cookieFallback; - } - } + headers = Object.assign({}, this.headers, headers); let options: RequestInit = { method, headers, - credentials: 'include', + credentials: 'include' }; + if (typeof window !== 'undefined' && window.localStorage) { + headers['X-Fallback-Cookies'] = window.localStorage.getItem('cookieFallback') ?? ''; + } + if (method === 'GET') { - for (const [key, value] of Object.entries(Client.flatten(params))) { + for (const [key, value] of Object.entries(Service.flatten(params))) { url.searchParams.append(key, value); } } else { @@ -603,17 +405,15 @@ class Client { break; case 'multipart/form-data': - const formData = new FormData(); - - for (const [key, value] of Object.entries(params)) { - if (value instanceof File) { - formData.append(key, value, value.name); - } else if (Array.isArray(value)) { - for (const nestedValue of value) { - formData.append(`${key}[]`, nestedValue); - } + let formData = new FormData(); + + for (const key in params) { + if (Array.isArray(params[key])) { + params[key].forEach((value: any) => { + formData.append(key + '[]', value); + }) } else { - formData.append(key, value); + formData.append(key, params[key]); } } @@ -623,106 +423,40 @@ class Client { } } - return { uri: url.toString(), options }; - } + try { + let data = null; + const response = await fetch(url.toString(), options); - async chunkedUpload(method: string, url: URL, headers: Headers = {}, originalPayload: Payload = {}, onProgress: (progress: UploadProgress) => void) { - const file = Object.values(originalPayload).find((value) => value instanceof File); - - if (file.size <= Client.CHUNK_SIZE) { - return await this.call(method, url, headers, originalPayload); - } - - let start = 0; - let response = null; - - while (start < file.size) { - let end = start + Client.CHUNK_SIZE; // Prepare end for the next chunk - if (end >= file.size) { - end = file.size; // Adjust for the last chunk to include the last byte - } - - headers['content-range'] = `bytes ${start}-${end-1}/${file.size}`; - const chunk = file.slice(start, end); - - let payload = { ...originalPayload, file: new File([chunk], file.name)}; - - response = await this.call(method, url, headers, payload); - - if (onProgress && typeof onProgress === 'function') { - onProgress({ - $id: response.$id, - progress: Math.round((end / file.size) * 100), - sizeUploaded: end, - chunksTotal: Math.ceil(file.size / Client.CHUNK_SIZE), - chunksUploaded: Math.ceil(end / Client.CHUNK_SIZE) - }); + if (response.headers.get('content-type')?.includes('application/json')) { + data = await response.json(); + } else { + data = { + message: await response.text() + }; } - if (response && response.$id) { - headers['x-appwrite-id'] = response.$id; + if (400 <= response.status) { + throw new AppwriteException(data?.message, response.status, data?.type, data); } - start = end; - } + const cookieFallback = response.headers.get('X-Fallback-Cookies'); - return response; - } - - async call(method: string, url: URL, headers: Headers = {}, params: Payload = {}, responseType = 'json'): Promise { - const { uri, options } = this.prepareRequest(method, url, headers, params); - - let data: any = null; - - const response = await fetch(uri, options); - - const warnings = response.headers.get('x-appwrite-warning'); - if (warnings) { - warnings.split(';').forEach((warning: string) => console.warn('Warning: ' + warning)); - } - - if (response.headers.get('content-type')?.includes('application/json')) { - data = await response.json(); - } else if (responseType === 'arrayBuffer') { - data = await response.arrayBuffer(); - } else { - data = { - message: await response.text() - }; - } - - if (400 <= response.status) { - throw new AppwriteException(data?.message, response.status, data?.type, data); - } - - const cookieFallback = response.headers.get('X-Fallback-Cookies'); - - if (typeof window !== 'undefined' && window.localStorage && cookieFallback) { - window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.'); - window.localStorage.setItem('cookieFallback', cookieFallback); - } - - return data; - } - - static flatten(data: Payload, prefix = ''): Payload { - let output: Payload = {}; + if (typeof window !== 'undefined' && window.localStorage && cookieFallback) { + window.console.warn('Appwrite is using localStorage for session management. Increase your security by adding a custom domain as your API endpoint.'); + window.localStorage.setItem('cookieFallback', cookieFallback); + } - for (const [key, value] of Object.entries(data)) { - let finalKey = prefix ? prefix + '[' + key +']' : key; - if (Array.isArray(value)) { - output = { ...output, ...Client.flatten(value, finalKey) }; - } else { - output[finalKey] = value; + return data; + } catch (e) { + if (e instanceof AppwriteException) { + throw e; } + throw new AppwriteException((e).message); } - - return output; } } export { Client, AppwriteException }; export { Query } from './query'; -export type { Models, Payload, UploadProgress }; -export type { RealtimeResponseEvent }; +export type { Models, Payload }; export type { QueryTypes, QueryTypesList } from './query'; diff --git a/node_modules/appwrite/src/enums/credit-card.ts b/node_modules/appwrite/src/enums/credit-card.ts index daf43c7..ae917a8 100644 --- a/node_modules/appwrite/src/enums/credit-card.ts +++ b/node_modules/appwrite/src/enums/credit-card.ts @@ -2,7 +2,7 @@ export enum CreditCard { AmericanExpress = 'amex', Argencard = 'argencard', Cabal = 'cabal', - Cencosud = 'cencosud', + Consosud = 'censosud', DinersClub = 'diners', Discover = 'discover', Elo = 'elo', diff --git a/node_modules/appwrite/src/enums/flag.ts b/node_modules/appwrite/src/enums/flag.ts index 7e1d878..07416a4 100644 --- a/node_modules/appwrite/src/enums/flag.ts +++ b/node_modules/appwrite/src/enums/flag.ts @@ -140,7 +140,6 @@ export enum Flag { Palau = 'pw', PapuaNewGuinea = 'pg', Poland = 'pl', - FrenchPolynesia = 'pf', NorthKorea = 'kp', Portugal = 'pt', Paraguay = 'py', diff --git a/node_modules/appwrite/src/id.ts b/node_modules/appwrite/src/id.ts index 33495cc..199f00a 100644 --- a/node_modules/appwrite/src/id.ts +++ b/node_modules/appwrite/src/id.ts @@ -1,13 +1,6 @@ -/** - * Helper class to generate ID strings for resources. - */ export class ID { - /** - * Generate an hex ID based on timestamp. - * Recreated from https://www.php.net/manual/en/function.uniqid.php - * - * @returns {string} - */ + // Generate an hex ID based on timestamp + // Recreated from https://www.php.net/manual/en/function.uniqid.php static #hexTimestamp(): string { const now = new Date(); const sec = Math.floor(now.getTime() / 1000); @@ -18,22 +11,10 @@ export class ID { return hexTimestamp; } - /** - * Uses the provided ID as the ID for the resource. - * - * @param {string} id - * @returns {string} - */ public static custom(id: string): string { return id } - /** - * Have Appwrite generate a unique ID for you. - * - * @param {number} padding. Default is 7. - * @returns {string} - */ public static unique(padding: number = 7): string { // Generate a unique ID with padding to have a longer ID const baseId = ID.#hexTimestamp(); diff --git a/node_modules/appwrite/src/index.ts b/node_modules/appwrite/src/index.ts index c500d8d..72a7cc9 100644 --- a/node_modules/appwrite/src/index.ts +++ b/node_modules/appwrite/src/index.ts @@ -1,10 +1,3 @@ -/** - * Appwrite Web SDK - * - * This SDK is compatible with Appwrite server version 1.6.x. - * For older versions, please check - * [previous releases](https://github.com/appwrite/sdk-for-web/releases). - */ export { Client, Query, AppwriteException } from './client'; export { Account } from './services/account'; export { Avatars } from './services/avatars'; diff --git a/node_modules/appwrite/src/models.ts b/node_modules/appwrite/src/models.ts index 2fcb905..0e907cb 100644 --- a/node_modules/appwrite/src/models.ts +++ b/node_modules/appwrite/src/models.ts @@ -1,6 +1,3 @@ -/** - * Appwrite Models - */ export namespace Models { /** * Documents List @@ -505,10 +502,6 @@ export namespace Models { * Session creation date in ISO 8601 format. */ $createdAt: string; - /** - * Session update date in ISO 8601 format. - */ - $updatedAt: string; /** * User ID. */ @@ -946,10 +939,6 @@ export namespace Models { * Function execution duration in seconds. */ duration: number; - /** - * The scheduled time for execution. If left empty, execution will be queued immediately. - */ - scheduledAt?: string; } /** * Country @@ -1105,21 +1094,17 @@ export namespace Models { */ export type MfaFactors = { /** - * Can TOTP be used for MFA challenge for this account. + * TOTP */ totp: boolean; /** - * Can phone (SMS) be used for MFA challenge for this account. + * Phone */ phone: boolean; /** - * Can email be used for MFA challenge for this account. + * Email */ email: boolean; - /** - * Can recovery code be used for MFA challenge for this account. - */ - recoveryCode: boolean; } /** * Subscriber diff --git a/node_modules/appwrite/src/permission.ts b/node_modules/appwrite/src/permission.ts index 94d9ced..bfc330a 100644 --- a/node_modules/appwrite/src/permission.ts +++ b/node_modules/appwrite/src/permission.ts @@ -1,57 +1,22 @@ -/** - * Helper class to generate permission strings for resources. - */ export class Permission { - /** - * Generate read permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ + static read = (role: string): string => { - return `read("${role}")`; + return `read("${role}")` } - /** - * Generate write permission string for the provided role. - * - * This is an alias of update, delete, and possibly create. - * Don't use write in combination with update, delete, or create. - * - * @param {string} role - * @returns {string} - */ static write = (role: string): string => { - return `write("${role}")`; + return `write("${role}")` } - /** - * Generate create permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ static create = (role: string): string => { - return `create("${role}")`; + return `create("${role}")` } - /** - * Generate update permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ static update = (role: string): string => { - return `update("${role}")`; + return `update("${role}")` } - /** - * Generate delete permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ static delete = (role: string): string => { - return `delete("${role}")`; + return `delete("${role}")` } } diff --git a/node_modules/appwrite/src/query.ts b/node_modules/appwrite/src/query.ts index acad038..229d6c8 100644 --- a/node_modules/appwrite/src/query.ts +++ b/node_modules/appwrite/src/query.ts @@ -3,21 +3,11 @@ export type QueryTypesList = string[] | number[] | boolean[] | Query[]; export type QueryTypes = QueryTypesSingle | QueryTypesList; type AttributesTypes = string | string[]; -/** - * Helper class to generate query strings. - */ export class Query { method: string; attribute: AttributesTypes | undefined; values: QueryTypesList | undefined; - /** - * Constructor for Query class. - * - * @param {string} method - * @param {AttributesTypes} attribute - * @param {QueryTypes} values - */ constructor( method: string, attribute?: AttributesTypes, @@ -35,11 +25,6 @@ export class Query { } } - /** - * Convert the query object to a JSON string. - * - * @returns {string} - */ toString(): string { return JSON.stringify({ method: this.method, @@ -48,214 +33,69 @@ export class Query { }); } - /** - * Filter resources where attribute is equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static equal = (attribute: string, value: QueryTypes): string => new Query("equal", attribute, value).toString(); - /** - * Filter resources where attribute is not equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static notEqual = (attribute: string, value: QueryTypes): string => new Query("notEqual", attribute, value).toString(); - /** - * Filter resources where attribute is less than value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static lessThan = (attribute: string, value: QueryTypes): string => new Query("lessThan", attribute, value).toString(); - /** - * Filter resources where attribute is less than or equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static lessThanEqual = (attribute: string, value: QueryTypes): string => new Query("lessThanEqual", attribute, value).toString(); - /** - * Filter resources where attribute is greater than value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static greaterThan = (attribute: string, value: QueryTypes): string => new Query("greaterThan", attribute, value).toString(); - /** - * Filter resources where attribute is greater than or equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static greaterThanEqual = (attribute: string, value: QueryTypes): string => new Query("greaterThanEqual", attribute, value).toString(); - /** - * Filter resources where attribute is null. - * - * @param {string} attribute - * @returns {string} - */ static isNull = (attribute: string): string => new Query("isNull", attribute).toString(); - /** - * Filter resources where attribute is not null. - * - * @param {string} attribute - * @returns {string} - */ static isNotNull = (attribute: string): string => new Query("isNotNull", attribute).toString(); - /** - * Filter resources where attribute is between start and end (inclusive). - * - * @param {string} attribute - * @param {string | number} start - * @param {string | number} end - * @returns {string} - */ - static between = (attribute: string, start: string | number, end: string | number): string => + static between = (attribute: string, start: string | number, end: string | number) => new Query("between", attribute, [start, end] as QueryTypesList).toString(); - /** - * Filter resources where attribute starts with value. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ static startsWith = (attribute: string, value: string): string => new Query("startsWith", attribute, value).toString(); - /** - * Filter resources where attribute ends with value. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ static endsWith = (attribute: string, value: string): string => new Query("endsWith", attribute, value).toString(); - /** - * Specify which attributes should be returned by the API call. - * - * @param {string[]} attributes - * @returns {string} - */ static select = (attributes: string[]): string => new Query("select", undefined, attributes).toString(); - /** - * Filter resources by searching attribute for value. - * A fulltext index on attribute is required for this query to work. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ static search = (attribute: string, value: string): string => new Query("search", attribute, value).toString(); - /** - * Sort results by attribute descending. - * - * @param {string} attribute - * @returns {string} - */ static orderDesc = (attribute: string): string => new Query("orderDesc", attribute).toString(); - /** - * Sort results by attribute ascending. - * - * @param {string} attribute - * @returns {string} - */ static orderAsc = (attribute: string): string => new Query("orderAsc", attribute).toString(); - /** - * Return results after documentId. - * - * @param {string} documentId - * @returns {string} - */ static cursorAfter = (documentId: string): string => new Query("cursorAfter", undefined, documentId).toString(); - /** - * Return results before documentId. - * - * @param {string} documentId - * @returns {string} - */ static cursorBefore = (documentId: string): string => new Query("cursorBefore", undefined, documentId).toString(); - /** - * Return only limit results. - * - * @param {number} limit - * @returns {string} - */ static limit = (limit: number): string => new Query("limit", undefined, limit).toString(); - /** - * Filter resources by skipping the first offset results. - * - * @param {number} offset - * @returns {string} - */ static offset = (offset: number): string => new Query("offset", undefined, offset).toString(); - /** - * Filter resources where attribute contains the specified value. - * - * @param {string} attribute - * @param {string | string[]} value - * @returns {string} - */ static contains = (attribute: string, value: string | string[]): string => new Query("contains", attribute, value).toString(); - /** - * Combine multiple queries using logical OR operator. - * - * @param {string[]} queries - * @returns {string} - */ static or = (queries: string[]) => new Query("or", undefined, queries.map((query) => JSON.parse(query))).toString(); - /** - * Combine multiple queries using logical AND operator. - * - * @param {string[]} queries - * @returns {string} - */ static and = (queries: string[]) => new Query("and", undefined, queries.map((query) => JSON.parse(query))).toString(); } diff --git a/node_modules/appwrite/src/service.ts b/node_modules/appwrite/src/service.ts index 8b36068..fe17699 100644 --- a/node_modules/appwrite/src/service.ts +++ b/node_modules/appwrite/src/service.ts @@ -2,9 +2,6 @@ import { Client } from './client'; import type { Payload } from './client'; export class Service { - /** - * The size for chunked uploads in bytes. - */ static CHUNK_SIZE = 5*1024*1024; // 5MB client: Client; diff --git a/node_modules/appwrite/src/services/account.ts b/node_modules/appwrite/src/services/account.ts index 55b22bd..023d178 100644 --- a/node_modules/appwrite/src/services/account.ts +++ b/node_modules/appwrite/src/services/account.ts @@ -1,16 +1,17 @@ import { Service } from '../service'; -import { AppwriteException, Client, type Payload, UploadProgress } from '../client'; +import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; +import type { UploadProgress, Payload } from '../client'; import { AuthenticatorType } from '../enums/authenticator-type'; import { AuthenticationFactor } from '../enums/authentication-factor'; import { OAuthProvider } from '../enums/o-auth-provider'; -export class Account { - client: Client; +export class Account extends Service { - constructor(client: Client) { - this.client = client; - } + constructor(client: Client) + { + super(client); + } /** * Get account @@ -18,116 +19,117 @@ export class Account { * Get the currently logged in user. * * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async get(): Promise> { const apiPath = '/account'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create account * - * Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession). + * Use this endpoint to allow a new user to register a new account in your + * project. After the user registration completes successfully, you can use + * the + * [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) + * route to start verifying the user email address. To allow the new user to + * login to their new account, you need to create a new [account + * session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession). * * @param {string} userId * @param {string} email * @param {string} password * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async create(userId: string, email: string, password: string, name?: string): Promise> { if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof email === 'undefined') { throw new AppwriteException('Missing required parameter: "email"'); } + if (typeof password === 'undefined') { throw new AppwriteException('Missing required parameter: "password"'); } + const apiPath = '/account'; const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof email !== 'undefined') { payload['email'] = email; } + if (typeof password !== 'undefined') { payload['password'] = password; } + if (typeof name !== 'undefined') { payload['name'] = name; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update email * - * Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request. -This endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password. - + * Update currently logged in user account email address. After changing user + * address, the user confirmation status will get reset. A new confirmation + * email is not sent automatically however you can use the send confirmation + * email endpoint again to send the confirmation email. For security measures, + * user password is required to complete this request. + * This endpoint can also be used to convert an anonymous account to a normal + * one, by passing an email address and a new password. + * * * @param {string} email * @param {string} password * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async updateEmail(email: string, password: string): Promise> { if (typeof email === 'undefined') { throw new AppwriteException('Missing required parameter: "email"'); } + if (typeof password === 'undefined') { throw new AppwriteException('Missing required parameter: "password"'); } + const apiPath = '/account/email'; const payload: Payload = {}; + if (typeof email !== 'undefined') { payload['email'] = email; } + if (typeof password !== 'undefined') { payload['password'] = password; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List Identities * @@ -135,28 +137,22 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listIdentities(queries?: string[]): Promise { const apiPath = '/account/identities'; const payload: Payload = {}; + if (typeof queries !== 'undefined') { payload['queries'] = queries; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Delete identity * @@ -164,82 +160,68 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string} identityId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async deleteIdentity(identityId: string): Promise<{}> { if (typeof identityId === 'undefined') { throw new AppwriteException('Missing required parameter: "identityId"'); } + const apiPath = '/account/identities/{identityId}'.replace('{identityId}', identityId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('delete', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'delete', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create JWT * - * Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame. + * Use this endpoint to create a JSON Web Token. You can use the resulting JWT + * to authenticate on behalf of the current user when working with the + * Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes + * from its creation and will be invalid if the user will logout in that time + * frame. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createJWT(): Promise { - const apiPath = '/account/jwts'; + const apiPath = '/account/jwt'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List logs * - * Get the list of latest security activity logs for the currently logged in user. Each log returns user IP address, location and date and time of log. + * Get the list of latest security activity logs for the currently logged in + * user. Each log returns user IP address, location and date and time of log. * * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listLogs(queries?: string[]): Promise { const apiPath = '/account/logs'; const payload: Payload = {}; + if (typeof queries !== 'undefined') { payload['queries'] = queries; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update MFA * @@ -247,296 +229,269 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {boolean} mfa * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async updateMFA(mfa: boolean): Promise> { if (typeof mfa === 'undefined') { throw new AppwriteException('Missing required parameter: "mfa"'); } + const apiPath = '/account/mfa'; const payload: Payload = {}; + if (typeof mfa !== 'undefined') { payload['mfa'] = mfa; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** - * Create Authenticator + * Add Authenticator * - * Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](/docs/references/cloud/client-web/account#updateMfaAuthenticator) method. + * Add an authenticator app to be used as an MFA factor. Verify the + * authenticator using the [verify + * authenticator](/docs/references/cloud/client-web/account#verifyAuthenticator) + * method. * * @param {AuthenticatorType} type * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createMfaAuthenticator(type: AuthenticatorType): Promise { if (typeof type === 'undefined') { throw new AppwriteException('Missing required parameter: "type"'); } + const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Verify Authenticator * - * Verify an authenticator app after adding it using the [add authenticator](/docs/references/cloud/client-web/account#createMfaAuthenticator) method. + * Verify an authenticator app after adding it using the [add + * authenticator](/docs/references/cloud/client-web/account#addAuthenticator) + * method. * * @param {AuthenticatorType} type * @param {string} otp * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async updateMfaAuthenticator(type: AuthenticatorType, otp: string): Promise> { if (typeof type === 'undefined') { throw new AppwriteException('Missing required parameter: "type"'); } + if (typeof otp === 'undefined') { throw new AppwriteException('Missing required parameter: "otp"'); } + const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type); const payload: Payload = {}; + if (typeof otp !== 'undefined') { payload['otp'] = otp; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Delete Authenticator * * Delete an authenticator for a user by ID. * * @param {AuthenticatorType} type + * @param {string} otp * @throws {AppwriteException} - * @returns {Promise<{}>} - */ - async deleteMfaAuthenticator(type: AuthenticatorType): Promise<{}> { + * @returns {Promise} + */ + async deleteMfaAuthenticator(type: AuthenticatorType, otp: string): Promise> { if (typeof type === 'undefined') { throw new AppwriteException('Missing required parameter: "type"'); } + + if (typeof otp === 'undefined') { + throw new AppwriteException('Missing required parameter: "otp"'); + } + const apiPath = '/account/mfa/authenticators/{type}'.replace('{type}', type); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', + if (typeof otp !== 'undefined') { + payload['otp'] = otp; } - - return await this.client.call( - 'delete', - uri, - apiHeaders, - payload - ); + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('delete', uri, { + 'content-type': 'application/json', + }, payload); } + /** - * Create MFA Challenge + * Create 2FA Challenge * - * Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) method. + * Begin the process of MFA verification after sign-in. Finish the flow with + * [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) + * method. * * @param {AuthenticationFactor} factor * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createMfaChallenge(factor: AuthenticationFactor): Promise { if (typeof factor === 'undefined') { throw new AppwriteException('Missing required parameter: "factor"'); } + const apiPath = '/account/mfa/challenge'; const payload: Payload = {}; + if (typeof factor !== 'undefined') { payload['factor'] = factor; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create MFA Challenge (confirmation) * - * Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method. + * Complete the MFA challenge by providing the one-time password. Finish the + * process of MFA verification by providing the one-time password. To begin + * the flow, use + * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) + * method. * * @param {string} challengeId * @param {string} otp * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async updateMfaChallenge(challengeId: string, otp: string): Promise<{}> { if (typeof challengeId === 'undefined') { throw new AppwriteException('Missing required parameter: "challengeId"'); } + if (typeof otp === 'undefined') { throw new AppwriteException('Missing required parameter: "otp"'); } + const apiPath = '/account/mfa/challenge'; const payload: Payload = {}; + if (typeof challengeId !== 'undefined') { payload['challengeId'] = challengeId; } + if (typeof otp !== 'undefined') { payload['otp'] = otp; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List Factors * * List the factors available on the account to be used as a MFA challange. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listMfaFactors(): Promise { const apiPath = '/account/mfa/factors'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Get MFA Recovery Codes * - * Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes. + * Get recovery codes that can be used as backup for MFA flow. Before getting + * codes, they must be generated using + * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) + * method. An OTP challenge is required to read recovery codes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async getMfaRecoveryCodes(): Promise { const apiPath = '/account/mfa/recovery-codes'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create MFA Recovery Codes * - * Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method. + * Generate recovery codes as backup for MFA flow. It's recommended to + * generate and show then immediately after user successfully adds their + * authehticator. Recovery codes can be used as a MFA verification type in + * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) + * method. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createMfaRecoveryCodes(): Promise { const apiPath = '/account/mfa/recovery-codes'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Regenerate MFA Recovery Codes * - * Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes. + * Regenerate recovery codes that can be used as backup for MFA flow. Before + * regenerating codes, they must be first generated using + * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) + * method. An OTP challenge is required to regenreate recovery codes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updateMfaRecoveryCodes(): Promise { const apiPath = '/account/mfa/recovery-codes'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update name * @@ -544,645 +499,618 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async updateName(name: string): Promise> { if (typeof name === 'undefined') { throw new AppwriteException('Missing required parameter: "name"'); } + const apiPath = '/account/name'; const payload: Payload = {}; + if (typeof name !== 'undefined') { payload['name'] = name; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update password * - * Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional. + * Update currently logged in user password. For validation, user is required + * to pass in the new password, and the old password. For users created with + * OAuth, Team Invites and Magic URL, oldPassword is optional. * * @param {string} password * @param {string} oldPassword * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async updatePassword(password: string, oldPassword?: string): Promise> { if (typeof password === 'undefined') { throw new AppwriteException('Missing required parameter: "password"'); } + const apiPath = '/account/password'; const payload: Payload = {}; + if (typeof password !== 'undefined') { payload['password'] = password; } + if (typeof oldPassword !== 'undefined') { payload['oldPassword'] = oldPassword; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update phone * - * Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) endpoint to send a confirmation SMS. + * Update the currently logged in user's phone number. After updating the + * phone number, the phone verification status will be reset. A confirmation + * SMS is not sent automatically, however you can use the [POST + * /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) + * endpoint to send a confirmation SMS. * * @param {string} phone * @param {string} password * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async updatePhone(phone: string, password: string): Promise> { if (typeof phone === 'undefined') { throw new AppwriteException('Missing required parameter: "phone"'); } + if (typeof password === 'undefined') { throw new AppwriteException('Missing required parameter: "password"'); } + const apiPath = '/account/phone'; const payload: Payload = {}; + if (typeof phone !== 'undefined') { payload['phone'] = phone; } + if (typeof password !== 'undefined') { payload['password'] = password; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Get account preferences * * Get the preferences as a key-value object for the currently logged in user. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async getPrefs(): Promise { const apiPath = '/account/prefs'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update preferences * - * Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded. + * Update currently logged in user account preferences. The object you pass is + * stored as is, and replaces any previous value. The maximum allowed prefs + * size is 64kB and throws error if exceeded. * * @param {Partial} prefs * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async updatePrefs(prefs: Partial): Promise> { if (typeof prefs === 'undefined') { throw new AppwriteException('Missing required parameter: "prefs"'); } + const apiPath = '/account/prefs'; const payload: Payload = {}; + if (typeof prefs !== 'undefined') { payload['prefs'] = prefs; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create password recovery * - * Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour. + * Sends the user an email with a temporary secret key for password reset. + * When the user clicks the confirmation link he is redirected back to your + * app password reset URL with the secret key and email address values + * attached to the URL query string. Use the query string params to submit a + * request to the [PUT + * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) + * endpoint to complete the process. The verification link sent to the user's + * email address is valid for 1 hour. * * @param {string} email * @param {string} url * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createRecovery(email: string, url: string): Promise { if (typeof email === 'undefined') { throw new AppwriteException('Missing required parameter: "email"'); } + if (typeof url === 'undefined') { throw new AppwriteException('Missing required parameter: "url"'); } + const apiPath = '/account/recovery'; const payload: Payload = {}; + if (typeof email !== 'undefined') { payload['email'] = email; } + if (typeof url !== 'undefined') { payload['url'] = url; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create password recovery (confirmation) * - * Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) endpoint. - -Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. + * Use this endpoint to complete the user account password reset. Both the + * **userId** and **secret** arguments will be passed as query parameters to + * the redirect URL you have provided when sending your request to the [POST + * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) + * endpoint. + * + * Please note that in order to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * @param {string} userId * @param {string} secret * @param {string} password * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updateRecovery(userId: string, secret: string, password: string): Promise { if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof secret === 'undefined') { throw new AppwriteException('Missing required parameter: "secret"'); } + if (typeof password === 'undefined') { throw new AppwriteException('Missing required parameter: "password"'); } + const apiPath = '/account/recovery'; const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof secret !== 'undefined') { payload['secret'] = secret; } + if (typeof password !== 'undefined') { payload['password'] = password; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List sessions * - * Get the list of active sessions across different devices for the currently logged in user. + * Get the list of active sessions across different devices for the currently + * logged in user. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listSessions(): Promise { const apiPath = '/account/sessions'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Delete sessions * - * Delete all sessions from the user account and remove any sessions cookies from the end client. + * Delete all sessions from the user account and remove any sessions cookies + * from the end client. * * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async deleteSessions(): Promise<{}> { const apiPath = '/account/sessions'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('delete', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'delete', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create anonymous session * - * Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) or create an [OAuth2 session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session). + * Use this endpoint to allow a new user to register an anonymous account in + * your project. This route will also create a new session for the user. To + * allow the new user to convert an anonymous account to a normal account, you + * need to update its [email and + * password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) + * or create an [OAuth2 + * session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session). * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createAnonymousSession(): Promise { const apiPath = '/account/sessions/anonymous'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create email password session * - * Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Allow the user to login into their account by providing a valid email and + * password combination. This route will create a new session for the user. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} email * @param {string} password * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createEmailPasswordSession(email: string, password: string): Promise { if (typeof email === 'undefined') { throw new AppwriteException('Missing required parameter: "email"'); } + if (typeof password === 'undefined') { throw new AppwriteException('Missing required parameter: "password"'); } + const apiPath = '/account/sessions/email'; const payload: Payload = {}; + if (typeof email !== 'undefined') { payload['email'] = email; } + if (typeof password !== 'undefined') { payload['password'] = password; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update magic URL session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updateMagicURLSession(userId: string, secret: string): Promise { if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof secret === 'undefined') { throw new AppwriteException('Missing required parameter: "secret"'); } + const apiPath = '/account/sessions/magic-url'; const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof secret !== 'undefined') { payload['secret'] = secret; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create OAuth2 session * - * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. - -If there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). - + * Allow the user to login to their account using the OAuth2 provider of their + * choice. Each OAuth2 provider should be enabled from the Appwrite console + * first. Use the success and failure arguments to provide a redirect URL's + * back to your app when login is completed. + * + * If there is already an active session, the new session will be attached to + * the logged-in account. If there are no active sessions, the server will + * attempt to look for a user with the same email address as the email + * received from the OAuth2 provider and attach the new session to the + * existing user. If no matching user is found - the server will create a new + * user. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). + * * * @param {OAuthProvider} provider * @param {string} success * @param {string} failure * @param {string[]} scopes * @throws {AppwriteException} - * @returns {Promise} - */ - async createOAuth2Session(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): Promise { + * @returns {void|string} + */ + createOAuth2Session(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): void | URL { if (typeof provider === 'undefined') { throw new AppwriteException('Missing required parameter: "provider"'); } + const apiPath = '/account/sessions/oauth2/{provider}'.replace('{provider}', provider); const payload: Payload = {}; + if (typeof success !== 'undefined') { payload['success'] = success; } + if (typeof failure !== 'undefined') { payload['failure'] = failure; } + if (typeof scopes !== 'undefined') { payload['scopes'] = scopes; } + const uri = new URL(this.client.config.endpoint + apiPath); + payload['project'] = this.client.config.project; - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } - payload['project'] = this.client.config.project; for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - if (typeof window !== 'undefined' && window?.location) { window.location.href = uri.toString(); - return; } else { - return uri.toString(); + return uri; } } + /** * Update phone session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updatePhoneSession(userId: string, secret: string): Promise { if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof secret === 'undefined') { throw new AppwriteException('Missing required parameter: "secret"'); } + const apiPath = '/account/sessions/phone'; const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof secret !== 'undefined') { payload['secret'] = secret; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createSession(userId: string, secret: string): Promise { if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof secret === 'undefined') { throw new AppwriteException('Missing required parameter: "secret"'); } + const apiPath = '/account/sessions/token'; const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof secret !== 'undefined') { payload['secret'] = secret; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Get session * - * Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used. + * Use this endpoint to get a logged in user's session using a Session ID. + * Inputting 'current' will return the current session being used. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async getSession(sessionId: string): Promise { if (typeof sessionId === 'undefined') { throw new AppwriteException('Missing required parameter: "sessionId"'); } + const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update session * - * Use this endpoint to extend a session's length. Extending a session is useful when session expiry is short. If the session was created using an OAuth provider, this endpoint refreshes the access token from the provider. + * Use this endpoint to extend a session's length. Extending a session is + * useful when session expiry is short. If the session was created using an + * OAuth provider, this endpoint refreshes the access token from the provider. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updateSession(sessionId: string): Promise { if (typeof sessionId === 'undefined') { throw new AppwriteException('Missing required parameter: "sessionId"'); } + const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Delete session * - * Logout the user. Use 'current' as the session ID to logout on this device, use a session ID to logout on another device. If you're looking to logout the user on all devices, use [Delete Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) instead. + * Logout the user. Use 'current' as the session ID to logout on this device, + * use a session ID to logout on another device. If you're looking to logout + * the user on all devices, use [Delete + * Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) + * instead. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async deleteSession(sessionId: string): Promise<{}> { if (typeof sessionId === 'undefined') { throw new AppwriteException('Missing required parameter: "sessionId"'); } + const apiPath = '/account/sessions/{sessionId}'.replace('{sessionId}', sessionId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('delete', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'delete', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update status * - * Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead. + * Block the currently logged in user account. Behind the scene, the user + * record is not deleted but permanently blocked from any access. To + * completely delete a user, use the Users API instead. * * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async updateStatus(): Promise> { const apiPath = '/account/status'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create push target * @@ -1191,40 +1119,38 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * @param {string} identifier * @param {string} providerId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createPushTarget(targetId: string, identifier: string, providerId?: string): Promise { if (typeof targetId === 'undefined') { throw new AppwriteException('Missing required parameter: "targetId"'); } + if (typeof identifier === 'undefined') { throw new AppwriteException('Missing required parameter: "identifier"'); } + const apiPath = '/account/targets/push'; const payload: Payload = {}; + if (typeof targetId !== 'undefined') { payload['targetId'] = targetId; } + if (typeof identifier !== 'undefined') { payload['identifier'] = identifier; } + if (typeof providerId !== 'undefined') { payload['providerId'] = providerId; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update push target * @@ -1232,383 +1158,408 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * @param {string} targetId * @param {string} identifier * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updatePushTarget(targetId: string, identifier: string): Promise { if (typeof targetId === 'undefined') { throw new AppwriteException('Missing required parameter: "targetId"'); } + if (typeof identifier === 'undefined') { throw new AppwriteException('Missing required parameter: "identifier"'); } + const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId); const payload: Payload = {}; + if (typeof identifier !== 'undefined') { payload['identifier'] = identifier; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Delete push target * * * @param {string} targetId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async deletePushTarget(targetId: string): Promise<{}> { if (typeof targetId === 'undefined') { throw new AppwriteException('Missing required parameter: "targetId"'); } + const apiPath = '/account/targets/{targetId}/push'.replace('{targetId}', targetId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('delete', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'delete', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create email token (OTP) * - * Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Sends the user an email with a secret key for creating a session. If the + * provided user ID has not be registered, a new user will be created. Use the + * returned user ID and secret and submit a request to the [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The secret sent to the user's email + * is valid for 15 minutes. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} userId * @param {string} email * @param {boolean} phrase * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createEmailToken(userId: string, email: string, phrase?: boolean): Promise { if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof email === 'undefined') { throw new AppwriteException('Missing required parameter: "email"'); } + const apiPath = '/account/tokens/email'; const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof email !== 'undefined') { payload['email'] = email; } + if (typeof phrase !== 'undefined') { payload['phrase'] = phrase; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create magic URL token * - * Sends the user an email with a secret key for creating a session. If the provided user ID has not been registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). - + * Sends the user an email with a secret key for creating a session. If the + * provided user ID has not been registered, a new user will be created. When + * the user clicks the link in the email, the user is redirected back to the + * URL you provided with the secret key and userId values attached to the URL + * query string. Use the query string parameters to submit a request to the + * [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The link sent to the user's email + * address is valid for 1 hour. If you are on a mobile device you can leave + * the URL parameter empty, so that the login completion will be handled by + * your Appwrite instance by default. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). + * * * @param {string} userId * @param {string} email * @param {string} url * @param {boolean} phrase * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createMagicURLToken(userId: string, email: string, url?: string, phrase?: boolean): Promise { if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof email === 'undefined') { throw new AppwriteException('Missing required parameter: "email"'); } + const apiPath = '/account/tokens/magic-url'; const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof email !== 'undefined') { payload['email'] = email; } + if (typeof url !== 'undefined') { payload['url'] = url; } + if (typeof phrase !== 'undefined') { payload['phrase'] = phrase; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create OAuth2 token * - * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. - -If authentication succeeds, `userId` and `secret` of a token will be appended to the success URL as query parameters. These can be used to create a new session using the [Create session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Allow the user to login to their account using the OAuth2 provider of their + * choice. Each OAuth2 provider should be enabled from the Appwrite console + * first. Use the success and failure arguments to provide a redirect URL's + * back to your app when login is completed. + * + * If authentication succeeds, `userId` and `secret` of a token will be + * appended to the success URL as query parameters. These can be used to + * create a new session using the [Create + * session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {OAuthProvider} provider * @param {string} success * @param {string} failure * @param {string[]} scopes * @throws {AppwriteException} - * @returns {Promise} - */ - async createOAuth2Token(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): Promise { + * @returns {void|string} + */ + createOAuth2Token(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): void | URL { if (typeof provider === 'undefined') { throw new AppwriteException('Missing required parameter: "provider"'); } + const apiPath = '/account/tokens/oauth2/{provider}'.replace('{provider}', provider); const payload: Payload = {}; + if (typeof success !== 'undefined') { payload['success'] = success; } + if (typeof failure !== 'undefined') { payload['failure'] = failure; } + if (typeof scopes !== 'undefined') { payload['scopes'] = scopes; } + const uri = new URL(this.client.config.endpoint + apiPath); + payload['project'] = this.client.config.project; - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } - payload['project'] = this.client.config.project; for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - if (typeof window !== 'undefined' && window?.location) { window.location.href = uri.toString(); - return; } else { - return uri.toString(); + return uri; } } + /** * Create phone token * - * Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Sends the user an SMS with a secret key for creating a session. If the + * provided user ID has not be registered, a new user will be created. Use the + * returned user ID and secret and submit a request to the [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The secret sent to the user's phone + * is valid for 15 minutes. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} userId * @param {string} phone * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createPhoneToken(userId: string, phone: string): Promise { if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof phone === 'undefined') { throw new AppwriteException('Missing required parameter: "phone"'); } + const apiPath = '/account/tokens/phone'; const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof phone !== 'undefined') { payload['phone'] = phone; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create email verification * - * Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). The verification link sent to the user's email address is valid for 7 days. - -Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. - + * Use this endpoint to send a verification message to your user email address + * to confirm they are the valid owners of that address. Both the **userId** + * and **secret** arguments will be passed as query parameters to the URL you + * have provided to be attached to the verification email. The provided URL + * should redirect the user back to your app and allow you to complete the + * verification process by verifying both the **userId** and **secret** + * parameters. Learn more about how to [complete the verification + * process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). + * The verification link sent to the user's email address is valid for 7 days. + * + * Please note that in order to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. + * * * @param {string} url * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createVerification(url: string): Promise { if (typeof url === 'undefined') { throw new AppwriteException('Missing required parameter: "url"'); } + const apiPath = '/account/verification'; const payload: Payload = {}; + if (typeof url !== 'undefined') { payload['url'] = url; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create email verification (confirmation) * - * Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code. + * Use this endpoint to complete the user email verification process. Use both + * the **userId** and **secret** parameters that were attached to your app URL + * to verify the user email ownership. If confirmed this route will return a + * 200 status code. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updateVerification(userId: string, secret: string): Promise { if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof secret === 'undefined') { throw new AppwriteException('Missing required parameter: "secret"'); } + const apiPath = '/account/verification'; const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof secret !== 'undefined') { payload['secret'] = secret; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create phone verification * - * Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) endpoint. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes. + * Use this endpoint to send a verification SMS to the currently logged in + * user. This endpoint is meant for use after updating a user's phone number + * using the + * [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) + * endpoint. Learn more about how to [complete the verification + * process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). + * The verification code sent to the user's phone number is valid for 15 + * minutes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createPhoneVerification(): Promise { const apiPath = '/account/verification/phone'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** - * Update phone verification (confirmation) + * Create phone verification (confirmation) * - * Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code. + * Use this endpoint to complete the user phone verification process. Use the + * **userId** and **secret** that were sent to your user's phone number to + * verify the user email ownership. If confirmed this route will return a 200 + * status code. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updatePhoneVerification(userId: string, secret: string): Promise { if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof secret === 'undefined') { throw new AppwriteException('Missing required parameter: "secret"'); } + const apiPath = '/account/verification/phone'; const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof secret !== 'undefined') { payload['secret'] = secret; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } -} +}; diff --git a/node_modules/appwrite/src/services/avatars.ts b/node_modules/appwrite/src/services/avatars.ts index 21376ea..fae5666 100644 --- a/node_modules/appwrite/src/services/avatars.ts +++ b/node_modules/appwrite/src/services/avatars.ts @@ -1,350 +1,355 @@ import { Service } from '../service'; -import { AppwriteException, Client, type Payload, UploadProgress } from '../client'; +import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; +import type { UploadProgress, Payload } from '../client'; import { Browser } from '../enums/browser'; import { CreditCard } from '../enums/credit-card'; import { Flag } from '../enums/flag'; -export class Avatars { - client: Client; +export class Avatars extends Service { - constructor(client: Client) { - this.client = client; - } + constructor(client: Client) + { + super(client); + } /** * Get browser icon * - * You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) endpoint. Use width, height and quality arguments to change the output settings. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. + * You can use this endpoint to show different browser icons to your users. + * The code argument receives the browser code as it appears in your user [GET + * /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) + * endpoint. Use width, height and quality arguments to change the output + * settings. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. * * @param {Browser} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ - getBrowser(code: Browser, width?: number, height?: number, quality?: number): string { + * @returns {URL} + */ + getBrowser(code: Browser, width?: number, height?: number, quality?: number): URL { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); } + const apiPath = '/avatars/browsers/{code}'.replace('{code}', code); const payload: Payload = {}; + if (typeof width !== 'undefined') { payload['width'] = width; } + if (typeof height !== 'undefined') { payload['height'] = height; } + if (typeof quality !== 'undefined') { payload['quality'] = quality; } - const uri = new URL(this.client.config.endpoint + apiPath); - - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } + const uri = new URL(this.client.config.endpoint + apiPath); payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { + for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - - return uri.toString(); + return uri; } + /** * Get credit card icon * - * The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * The credit card endpoint will return you the icon of the credit card + * provider you need. Use width, height and quality arguments to change the + * output settings. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {CreditCard} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ - getCreditCard(code: CreditCard, width?: number, height?: number, quality?: number): string { + * @returns {URL} + */ + getCreditCard(code: CreditCard, width?: number, height?: number, quality?: number): URL { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); } + const apiPath = '/avatars/credit-cards/{code}'.replace('{code}', code); const payload: Payload = {}; + if (typeof width !== 'undefined') { payload['width'] = width; } + if (typeof height !== 'undefined') { payload['height'] = height; } + if (typeof quality !== 'undefined') { payload['quality'] = quality; } - const uri = new URL(this.client.config.endpoint + apiPath); - - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } + const uri = new URL(this.client.config.endpoint + apiPath); payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { + for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - - return uri.toString(); + return uri; } + /** * Get favicon * - * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL. - -This endpoint does not follow HTTP redirects. + * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote + * website URL. + * * * @param {string} url * @throws {AppwriteException} - * @returns {string} - */ - getFavicon(url: string): string { + * @returns {URL} + */ + getFavicon(url: string): URL { if (typeof url === 'undefined') { throw new AppwriteException('Missing required parameter: "url"'); } + const apiPath = '/avatars/favicon'; const payload: Payload = {}; + if (typeof url !== 'undefined') { payload['url'] = url; } - const uri = new URL(this.client.config.endpoint + apiPath); - - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } + const uri = new URL(this.client.config.endpoint + apiPath); payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { + for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - - return uri.toString(); + return uri; } + /** * Get country flag * - * You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * You can use this endpoint to show different country flags icons to your + * users. The code argument receives the 2 letter country code. Use width, + * height and quality arguments to change the output settings. Country codes + * follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {Flag} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ - getFlag(code: Flag, width?: number, height?: number, quality?: number): string { + * @returns {URL} + */ + getFlag(code: Flag, width?: number, height?: number, quality?: number): URL { if (typeof code === 'undefined') { throw new AppwriteException('Missing required parameter: "code"'); } + const apiPath = '/avatars/flags/{code}'.replace('{code}', code); const payload: Payload = {}; + if (typeof width !== 'undefined') { payload['width'] = width; } + if (typeof height !== 'undefined') { payload['height'] = height; } + if (typeof quality !== 'undefined') { payload['quality'] = quality; } - const uri = new URL(this.client.config.endpoint + apiPath); - - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } + const uri = new URL(this.client.config.endpoint + apiPath); payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { + for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - - return uri.toString(); + return uri; } + /** * Get image from URL * - * Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px. - -This endpoint does not follow HTTP redirects. + * Use this endpoint to fetch a remote image URL and crop it to any image size + * you want. This endpoint is very useful if you need to crop and display + * remote images in your app or in case you want to make sure a 3rd party + * image is properly served using a TLS protocol. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 400x400px. + * * * @param {string} url * @param {number} width * @param {number} height * @throws {AppwriteException} - * @returns {string} - */ - getImage(url: string, width?: number, height?: number): string { + * @returns {URL} + */ + getImage(url: string, width?: number, height?: number): URL { if (typeof url === 'undefined') { throw new AppwriteException('Missing required parameter: "url"'); } + const apiPath = '/avatars/image'; const payload: Payload = {}; + if (typeof url !== 'undefined') { payload['url'] = url; } + if (typeof width !== 'undefined') { payload['width'] = width; } + if (typeof height !== 'undefined') { payload['height'] = height; } - const uri = new URL(this.client.config.endpoint + apiPath); - - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } + const uri = new URL(this.client.config.endpoint + apiPath); payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { + for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - - return uri.toString(); + return uri; } + /** * Get user initials * - * Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned. - -You can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * Use this endpoint to show your user initials avatar icon on your website or + * app. By default, this route will try to print your logged-in user name or + * email initials. You can also overwrite the user name if you pass the 'name' + * parameter. If no name is given and no user is logged, an empty avatar will + * be returned. + * + * You can use the color and background params to change the avatar colors. By + * default, a random theme will be selected. The random theme will persist for + * the user's initials when reloading the same theme will always return for + * the same initials. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {string} name * @param {number} width * @param {number} height * @param {string} background * @throws {AppwriteException} - * @returns {string} - */ - getInitials(name?: string, width?: number, height?: number, background?: string): string { + * @returns {URL} + */ + getInitials(name?: string, width?: number, height?: number, background?: string): URL { const apiPath = '/avatars/initials'; const payload: Payload = {}; + if (typeof name !== 'undefined') { payload['name'] = name; } + if (typeof width !== 'undefined') { payload['width'] = width; } + if (typeof height !== 'undefined') { payload['height'] = height; } + if (typeof background !== 'undefined') { payload['background'] = background; } - const uri = new URL(this.client.config.endpoint + apiPath); - - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } + const uri = new URL(this.client.config.endpoint + apiPath); payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { + for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - - return uri.toString(); + return uri; } + /** * Get QR code * - * Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image. - + * Converts a given plain text to a QR code image. You can use the query + * parameters to change the size and style of the resulting image. + * * * @param {string} text * @param {number} size * @param {number} margin * @param {boolean} download * @throws {AppwriteException} - * @returns {string} - */ - getQR(text: string, size?: number, margin?: number, download?: boolean): string { + * @returns {URL} + */ + getQR(text: string, size?: number, margin?: number, download?: boolean): URL { if (typeof text === 'undefined') { throw new AppwriteException('Missing required parameter: "text"'); } + const apiPath = '/avatars/qr'; const payload: Payload = {}; + if (typeof text !== 'undefined') { payload['text'] = text; } + if (typeof size !== 'undefined') { payload['size'] = size; } + if (typeof margin !== 'undefined') { payload['margin'] = margin; } + if (typeof download !== 'undefined') { payload['download'] = download; } - const uri = new URL(this.client.config.endpoint + apiPath); - - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } + const uri = new URL(this.client.config.endpoint + apiPath); payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { + for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - - return uri.toString(); + return uri; } -} +}; diff --git a/node_modules/appwrite/src/services/databases.ts b/node_modules/appwrite/src/services/databases.ts index 51ac5f1..d2bbfa1 100644 --- a/node_modules/appwrite/src/services/databases.ts +++ b/node_modules/appwrite/src/services/databases.ts @@ -1,55 +1,56 @@ import { Service } from '../service'; -import { AppwriteException, Client, type Payload, UploadProgress } from '../client'; +import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; +import type { UploadProgress, Payload } from '../client'; -export class Databases { - client: Client; +export class Databases extends Service { - constructor(client: Client) { - this.client = client; - } + constructor(client: Client) + { + super(client); + } /** * List documents * - * Get a list of all the user's documents in a given collection. You can use the query params to filter your results. + * Get a list of all the user's documents in a given collection. You can use + * the query params to filter your results. * * @param {string} databaseId * @param {string} collectionId * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async listDocuments(databaseId: string, collectionId: string, queries?: string[]): Promise> { if (typeof databaseId === 'undefined') { throw new AppwriteException('Missing required parameter: "databaseId"'); } + if (typeof collectionId === 'undefined') { throw new AppwriteException('Missing required parameter: "collectionId"'); } + const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId); const payload: Payload = {}; + if (typeof queries !== 'undefined') { payload['queries'] = queries; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create document * - * Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) API or directly from your database console. + * Create a new Document. Before using this route, you should create a new + * collection resource using either a [server + * integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) + * API or directly from your database console. * * @param {string} databaseId * @param {string} collectionId @@ -57,91 +58,90 @@ export class Databases { * @param {Omit} data * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createDocument(databaseId: string, collectionId: string, documentId: string, data: Omit, permissions?: string[]): Promise { if (typeof databaseId === 'undefined') { throw new AppwriteException('Missing required parameter: "databaseId"'); } + if (typeof collectionId === 'undefined') { throw new AppwriteException('Missing required parameter: "collectionId"'); } + if (typeof documentId === 'undefined') { throw new AppwriteException('Missing required parameter: "documentId"'); } + if (typeof data === 'undefined') { throw new AppwriteException('Missing required parameter: "data"'); } + const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId); const payload: Payload = {}; + if (typeof documentId !== 'undefined') { payload['documentId'] = documentId; } + if (typeof data !== 'undefined') { payload['data'] = data; } + if (typeof permissions !== 'undefined') { payload['permissions'] = permissions; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Get document * - * Get a document by its unique ID. This endpoint response returns a JSON object with the document data. + * Get a document by its unique ID. This endpoint response returns a JSON + * object with the document data. * * @param {string} databaseId * @param {string} collectionId * @param {string} documentId * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async getDocument(databaseId: string, collectionId: string, documentId: string, queries?: string[]): Promise { if (typeof databaseId === 'undefined') { throw new AppwriteException('Missing required parameter: "databaseId"'); } + if (typeof collectionId === 'undefined') { throw new AppwriteException('Missing required parameter: "collectionId"'); } + if (typeof documentId === 'undefined') { throw new AppwriteException('Missing required parameter: "documentId"'); } + const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId); const payload: Payload = {}; + if (typeof queries !== 'undefined') { payload['queries'] = queries; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update document * - * Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated. + * Update a document by its unique ID. Using the patch method you can pass + * only specific fields that will get updated. * * @param {string} databaseId * @param {string} collectionId @@ -149,40 +149,38 @@ export class Databases { * @param {Partial>} data * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updateDocument(databaseId: string, collectionId: string, documentId: string, data?: Partial>, permissions?: string[]): Promise { if (typeof databaseId === 'undefined') { throw new AppwriteException('Missing required parameter: "databaseId"'); } + if (typeof collectionId === 'undefined') { throw new AppwriteException('Missing required parameter: "collectionId"'); } + if (typeof documentId === 'undefined') { throw new AppwriteException('Missing required parameter: "documentId"'); } + const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId); const payload: Payload = {}; + if (typeof data !== 'undefined') { payload['data'] = data; } + if (typeof permissions !== 'undefined') { payload['permissions'] = permissions; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Delete document * @@ -192,32 +190,27 @@ export class Databases { * @param {string} collectionId * @param {string} documentId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async deleteDocument(databaseId: string, collectionId: string, documentId: string): Promise<{}> { if (typeof databaseId === 'undefined') { throw new AppwriteException('Missing required parameter: "databaseId"'); } + if (typeof collectionId === 'undefined') { throw new AppwriteException('Missing required parameter: "collectionId"'); } + if (typeof documentId === 'undefined') { throw new AppwriteException('Missing required parameter: "documentId"'); } + const apiPath = '/databases/{databaseId}/collections/{collectionId}/documents/{documentId}'.replace('{databaseId}', databaseId).replace('{collectionId}', collectionId).replace('{documentId}', documentId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('delete', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'delete', - uri, - apiHeaders, - payload - ); + }, payload); } -} +}; diff --git a/node_modules/appwrite/src/services/functions.ts b/node_modules/appwrite/src/services/functions.ts index 99b1df7..16d55fe 100644 --- a/node_modules/appwrite/src/services/functions.ts +++ b/node_modules/appwrite/src/services/functions.ts @@ -1,56 +1,57 @@ import { Service } from '../service'; -import { AppwriteException, Client, type Payload, UploadProgress } from '../client'; +import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; +import type { UploadProgress, Payload } from '../client'; import { ExecutionMethod } from '../enums/execution-method'; -export class Functions { - client: Client; +export class Functions extends Service { - constructor(client: Client) { - this.client = client; - } + constructor(client: Client) + { + super(client); + } /** * List executions * - * Get a list of all the current user function execution logs. You can use the query params to filter your results. + * Get a list of all the current user function execution logs. You can use the + * query params to filter your results. * * @param {string} functionId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listExecutions(functionId: string, queries?: string[], search?: string): Promise { if (typeof functionId === 'undefined') { throw new AppwriteException('Missing required parameter: "functionId"'); } + const apiPath = '/functions/{functionId}/executions'.replace('{functionId}', functionId); const payload: Payload = {}; + if (typeof queries !== 'undefined') { payload['queries'] = queries; } + if (typeof search !== 'undefined') { payload['search'] = search; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create execution * - * Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously. + * Trigger a function execution. The returned object will return you the + * current execution status. You can ping the `Get Execution` endpoint to get + * updates on the current execution status. Once this endpoint is called, your + * function execution process will start asynchronously. * * @param {string} functionId * @param {string} body @@ -58,48 +59,43 @@ export class Functions { * @param {string} xpath * @param {ExecutionMethod} method * @param {object} headers - * @param {string} scheduledAt * @throws {AppwriteException} - * @returns {Promise} - */ - async createExecution(functionId: string, body?: string, async?: boolean, xpath?: string, method?: ExecutionMethod, headers?: object, scheduledAt?: string): Promise { + * @returns {Promise} + */ + async createExecution(functionId: string, body?: string, async?: boolean, xpath?: string, method?: ExecutionMethod, headers?: object): Promise { if (typeof functionId === 'undefined') { throw new AppwriteException('Missing required parameter: "functionId"'); } + const apiPath = '/functions/{functionId}/executions'.replace('{functionId}', functionId); const payload: Payload = {}; + if (typeof body !== 'undefined') { payload['body'] = body; } + if (typeof async !== 'undefined') { payload['async'] = async; } + if (typeof xpath !== 'undefined') { payload['path'] = xpath; } + if (typeof method !== 'undefined') { payload['method'] = method; } + if (typeof headers !== 'undefined') { payload['headers'] = headers; } - if (typeof scheduledAt !== 'undefined') { - payload['scheduledAt'] = scheduledAt; - } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Get execution * @@ -108,29 +104,23 @@ export class Functions { * @param {string} functionId * @param {string} executionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async getExecution(functionId: string, executionId: string): Promise { if (typeof functionId === 'undefined') { throw new AppwriteException('Missing required parameter: "functionId"'); } + if (typeof executionId === 'undefined') { throw new AppwriteException('Missing required parameter: "executionId"'); } + const apiPath = '/functions/{functionId}/executions/{executionId}'.replace('{functionId}', functionId).replace('{executionId}', executionId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } -} +}; diff --git a/node_modules/appwrite/src/services/graphql.ts b/node_modules/appwrite/src/services/graphql.ts index e8b27ec..ca03efb 100644 --- a/node_modules/appwrite/src/services/graphql.ts +++ b/node_modules/appwrite/src/services/graphql.ts @@ -1,13 +1,14 @@ import { Service } from '../service'; -import { AppwriteException, Client, type Payload, UploadProgress } from '../client'; +import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; +import type { UploadProgress, Payload } from '../client'; -export class Graphql { - client: Client; +export class Graphql extends Service { - constructor(client: Client) { - this.client = client; - } + constructor(client: Client) + { + super(client); + } /** * GraphQL endpoint @@ -16,32 +17,27 @@ export class Graphql { * * @param {object} query * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async query(query: object): Promise<{}> { if (typeof query === 'undefined') { throw new AppwriteException('Missing required parameter: "query"'); } + const apiPath = '/graphql'; const payload: Payload = {}; + if (typeof query !== 'undefined') { payload['query'] = query; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'x-sdk-graphql': 'true', 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * GraphQL endpoint * @@ -49,30 +45,24 @@ export class Graphql { * * @param {object} query * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async mutation(query: object): Promise<{}> { if (typeof query === 'undefined') { throw new AppwriteException('Missing required parameter: "query"'); } + const apiPath = '/graphql/mutation'; const payload: Payload = {}; + if (typeof query !== 'undefined') { payload['query'] = query; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'x-sdk-graphql': 'true', 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } -} +}; diff --git a/node_modules/appwrite/src/services/locale.ts b/node_modules/appwrite/src/services/locale.ts index 5439c13..d70b5ed 100644 --- a/node_modules/appwrite/src/services/locale.ts +++ b/node_modules/appwrite/src/services/locale.ts @@ -1,214 +1,169 @@ import { Service } from '../service'; -import { AppwriteException, Client, type Payload, UploadProgress } from '../client'; +import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; +import type { UploadProgress, Payload } from '../client'; -export class Locale { - client: Client; +export class Locale extends Service { - constructor(client: Client) { - this.client = client; - } + constructor(client: Client) + { + super(client); + } /** * Get user locale * - * Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language. - -([IP Geolocation by DB-IP](https://db-ip.com)) + * Get the current user location based on IP. Returns an object with user + * country code, country name, continent name, continent code, ip address and + * suggested currency. You can use the locale header to get the data in a + * supported language. + * + * ([IP Geolocation by DB-IP](https://db-ip.com)) * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async get(): Promise { const apiPath = '/locale'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List Locale Codes * - * List of all locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). + * List of all locale codes in [ISO + * 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listCodes(): Promise { const apiPath = '/locale/codes'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List continents * - * List of all continents. You can use the locale header to get the data in a supported language. + * List of all continents. You can use the locale header to get the data in a + * supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listContinents(): Promise { const apiPath = '/locale/continents'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List countries * - * List of all countries. You can use the locale header to get the data in a supported language. + * List of all countries. You can use the locale header to get the data in a + * supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listCountries(): Promise { const apiPath = '/locale/countries'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List EU countries * - * List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language. + * List of all countries that are currently members of the EU. You can use the + * locale header to get the data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listCountriesEU(): Promise { const apiPath = '/locale/countries/eu'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List countries phone codes * - * List of all countries phone codes. You can use the locale header to get the data in a supported language. + * List of all countries phone codes. You can use the locale header to get the + * data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listCountriesPhones(): Promise { const apiPath = '/locale/countries/phones'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List currencies * - * List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language. + * List of all currencies, including currency symbol, name, plural, and + * decimal digits for all major and minor currencies. You can use the locale + * header to get the data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listCurrencies(): Promise { const apiPath = '/locale/currencies'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List languages * - * List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language. + * List of all languages classified by ISO 639-1 including 2-letter code, name + * in English, and name in the respective language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listLanguages(): Promise { const apiPath = '/locale/languages'; const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } -} +}; diff --git a/node_modules/appwrite/src/services/messaging.ts b/node_modules/appwrite/src/services/messaging.ts index 8562a2f..16920b2 100644 --- a/node_modules/appwrite/src/services/messaging.ts +++ b/node_modules/appwrite/src/services/messaging.ts @@ -1,13 +1,14 @@ import { Service } from '../service'; -import { AppwriteException, Client, type Payload, UploadProgress } from '../client'; +import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; +import type { UploadProgress, Payload } from '../client'; -export class Messaging { - client: Client; +export class Messaging extends Service { - constructor(client: Client) { - this.client = client; - } + constructor(client: Client) + { + super(client); + } /** * Create subscriber @@ -18,40 +19,38 @@ export class Messaging { * @param {string} subscriberId * @param {string} targetId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createSubscriber(topicId: string, subscriberId: string, targetId: string): Promise { if (typeof topicId === 'undefined') { throw new AppwriteException('Missing required parameter: "topicId"'); } + if (typeof subscriberId === 'undefined') { throw new AppwriteException('Missing required parameter: "subscriberId"'); } + if (typeof targetId === 'undefined') { throw new AppwriteException('Missing required parameter: "targetId"'); } + const apiPath = '/messaging/topics/{topicId}/subscribers'.replace('{topicId}', topicId); const payload: Payload = {}; + if (typeof subscriberId !== 'undefined') { payload['subscriberId'] = subscriberId; } + if (typeof targetId !== 'undefined') { payload['targetId'] = targetId; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Delete subscriber * @@ -60,29 +59,23 @@ export class Messaging { * @param {string} topicId * @param {string} subscriberId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async deleteSubscriber(topicId: string, subscriberId: string): Promise<{}> { if (typeof topicId === 'undefined') { throw new AppwriteException('Missing required parameter: "topicId"'); } + if (typeof subscriberId === 'undefined') { throw new AppwriteException('Missing required parameter: "subscriberId"'); } + const apiPath = '/messaging/topics/{topicId}/subscribers/{subscriberId}'.replace('{topicId}', topicId).replace('{subscriberId}', subscriberId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('delete', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'delete', - uri, - apiHeaders, - payload - ); + }, payload); } -} +}; diff --git a/node_modules/appwrite/src/services/storage.ts b/node_modules/appwrite/src/services/storage.ts index ba4c479..83a51b1 100644 --- a/node_modules/appwrite/src/services/storage.ts +++ b/node_modules/appwrite/src/services/storage.ts @@ -1,257 +1,301 @@ import { Service } from '../service'; -import { AppwriteException, Client, type Payload, UploadProgress } from '../client'; +import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; +import type { UploadProgress, Payload } from '../client'; import { ImageGravity } from '../enums/image-gravity'; import { ImageFormat } from '../enums/image-format'; -export class Storage { - client: Client; +export class Storage extends Service { - constructor(client: Client) { - this.client = client; - } + constructor(client: Client) + { + super(client); + } /** * List files * - * Get a list of all the user files. You can use the query params to filter your results. + * Get a list of all the user files. You can use the query params to filter + * your results. * * @param {string} bucketId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listFiles(bucketId: string, queries?: string[], search?: string): Promise { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); } + const apiPath = '/storage/buckets/{bucketId}/files'.replace('{bucketId}', bucketId); const payload: Payload = {}; + if (typeof queries !== 'undefined') { payload['queries'] = queries; } + if (typeof search !== 'undefined') { payload['search'] = search; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create file * - * Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](https://appwrite.io/docs/server/storage#storageCreateBucket) API or directly from your Appwrite console. - -Larger files should be uploaded using multiple requests with the [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes. - -When the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one. - -If you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally. - + * Create a new file. Before using this route, you should create a new bucket + * resource using either a [server + * integration](https://appwrite.io/docs/server/storage#storageCreateBucket) + * API or directly from your Appwrite console. + * + * Larger files should be uploaded using multiple requests with the + * [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) + * header to send a partial request with a maximum supported chunk of `5MB`. + * The `content-range` header values should always be in bytes. + * + * When the first request is sent, the server will return the **File** object, + * and the subsequent part request must include the file's **id** in + * `x-appwrite-id` header to allow the server to know that the partial upload + * is for the existing file and not for a new one. + * + * If you're creating a new file using one of the Appwrite SDKs, all the + * chunking logic will be managed by the SDK internally. + * * * @param {string} bucketId * @param {string} fileId * @param {File} file * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createFile(bucketId: string, fileId: string, file: File, permissions?: string[], onProgress = (progress: UploadProgress) => {}): Promise { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); } + if (typeof fileId === 'undefined') { throw new AppwriteException('Missing required parameter: "fileId"'); } + if (typeof file === 'undefined') { throw new AppwriteException('Missing required parameter: "file"'); } + const apiPath = '/storage/buckets/{bucketId}/files'.replace('{bucketId}', bucketId); const payload: Payload = {}; + if (typeof fileId !== 'undefined') { payload['fileId'] = fileId; } + if (typeof file !== 'undefined') { payload['file'] = file; } + if (typeof permissions !== 'undefined') { payload['permissions'] = permissions; } + const uri = new URL(this.client.config.endpoint + apiPath); + if(!(file instanceof File)) { + throw new AppwriteException('Parameter "file" has to be a File.'); + } + + const size = file.size; + + if (size <= Service.CHUNK_SIZE) { + return await this.client.call('post', uri, { + 'content-type': 'multipart/form-data', + }, payload); + } + const apiHeaders: { [header: string]: string } = { 'content-type': 'multipart/form-data', } - - return await this.client.chunkedUpload( - 'post', - uri, - apiHeaders, - payload, - onProgress - ); + let offset = 0; + let response = undefined; + if(fileId != 'unique()') { + try { + response = await this.client.call('GET', new URL(this.client.config.endpoint + apiPath + '/' + fileId), apiHeaders); + offset = response.chunksUploaded * Service.CHUNK_SIZE; + } catch(e) { + } + } + + while (offset < size) { + let end = Math.min(offset + Service.CHUNK_SIZE - 1, size - 1); + + apiHeaders['content-range'] = 'bytes ' + offset + '-' + end + '/' + size; + if (response && response.$id) { + apiHeaders['x-appwrite-id'] = response.$id; + } + + const chunk = file.slice(offset, end + 1); + payload['file'] = new File([chunk], file.name); + response = await this.client.call('post', uri, apiHeaders, payload); + + if (onProgress) { + onProgress({ + $id: response.$id, + progress: (offset / size) * 100, + sizeUploaded: offset, + chunksTotal: response.chunksTotal, + chunksUploaded: response.chunksUploaded + }); + } + offset += Service.CHUNK_SIZE; + } + return response; } + /** * Get file * - * Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata. + * Get a file by its unique ID. This endpoint response returns a JSON object + * with the file metadata. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async getFile(bucketId: string, fileId: string): Promise { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); } + if (typeof fileId === 'undefined') { throw new AppwriteException('Missing required parameter: "fileId"'); } + const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update file * - * Update a file by its unique ID. Only users with write permissions have access to update this resource. + * Update a file by its unique ID. Only users with write permissions have + * access to update this resource. * * @param {string} bucketId * @param {string} fileId * @param {string} name * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updateFile(bucketId: string, fileId: string, name?: string, permissions?: string[]): Promise { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); } + if (typeof fileId === 'undefined') { throw new AppwriteException('Missing required parameter: "fileId"'); } + const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload: Payload = {}; + if (typeof name !== 'undefined') { payload['name'] = name; } + if (typeof permissions !== 'undefined') { payload['permissions'] = permissions; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Delete File * - * Delete a file by its unique ID. Only users with write permissions have access to delete this resource. + * Delete a file by its unique ID. Only users with write permissions have + * access to delete this resource. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async deleteFile(bucketId: string, fileId: string): Promise<{}> { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); } + if (typeof fileId === 'undefined') { throw new AppwriteException('Missing required parameter: "fileId"'); } + const apiPath = '/storage/buckets/{bucketId}/files/{fileId}'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('delete', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'delete', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Get file for download * - * Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory. + * Get a file content by its unique ID. The endpoint response return with a + * 'Content-Disposition: attachment' header that tells the browser to start + * downloading the file to user downloads directory. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {string} - */ - getFileDownload(bucketId: string, fileId: string): string { + * @returns {URL} + */ + getFileDownload(bucketId: string, fileId: string): URL { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); } + if (typeof fileId === 'undefined') { throw new AppwriteException('Missing required parameter: "fileId"'); } + const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/download'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } + const uri = new URL(this.client.config.endpoint + apiPath); payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { + for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - - return uri.toString(); + return uri; } + /** * Get file preview * - * Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB. + * Get a file preview image. Currently, this method supports preview for image + * files (jpg, png, and gif), other supported formats, like pdf, docs, slides, + * and spreadsheets, will return the file icon image. You can also pass query + * string arguments for cutting and resizing your preview image. Preview is + * supported only for image files smaller than 10MB. * * @param {string} bucketId * @param {string} fileId @@ -267,105 +311,105 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk * @param {string} background * @param {ImageFormat} output * @throws {AppwriteException} - * @returns {string} - */ - getFilePreview(bucketId: string, fileId: string, width?: number, height?: number, gravity?: ImageGravity, quality?: number, borderWidth?: number, borderColor?: string, borderRadius?: number, opacity?: number, rotation?: number, background?: string, output?: ImageFormat): string { + * @returns {URL} + */ + getFilePreview(bucketId: string, fileId: string, width?: number, height?: number, gravity?: ImageGravity, quality?: number, borderWidth?: number, borderColor?: string, borderRadius?: number, opacity?: number, rotation?: number, background?: string, output?: ImageFormat): URL { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); } + if (typeof fileId === 'undefined') { throw new AppwriteException('Missing required parameter: "fileId"'); } + const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/preview'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload: Payload = {}; + if (typeof width !== 'undefined') { payload['width'] = width; } + if (typeof height !== 'undefined') { payload['height'] = height; } + if (typeof gravity !== 'undefined') { payload['gravity'] = gravity; } + if (typeof quality !== 'undefined') { payload['quality'] = quality; } + if (typeof borderWidth !== 'undefined') { payload['borderWidth'] = borderWidth; } + if (typeof borderColor !== 'undefined') { payload['borderColor'] = borderColor; } + if (typeof borderRadius !== 'undefined') { payload['borderRadius'] = borderRadius; } + if (typeof opacity !== 'undefined') { payload['opacity'] = opacity; } + if (typeof rotation !== 'undefined') { payload['rotation'] = rotation; } + if (typeof background !== 'undefined') { payload['background'] = background; } + if (typeof output !== 'undefined') { payload['output'] = output; } - const uri = new URL(this.client.config.endpoint + apiPath); - - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } + const uri = new URL(this.client.config.endpoint + apiPath); payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { + for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - - return uri.toString(); + return uri; } + /** * Get file for view * - * Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header. + * Get a file content by its unique ID. This endpoint is similar to the + * download method but returns with no 'Content-Disposition: attachment' + * header. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {string} - */ - getFileView(bucketId: string, fileId: string): string { + * @returns {URL} + */ + getFileView(bucketId: string, fileId: string): URL { if (typeof bucketId === 'undefined') { throw new AppwriteException('Missing required parameter: "bucketId"'); } + if (typeof fileId === 'undefined') { throw new AppwriteException('Missing required parameter: "fileId"'); } + const apiPath = '/storage/buckets/{bucketId}/files/{fileId}/view'.replace('{bucketId}', bucketId).replace('{fileId}', fileId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - - const apiHeaders: { [header: string]: string } = { - 'content-type': 'application/json', - } + const uri = new URL(this.client.config.endpoint + apiPath); payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Service.flatten(payload))) { - uri.searchParams.append(key, value); - } - payload['project'] = this.client.config.project; - for (const [key, value] of Object.entries(Client.flatten(payload))) { + for (const [key, value] of Object.entries(Service.flatten(payload))) { uri.searchParams.append(key, value); } - - return uri.toString(); + return uri; } -} +}; diff --git a/node_modules/appwrite/src/services/teams.ts b/node_modules/appwrite/src/services/teams.ts index 9dda30d..4c47f3d 100644 --- a/node_modules/appwrite/src/services/teams.ts +++ b/node_modules/appwrite/src/services/teams.ts @@ -1,90 +1,87 @@ import { Service } from '../service'; -import { AppwriteException, Client, type Payload, UploadProgress } from '../client'; +import { AppwriteException, Client } from '../client'; import type { Models } from '../models'; +import type { UploadProgress, Payload } from '../client'; -export class Teams { - client: Client; +export class Teams extends Service { - constructor(client: Client) { - this.client = client; - } + constructor(client: Client) + { + super(client); + } /** * List teams * - * Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results. + * Get a list of all the teams in which the current user is a member. You can + * use the parameters to filter your results. * * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async list(queries?: string[], search?: string): Promise> { const apiPath = '/teams'; const payload: Payload = {}; + if (typeof queries !== 'undefined') { payload['queries'] = queries; } + if (typeof search !== 'undefined') { payload['search'] = search; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create team * - * Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team. + * Create a new team. The user who creates the team will automatically be + * assigned as the owner of the team. Only the users with the owner role can + * invite new members, add new owners and delete or update the team. * * @param {string} teamId * @param {string} name * @param {string[]} roles * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async create(teamId: string, name: string, roles?: string[]): Promise> { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + if (typeof name === 'undefined') { throw new AppwriteException('Missing required parameter: "name"'); } + const apiPath = '/teams'; const payload: Payload = {}; + if (typeof teamId !== 'undefined') { payload['teamId'] = teamId; } + if (typeof name !== 'undefined') { payload['name'] = name; } + if (typeof roles !== 'undefined') { payload['roles'] = roles; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Get team * @@ -92,141 +89,136 @@ export class Teams { * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async get(teamId: string): Promise> { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update name * - * Update the team's name by its unique ID. + * Update the team's name by its unique ID. * * @param {string} teamId * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ async updateName(teamId: string, name: string): Promise> { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + if (typeof name === 'undefined') { throw new AppwriteException('Missing required parameter: "name"'); } + const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); const payload: Payload = {}; + if (typeof name !== 'undefined') { payload['name'] = name; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Delete team * - * Delete a team using its ID. Only team members with the owner role can delete the team. + * Delete a team using its ID. Only team members with the owner role can + * delete the team. * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async delete(teamId: string): Promise<{}> { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('delete', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'delete', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * List team memberships * - * Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint. + * Use this endpoint to list a team's members using the team's ID. All team + * members have read access to this endpoint. * * @param {string} teamId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async listMemberships(teamId: string, queries?: string[], search?: string): Promise { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId); const payload: Payload = {}; + if (typeof queries !== 'undefined') { payload['queries'] = queries; } + if (typeof search !== 'undefined') { payload['search'] = search; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Create team membership * - * Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appwrite will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn't exist. If initiated from a Server SDK, the new member will be added automatically to the team. - -You only need to provide one of a user ID, email, or phone number. Appwrite will prioritize accepting the user ID > email > phone number if you provide more than one of these parameters. - -Use the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team. - -Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appwrite will accept the only redirect URLs under the domains you have added as a platform on the Appwrite Console. - + * Invite a new member to join your team. Provide an ID for existing users, or + * invite unregistered users using an email or phone number. If initiated from + * a Client SDK, Appwrite will send an email or sms with a link to join the + * team to the invited user, and an account will be created for them if one + * doesn't exist. If initiated from a Server SDK, the new member will be added + * automatically to the team. + * + * You only need to provide one of a user ID, email, or phone number. Appwrite + * will prioritize accepting the user ID > email > phone number if you provide + * more than one of these parameters. + * + * Use the `url` parameter to redirect the user from the invitation email to + * your app. After the user is redirected, use the [Update Team Membership + * Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) + * endpoint to allow the user to accept the invitation to the team. + * + * Please note that to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * Appwrite will accept the only redirect URLs under the domains you have + * added as a platform on the Appwrite Console. + * * * @param {string} teamId * @param {string[]} roles @@ -236,269 +228,257 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee * @param {string} url * @param {string} name * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async createMembership(teamId: string, roles: string[], email?: string, userId?: string, phone?: string, url?: string, name?: string): Promise { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + if (typeof roles === 'undefined') { throw new AppwriteException('Missing required parameter: "roles"'); } + const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId); const payload: Payload = {}; + if (typeof email !== 'undefined') { payload['email'] = email; } + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof phone !== 'undefined') { payload['phone'] = phone; } + if (typeof roles !== 'undefined') { payload['roles'] = roles; } + if (typeof url !== 'undefined') { payload['url'] = url; } + if (typeof name !== 'undefined') { payload['name'] = name; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('post', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'post', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Get team membership * - * Get a team member by the membership unique id. All team members have read access for this resource. + * Get a team member by the membership unique id. All team members have read + * access for this resource. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async getMembership(teamId: string, membershipId: string): Promise { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + if (typeof membershipId === 'undefined') { throw new AppwriteException('Missing required parameter: "membershipId"'); } + const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update membership * - * Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https://appwrite.io/docs/permissions). - + * Modify the roles of a team member. Only team members with the owner role + * have access to this endpoint. Learn more about [roles and + * permissions](https://appwrite.io/docs/permissions). + * * * @param {string} teamId * @param {string} membershipId * @param {string[]} roles * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updateMembership(teamId: string, membershipId: string, roles: string[]): Promise { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + if (typeof membershipId === 'undefined') { throw new AppwriteException('Missing required parameter: "membershipId"'); } + if (typeof roles === 'undefined') { throw new AppwriteException('Missing required parameter: "roles"'); } + const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); const payload: Payload = {}; + if (typeof roles !== 'undefined') { payload['roles'] = roles; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Delete team membership * - * This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted. + * This endpoint allows a user to leave a team or for a team owner to delete + * the membership of any other team member. You can also use this endpoint to + * delete a user membership even if it is not accepted. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ async deleteMembership(teamId: string, membershipId: string): Promise<{}> { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + if (typeof membershipId === 'undefined') { throw new AppwriteException('Missing required parameter: "membershipId"'); } + const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('delete', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'delete', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update team membership status * - * Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user. - -If the request is successful, a session for the user is automatically created. - + * Use this endpoint to allow a user to accept an invitation to join a team + * after being redirected back to your app from the invitation email received + * by the user. + * + * If the request is successful, a session for the user is automatically + * created. + * * * @param {string} teamId * @param {string} membershipId * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updateMembershipStatus(teamId: string, membershipId: string, userId: string, secret: string): Promise { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + if (typeof membershipId === 'undefined') { throw new AppwriteException('Missing required parameter: "membershipId"'); } + if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } + if (typeof secret === 'undefined') { throw new AppwriteException('Missing required parameter: "secret"'); } + const apiPath = '/teams/{teamId}/memberships/{membershipId}/status'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); const payload: Payload = {}; + if (typeof userId !== 'undefined') { payload['userId'] = userId; } + if (typeof secret !== 'undefined') { payload['secret'] = secret; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('patch', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'patch', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Get team preferences * - * Get the team's shared preferences by its unique ID. If a preference doesn't need to be shared by all team members, prefer storing them in [user preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). + * Get the team's shared preferences by its unique ID. If a preference doesn't + * need to be shared by all team members, prefer storing them in [user + * preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async getPrefs(teamId: string): Promise { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId); const payload: Payload = {}; - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('get', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'get', - uri, - apiHeaders, - payload - ); + }, payload); } + /** * Update preferences * - * Update the team's preferences by its unique ID. The object you pass is stored as is and replaces any previous value. The maximum allowed prefs size is 64kB and throws an error if exceeded. + * Update the team's preferences by its unique ID. The object you pass is + * stored as is and replaces any previous value. The maximum allowed prefs + * size is 64kB and throws an error if exceeded. * * @param {string} teamId * @param {object} prefs * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ async updatePrefs(teamId: string, prefs: object): Promise { if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } + if (typeof prefs === 'undefined') { throw new AppwriteException('Missing required parameter: "prefs"'); } + const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId); const payload: Payload = {}; + if (typeof prefs !== 'undefined') { payload['prefs'] = prefs; } - const uri = new URL(this.client.config.endpoint + apiPath); - const apiHeaders: { [header: string]: string } = { + const uri = new URL(this.client.config.endpoint + apiPath); + return await this.client.call('put', uri, { 'content-type': 'application/json', - } - - - return await this.client.call( - 'put', - uri, - apiHeaders, - payload - ); + }, payload); } -} +}; diff --git a/node_modules/appwrite/types/client.d.ts b/node_modules/appwrite/types/client.d.ts index e2396a6..c95932b 100644 --- a/node_modules/appwrite/types/client.d.ts +++ b/node_modules/appwrite/types/client.d.ts @@ -1,97 +1,31 @@ +import 'isomorphic-form-data'; import { Models } from './models'; -/** - * Payload type representing a key-value pair with string keys and any values. - */ declare type Payload = { [key: string]: any; }; -/** - * Headers type representing a key-value pair with string keys and string values. - */ declare type Headers = { [key: string]: string; }; -/** - * Realtime event response structure with generic payload type. - */ -declare type RealtimeResponseEvent = { - /** - * List of event names associated with the response. - */ +export declare type RealtimeResponseEvent = { events: string[]; - /** - * List of channel names associated with the response. - */ channels: string[]; - /** - * Timestamp indicating the time of the event. - */ timestamp: number; - /** - * Payload containing event-specific data. - */ payload: T; }; -/** - * Type representing upload progress information. - */ -declare type UploadProgress = { - /** - * Identifier for the upload progress. - */ +export declare type UploadProgress = { $id: string; - /** - * Current progress of the upload (in percentage). - */ progress: number; - /** - * Total size uploaded (in bytes) during the upload process. - */ sizeUploaded: number; - /** - * Total number of chunks that need to be uploaded. - */ chunksTotal: number; - /** - * Number of chunks that have been successfully uploaded. - */ chunksUploaded: number; }; -/** - * Exception thrown by the package - */ declare class AppwriteException extends Error { - /** - * The error code associated with the exception. - */ code: number; - /** - * The response string associated with the exception. - */ response: string; - /** - * Error type. - * See [Error Types](https://appwrite.io/docs/response-codes#errorTypes) for more information. - */ type: string; - /** - * Initializes a Appwrite Exception. - * - * @param {string} message - The error message. - * @param {number} code - The error code. Default is 0. - * @param {string} type - The error type. Default is an empty string. - * @param {string} response - The response string. Default is an empty string. - */ constructor(message: string, code?: number, type?: string, response?: string); } -/** - * Client that handles requests to Appwrite - */ declare class Client { - static CHUNK_SIZE: number; - /** - * Holds configuration such as project. - */ config: { endpoint: string; endpointRealtime: string; @@ -100,9 +34,6 @@ declare class Client { locale: string; session: string; }; - /** - * Custom headers for API requests. - */ headers: Headers; /** * Set Endpoint @@ -187,16 +118,9 @@ declare class Client { * @returns {() => void} Unsubscribes from events. */ subscribe(channels: string | string[], callback: (payload: RealtimeResponseEvent) => void): () => void; - prepareRequest(method: string, url: URL, headers?: Headers, params?: Payload): { - uri: string; - options: RequestInit; - }; - chunkedUpload(method: string, url: URL, headers: Headers | undefined, originalPayload: Payload | undefined, onProgress: (progress: UploadProgress) => void): Promise; - call(method: string, url: URL, headers?: Headers, params?: Payload, responseType?: string): Promise; - static flatten(data: Payload, prefix?: string): Payload; + call(method: string, url: URL, headers?: Headers, params?: Payload): Promise; } export { Client, AppwriteException }; export { Query } from './query'; -export type { Models, Payload, UploadProgress }; -export type { RealtimeResponseEvent }; +export type { Models, Payload }; export type { QueryTypes, QueryTypesList } from './query'; diff --git a/node_modules/appwrite/types/enums/credit-card.d.ts b/node_modules/appwrite/types/enums/credit-card.d.ts index 59d1584..24ef9ec 100644 --- a/node_modules/appwrite/types/enums/credit-card.d.ts +++ b/node_modules/appwrite/types/enums/credit-card.d.ts @@ -2,7 +2,7 @@ export declare enum CreditCard { AmericanExpress = "amex", Argencard = "argencard", Cabal = "cabal", - Cencosud = "cencosud", + Consosud = "censosud", DinersClub = "diners", Discover = "discover", Elo = "elo", diff --git a/node_modules/appwrite/types/enums/flag.d.ts b/node_modules/appwrite/types/enums/flag.d.ts index ca72bc2..ead65df 100644 --- a/node_modules/appwrite/types/enums/flag.d.ts +++ b/node_modules/appwrite/types/enums/flag.d.ts @@ -140,7 +140,6 @@ export declare enum Flag { Palau = "pw", PapuaNewGuinea = "pg", Poland = "pl", - FrenchPolynesia = "pf", NorthKorea = "kp", Portugal = "pt", Paraguay = "py", diff --git a/node_modules/appwrite/types/id.d.ts b/node_modules/appwrite/types/id.d.ts index 0453d7d..0a6a4f2 100644 --- a/node_modules/appwrite/types/id.d.ts +++ b/node_modules/appwrite/types/id.d.ts @@ -1,20 +1,5 @@ -/** - * Helper class to generate ID strings for resources. - */ export declare class ID { #private; - /** - * Uses the provided ID as the ID for the resource. - * - * @param {string} id - * @returns {string} - */ static custom(id: string): string; - /** - * Have Appwrite generate a unique ID for you. - * - * @param {number} padding. Default is 7. - * @returns {string} - */ static unique(padding?: number): string; } diff --git a/node_modules/appwrite/types/index.d.ts b/node_modules/appwrite/types/index.d.ts index e65cddf..72a7cc9 100644 --- a/node_modules/appwrite/types/index.d.ts +++ b/node_modules/appwrite/types/index.d.ts @@ -1,10 +1,3 @@ -/** - * Appwrite Web SDK - * - * This SDK is compatible with Appwrite server version 1.6.x. - * For older versions, please check - * [previous releases](https://github.com/appwrite/sdk-for-web/releases). - */ export { Client, Query, AppwriteException } from './client'; export { Account } from './services/account'; export { Avatars } from './services/avatars'; diff --git a/node_modules/appwrite/types/models.d.ts b/node_modules/appwrite/types/models.d.ts index 335d4e5..8df2b0f 100644 --- a/node_modules/appwrite/types/models.d.ts +++ b/node_modules/appwrite/types/models.d.ts @@ -1,6 +1,3 @@ -/** - * Appwrite Models - */ export declare namespace Models { /** * Documents List @@ -505,10 +502,6 @@ export declare namespace Models { * Session creation date in ISO 8601 format. */ $createdAt: string; - /** - * Session update date in ISO 8601 format. - */ - $updatedAt: string; /** * User ID. */ @@ -946,10 +939,6 @@ export declare namespace Models { * Function execution duration in seconds. */ duration: number; - /** - * The scheduled time for execution. If left empty, execution will be queued immediately. - */ - scheduledAt?: string; }; /** * Country @@ -1105,21 +1094,17 @@ export declare namespace Models { */ type MfaFactors = { /** - * Can TOTP be used for MFA challenge for this account. + * TOTP */ totp: boolean; /** - * Can phone (SMS) be used for MFA challenge for this account. + * Phone */ phone: boolean; /** - * Can email be used for MFA challenge for this account. + * Email */ email: boolean; - /** - * Can recovery code be used for MFA challenge for this account. - */ - recoveryCode: boolean; }; /** * Subscriber diff --git a/node_modules/appwrite/types/permission.d.ts b/node_modules/appwrite/types/permission.d.ts index 86e435d..57cfd23 100644 --- a/node_modules/appwrite/types/permission.d.ts +++ b/node_modules/appwrite/types/permission.d.ts @@ -1,43 +1,7 @@ -/** - * Helper class to generate permission strings for resources. - */ export declare class Permission { - /** - * Generate read permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ static read: (role: string) => string; - /** - * Generate write permission string for the provided role. - * - * This is an alias of update, delete, and possibly create. - * Don't use write in combination with update, delete, or create. - * - * @param {string} role - * @returns {string} - */ static write: (role: string) => string; - /** - * Generate create permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ static create: (role: string) => string; - /** - * Generate update permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ static update: (role: string) => string; - /** - * Generate delete permission string for the provided role. - * - * @param {string} role - * @returns {string} - */ static delete: (role: string) => string; } diff --git a/node_modules/appwrite/types/query.d.ts b/node_modules/appwrite/types/query.d.ts index 03398ae..67e7aa9 100644 --- a/node_modules/appwrite/types/query.d.ts +++ b/node_modules/appwrite/types/query.d.ts @@ -2,193 +2,33 @@ declare type QueryTypesSingle = string | number | boolean; export declare type QueryTypesList = string[] | number[] | boolean[] | Query[]; export declare type QueryTypes = QueryTypesSingle | QueryTypesList; declare type AttributesTypes = string | string[]; -/** - * Helper class to generate query strings. - */ export declare class Query { method: string; attribute: AttributesTypes | undefined; values: QueryTypesList | undefined; - /** - * Constructor for Query class. - * - * @param {string} method - * @param {AttributesTypes} attribute - * @param {QueryTypes} values - */ constructor(method: string, attribute?: AttributesTypes, values?: QueryTypes); - /** - * Convert the query object to a JSON string. - * - * @returns {string} - */ toString(): string; - /** - * Filter resources where attribute is equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static equal: (attribute: string, value: QueryTypes) => string; - /** - * Filter resources where attribute is not equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static notEqual: (attribute: string, value: QueryTypes) => string; - /** - * Filter resources where attribute is less than value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static lessThan: (attribute: string, value: QueryTypes) => string; - /** - * Filter resources where attribute is less than or equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static lessThanEqual: (attribute: string, value: QueryTypes) => string; - /** - * Filter resources where attribute is greater than value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static greaterThan: (attribute: string, value: QueryTypes) => string; - /** - * Filter resources where attribute is greater than or equal to value. - * - * @param {string} attribute - * @param {QueryTypes} value - * @returns {string} - */ static greaterThanEqual: (attribute: string, value: QueryTypes) => string; - /** - * Filter resources where attribute is null. - * - * @param {string} attribute - * @returns {string} - */ static isNull: (attribute: string) => string; - /** - * Filter resources where attribute is not null. - * - * @param {string} attribute - * @returns {string} - */ static isNotNull: (attribute: string) => string; - /** - * Filter resources where attribute is between start and end (inclusive). - * - * @param {string} attribute - * @param {string | number} start - * @param {string | number} end - * @returns {string} - */ static between: (attribute: string, start: string | number, end: string | number) => string; - /** - * Filter resources where attribute starts with value. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ static startsWith: (attribute: string, value: string) => string; - /** - * Filter resources where attribute ends with value. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ static endsWith: (attribute: string, value: string) => string; - /** - * Specify which attributes should be returned by the API call. - * - * @param {string[]} attributes - * @returns {string} - */ static select: (attributes: string[]) => string; - /** - * Filter resources by searching attribute for value. - * A fulltext index on attribute is required for this query to work. - * - * @param {string} attribute - * @param {string} value - * @returns {string} - */ static search: (attribute: string, value: string) => string; - /** - * Sort results by attribute descending. - * - * @param {string} attribute - * @returns {string} - */ static orderDesc: (attribute: string) => string; - /** - * Sort results by attribute ascending. - * - * @param {string} attribute - * @returns {string} - */ static orderAsc: (attribute: string) => string; - /** - * Return results after documentId. - * - * @param {string} documentId - * @returns {string} - */ static cursorAfter: (documentId: string) => string; - /** - * Return results before documentId. - * - * @param {string} documentId - * @returns {string} - */ static cursorBefore: (documentId: string) => string; - /** - * Return only limit results. - * - * @param {number} limit - * @returns {string} - */ static limit: (limit: number) => string; - /** - * Filter resources by skipping the first offset results. - * - * @param {number} offset - * @returns {string} - */ static offset: (offset: number) => string; - /** - * Filter resources where attribute contains the specified value. - * - * @param {string} attribute - * @param {string | string[]} value - * @returns {string} - */ static contains: (attribute: string, value: string | string[]) => string; - /** - * Combine multiple queries using logical OR operator. - * - * @param {string[]} queries - * @returns {string} - */ static or: (queries: string[]) => string; - /** - * Combine multiple queries using logical AND operator. - * - * @param {string[]} queries - * @returns {string} - */ static and: (queries: string[]) => string; } export {}; diff --git a/node_modules/appwrite/types/service.d.ts b/node_modules/appwrite/types/service.d.ts index 15e9f2f..31edfde 100644 --- a/node_modules/appwrite/types/service.d.ts +++ b/node_modules/appwrite/types/service.d.ts @@ -1,9 +1,6 @@ import { Client } from './client'; import type { Payload } from './client'; export declare class Service { - /** - * The size for chunked uploads in bytes. - */ static CHUNK_SIZE: number; client: Client; constructor(client: Client); diff --git a/node_modules/appwrite/types/services/account.d.ts b/node_modules/appwrite/types/services/account.d.ts index 2fb5158..26bbf0a 100644 --- a/node_modules/appwrite/types/services/account.d.ts +++ b/node_modules/appwrite/types/services/account.d.ts @@ -1,10 +1,10 @@ +import { Service } from '../service'; import { Client } from '../client'; import type { Models } from '../models'; import { AuthenticatorType } from '../enums/authenticator-type'; import { AuthenticationFactor } from '../enums/authentication-factor'; import { OAuthProvider } from '../enums/o-auth-provider'; -export declare class Account { - client: Client; +export declare class Account extends Service { constructor(client: Client); /** * Get account @@ -12,34 +12,45 @@ export declare class Account { * Get the currently logged in user. * * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ get(): Promise>; /** * Create account * - * Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession). + * Use this endpoint to allow a new user to register a new account in your + * project. After the user registration completes successfully, you can use + * the + * [/account/verfication](https://appwrite.io/docs/references/cloud/client-web/account#createVerification) + * route to start verifying the user email address. To allow the new user to + * login to their new account, you need to create a new [account + * session](https://appwrite.io/docs/references/cloud/client-web/account#createEmailSession). * * @param {string} userId * @param {string} email * @param {string} password * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ create(userId: string, email: string, password: string, name?: string): Promise>; /** * Update email * - * Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request. -This endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password. - + * Update currently logged in user account email address. After changing user + * address, the user confirmation status will get reset. A new confirmation + * email is not sent automatically however you can use the send confirmation + * email endpoint again to send the confirmation email. For security measures, + * user password is required to complete this request. + * This endpoint can also be used to convert an anonymous account to a normal + * one, by passing an email address and a new password. + * * * @param {string} email * @param {string} password * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateEmail(email: string, password: string): Promise>; /** * List Identities @@ -48,8 +59,8 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listIdentities(queries?: string[]): Promise; /** * Delete identity @@ -58,27 +69,32 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string} identityId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteIdentity(identityId: string): Promise<{}>; /** * Create JWT * - * Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame. + * Use this endpoint to create a JSON Web Token. You can use the resulting JWT + * to authenticate on behalf of the current user when working with the + * Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes + * from its creation and will be invalid if the user will logout in that time + * frame. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createJWT(): Promise; /** * List logs * - * Get the list of latest security activity logs for the currently logged in user. Each log returns user IP address, location and date and time of log. + * Get the list of latest security activity logs for the currently logged in + * user. Each log returns user IP address, location and date and time of log. * * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listLogs(queries?: string[]): Promise; /** * Update MFA @@ -87,29 +103,34 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {boolean} mfa * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateMFA(mfa: boolean): Promise>; /** - * Create Authenticator + * Add Authenticator * - * Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](/docs/references/cloud/client-web/account#updateMfaAuthenticator) method. + * Add an authenticator app to be used as an MFA factor. Verify the + * authenticator using the [verify + * authenticator](/docs/references/cloud/client-web/account#verifyAuthenticator) + * method. * * @param {AuthenticatorType} type * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaAuthenticator(type: AuthenticatorType): Promise; /** * Verify Authenticator * - * Verify an authenticator app after adding it using the [add authenticator](/docs/references/cloud/client-web/account#createMfaAuthenticator) method. + * Verify an authenticator app after adding it using the [add + * authenticator](/docs/references/cloud/client-web/account#addAuthenticator) + * method. * * @param {AuthenticatorType} type * @param {string} otp * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateMfaAuthenticator(type: AuthenticatorType, otp: string): Promise>; /** * Delete Authenticator @@ -117,30 +138,37 @@ This endpoint can also be used to convert an anonymous account to a normal one, * Delete an authenticator for a user by ID. * * @param {AuthenticatorType} type + * @param {string} otp * @throws {AppwriteException} - * @returns {Promise<{}>} - */ - deleteMfaAuthenticator(type: AuthenticatorType): Promise<{}>; + * @returns {Promise} + */ + deleteMfaAuthenticator(type: AuthenticatorType, otp: string): Promise>; /** - * Create MFA Challenge + * Create 2FA Challenge * - * Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) method. + * Begin the process of MFA verification after sign-in. Finish the flow with + * [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge) + * method. * * @param {AuthenticationFactor} factor * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaChallenge(factor: AuthenticationFactor): Promise; /** * Create MFA Challenge (confirmation) * - * Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method. + * Complete the MFA challenge by providing the one-time password. Finish the + * process of MFA verification by providing the one-time password. To begin + * the flow, use + * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) + * method. * * @param {string} challengeId * @param {string} otp * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ updateMfaChallenge(challengeId: string, otp: string): Promise<{}>; /** * List Factors @@ -148,35 +176,45 @@ This endpoint can also be used to convert an anonymous account to a normal one, * List the factors available on the account to be used as a MFA challange. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listMfaFactors(): Promise; /** * Get MFA Recovery Codes * - * Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes. + * Get recovery codes that can be used as backup for MFA flow. Before getting + * codes, they must be generated using + * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) + * method. An OTP challenge is required to read recovery codes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getMfaRecoveryCodes(): Promise; /** * Create MFA Recovery Codes * - * Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) method. + * Generate recovery codes as backup for MFA flow. It's recommended to + * generate and show then immediately after user successfully adds their + * authehticator. Recovery codes can be used as a MFA verification type in + * [createMfaChallenge](/docs/references/cloud/client-web/account#createMfaChallenge) + * method. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMfaRecoveryCodes(): Promise; /** * Regenerate MFA Recovery Codes * - * Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes. + * Regenerate recovery codes that can be used as backup for MFA flow. Before + * regenerating codes, they must be first generated using + * [createMfaRecoveryCodes](/docs/references/cloud/client-web/account#createMfaRecoveryCodes) + * method. An OTP challenge is required to regenreate recovery codes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMfaRecoveryCodes(): Promise; /** * Update name @@ -185,30 +223,36 @@ This endpoint can also be used to convert an anonymous account to a normal one, * * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateName(name: string): Promise>; /** * Update password * - * Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional. + * Update currently logged in user password. For validation, user is required + * to pass in the new password, and the old password. For users created with + * OAuth, Team Invites and Magic URL, oldPassword is optional. * * @param {string} password * @param {string} oldPassword * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePassword(password: string, oldPassword?: string): Promise>; /** * Update phone * - * Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) endpoint to send a confirmation SMS. + * Update the currently logged in user's phone number. After updating the + * phone number, the phone verification status will be reset. A confirmation + * SMS is not sent automatically, however you can use the [POST + * /account/verification/phone](https://appwrite.io/docs/references/cloud/client-web/account#createPhoneVerification) + * endpoint to send a confirmation SMS. * * @param {string} phone * @param {string} password * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePhone(phone: string, password: string): Promise>; /** * Get account preferences @@ -216,173 +260,225 @@ This endpoint can also be used to convert an anonymous account to a normal one, * Get the preferences as a key-value object for the currently logged in user. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getPrefs(): Promise; /** * Update preferences * - * Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded. + * Update currently logged in user account preferences. The object you pass is + * stored as is, and replaces any previous value. The maximum allowed prefs + * size is 64kB and throws error if exceeded. * * @param {Partial} prefs * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updatePrefs(prefs: Partial): Promise>; /** * Create password recovery * - * Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour. + * Sends the user an email with a temporary secret key for password reset. + * When the user clicks the confirmation link he is redirected back to your + * app password reset URL with the secret key and email address values + * attached to the URL query string. Use the query string params to submit a + * request to the [PUT + * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#updateRecovery) + * endpoint to complete the process. The verification link sent to the user's + * email address is valid for 1 hour. * * @param {string} email * @param {string} url * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createRecovery(email: string, url: string): Promise; /** * Create password recovery (confirmation) * - * Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) endpoint. - -Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. + * Use this endpoint to complete the user account password reset. Both the + * **userId** and **secret** arguments will be passed as query parameters to + * the redirect URL you have provided when sending your request to the [POST + * /account/recovery](https://appwrite.io/docs/references/cloud/client-web/account#createRecovery) + * endpoint. + * + * Please note that in order to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. * * @param {string} userId * @param {string} secret * @param {string} password * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateRecovery(userId: string, secret: string, password: string): Promise; /** * List sessions * - * Get the list of active sessions across different devices for the currently logged in user. + * Get the list of active sessions across different devices for the currently + * logged in user. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listSessions(): Promise; /** * Delete sessions * - * Delete all sessions from the user account and remove any sessions cookies from the end client. + * Delete all sessions from the user account and remove any sessions cookies + * from the end client. * * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSessions(): Promise<{}>; /** * Create anonymous session * - * Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) or create an [OAuth2 session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session). + * Use this endpoint to allow a new user to register an anonymous account in + * your project. This route will also create a new session for the user. To + * allow the new user to convert an anonymous account to a normal account, you + * need to update its [email and + * password](https://appwrite.io/docs/references/cloud/client-web/account#updateEmail) + * or create an [OAuth2 + * session](https://appwrite.io/docs/references/cloud/client-web/account#CreateOAuth2Session). * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createAnonymousSession(): Promise; /** * Create email password session * - * Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Allow the user to login into their account by providing a valid email and + * password combination. This route will create a new session for the user. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} email * @param {string} password * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createEmailPasswordSession(email: string, password: string): Promise; /** * Update magic URL session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMagicURLSession(userId: string, secret: string): Promise; /** * Create OAuth2 session * - * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. - -If there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). - + * Allow the user to login to their account using the OAuth2 provider of their + * choice. Each OAuth2 provider should be enabled from the Appwrite console + * first. Use the success and failure arguments to provide a redirect URL's + * back to your app when login is completed. + * + * If there is already an active session, the new session will be attached to + * the logged-in account. If there are no active sessions, the server will + * attempt to look for a user with the same email address as the email + * received from the OAuth2 provider and attach the new session to the + * existing user. If no matching user is found - the server will create a new + * user. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). + * * * @param {OAuthProvider} provider * @param {string} success * @param {string} failure * @param {string[]} scopes * @throws {AppwriteException} - * @returns {Promise} - */ - createOAuth2Session(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): Promise; + * @returns {void|string} + */ + createOAuth2Session(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): void | URL; /** * Update phone session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePhoneSession(userId: string, secret: string): Promise; /** * Create session * - * Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login. + * Use this endpoint to create a session from token. Provide the **userId** + * and **secret** parameters from the successful response of authentication + * flows initiated by token creation. For example, magic URL and phone login. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createSession(userId: string, secret: string): Promise; /** * Get session * - * Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used. + * Use this endpoint to get a logged in user's session using a Session ID. + * Inputting 'current' will return the current session being used. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getSession(sessionId: string): Promise; /** * Update session * - * Use this endpoint to extend a session's length. Extending a session is useful when session expiry is short. If the session was created using an OAuth provider, this endpoint refreshes the access token from the provider. + * Use this endpoint to extend a session's length. Extending a session is + * useful when session expiry is short. If the session was created using an + * OAuth provider, this endpoint refreshes the access token from the provider. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateSession(sessionId: string): Promise; /** * Delete session * - * Logout the user. Use 'current' as the session ID to logout on this device, use a session ID to logout on another device. If you're looking to logout the user on all devices, use [Delete Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) instead. + * Logout the user. Use 'current' as the session ID to logout on this device, + * use a session ID to logout on another device. If you're looking to logout + * the user on all devices, use [Delete + * Sessions](https://appwrite.io/docs/references/cloud/client-web/account#deleteSessions) + * instead. * * @param {string} sessionId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSession(sessionId: string): Promise<{}>; /** * Update status * - * Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead. + * Block the currently logged in user account. Behind the scene, the user + * record is not deleted but permanently blocked from any access. To + * completely delete a user, use the Users API instead. * * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateStatus(): Promise>; /** * Create push target @@ -392,8 +488,8 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * @param {string} identifier * @param {string} providerId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPushTarget(targetId: string, identifier: string, providerId?: string): Promise; /** * Update push target @@ -402,8 +498,8 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * @param {string} targetId * @param {string} identifier * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePushTarget(targetId: string, identifier: string): Promise; /** * Delete push target @@ -411,111 +507,170 @@ A user is limited to 10 active sessions at a time by default. [Learn more about * * @param {string} targetId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deletePushTarget(targetId: string): Promise<{}>; /** * Create email token (OTP) * - * Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Sends the user an email with a secret key for creating a session. If the + * provided user ID has not be registered, a new user will be created. Use the + * returned user ID and secret and submit a request to the [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The secret sent to the user's email + * is valid for 15 minutes. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} userId * @param {string} email * @param {boolean} phrase * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createEmailToken(userId: string, email: string, phrase?: boolean): Promise; /** * Create magic URL token * - * Sends the user an email with a secret key for creating a session. If the provided user ID has not been registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). - + * Sends the user an email with a secret key for creating a session. If the + * provided user ID has not been registered, a new user will be created. When + * the user clicks the link in the email, the user is redirected back to the + * URL you provided with the secret key and userId values attached to the URL + * query string. Use the query string parameters to submit a request to the + * [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The link sent to the user's email + * address is valid for 1 hour. If you are on a mobile device you can leave + * the URL parameter empty, so that the login completion will be handled by + * your Appwrite instance by default. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). + * * * @param {string} userId * @param {string} email * @param {string} url * @param {boolean} phrase * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMagicURLToken(userId: string, email: string, url?: string, phrase?: boolean): Promise; /** * Create OAuth2 token * - * Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. - -If authentication succeeds, `userId` and `secret` of a token will be appended to the success URL as query parameters. These can be used to create a new session using the [Create session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Allow the user to login to their account using the OAuth2 provider of their + * choice. Each OAuth2 provider should be enabled from the Appwrite console + * first. Use the success and failure arguments to provide a redirect URL's + * back to your app when login is completed. + * + * If authentication succeeds, `userId` and `secret` of a token will be + * appended to the success URL as query parameters. These can be used to + * create a new session using the [Create + * session](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {OAuthProvider} provider * @param {string} success * @param {string} failure * @param {string[]} scopes * @throws {AppwriteException} - * @returns {Promise} - */ - createOAuth2Token(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): Promise; + * @returns {void|string} + */ + createOAuth2Token(provider: OAuthProvider, success?: string, failure?: string, scopes?: string[]): void | URL; /** * Create phone token * - * Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes. - -A user is limited to 10 active sessions at a time by default. [Learn more about session limits](https://appwrite.io/docs/authentication-security#limits). + * Sends the user an SMS with a secret key for creating a session. If the + * provided user ID has not be registered, a new user will be created. Use the + * returned user ID and secret and submit a request to the [POST + * /v1/account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) + * endpoint to complete the login process. The secret sent to the user's phone + * is valid for 15 minutes. + * + * A user is limited to 10 active sessions at a time by default. [Learn more + * about session + * limits](https://appwrite.io/docs/authentication-security#limits). * * @param {string} userId * @param {string} phone * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPhoneToken(userId: string, phone: string): Promise; /** * Create email verification * - * Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). The verification link sent to the user's email address is valid for 7 days. - -Please note that in order to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface. - + * Use this endpoint to send a verification message to your user email address + * to confirm they are the valid owners of that address. Both the **userId** + * and **secret** arguments will be passed as query parameters to the URL you + * have provided to be attached to the verification email. The provided URL + * should redirect the user back to your app and allow you to complete the + * verification process by verifying both the **userId** and **secret** + * parameters. Learn more about how to [complete the verification + * process](https://appwrite.io/docs/references/cloud/client-web/account#updateVerification). + * The verification link sent to the user's email address is valid for 7 days. + * + * Please note that in order to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), + * the only valid redirect URLs are the ones from domains you have set when + * adding your platforms in the console interface. + * * * @param {string} url * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createVerification(url: string): Promise; /** * Create email verification (confirmation) * - * Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code. + * Use this endpoint to complete the user email verification process. Use both + * the **userId** and **secret** parameters that were attached to your app URL + * to verify the user email ownership. If confirmed this route will return a + * 200 status code. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateVerification(userId: string, secret: string): Promise; /** * Create phone verification * - * Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) endpoint. Learn more about how to [complete the verification process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes. + * Use this endpoint to send a verification SMS to the currently logged in + * user. This endpoint is meant for use after updating a user's phone number + * using the + * [accountUpdatePhone](https://appwrite.io/docs/references/cloud/client-web/account#updatePhone) + * endpoint. Learn more about how to [complete the verification + * process](https://appwrite.io/docs/references/cloud/client-web/account#updatePhoneVerification). + * The verification code sent to the user's phone number is valid for 15 + * minutes. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createPhoneVerification(): Promise; /** - * Update phone verification (confirmation) + * Create phone verification (confirmation) * - * Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code. + * Use this endpoint to complete the user phone verification process. Use the + * **userId** and **secret** that were sent to your user's phone number to + * verify the user email ownership. If confirmed this route will return a 200 + * status code. * * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePhoneVerification(userId: string, secret: string): Promise; } diff --git a/node_modules/appwrite/types/services/avatars.d.ts b/node_modules/appwrite/types/services/avatars.d.ts index 4f4bec1..811285a 100644 --- a/node_modules/appwrite/types/services/avatars.d.ts +++ b/node_modules/appwrite/types/services/avatars.d.ts @@ -1,115 +1,149 @@ +import { Service } from '../service'; import { Client } from '../client'; import { Browser } from '../enums/browser'; import { CreditCard } from '../enums/credit-card'; import { Flag } from '../enums/flag'; -export declare class Avatars { - client: Client; +export declare class Avatars extends Service { constructor(client: Client); /** * Get browser icon * - * You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) endpoint. Use width, height and quality arguments to change the output settings. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. + * You can use this endpoint to show different browser icons to your users. + * The code argument receives the browser code as it appears in your user [GET + * /account/sessions](https://appwrite.io/docs/references/cloud/client-web/account#getSessions) + * endpoint. Use width, height and quality arguments to change the output + * settings. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. * * @param {Browser} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ - getBrowser(code: Browser, width?: number, height?: number, quality?: number): string; + * @returns {URL} + */ + getBrowser(code: Browser, width?: number, height?: number, quality?: number): URL; /** * Get credit card icon * - * The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * The credit card endpoint will return you the icon of the credit card + * provider you need. Use width, height and quality arguments to change the + * output settings. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {CreditCard} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ - getCreditCard(code: CreditCard, width?: number, height?: number, quality?: number): string; + * @returns {URL} + */ + getCreditCard(code: CreditCard, width?: number, height?: number, quality?: number): URL; /** * Get favicon * - * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL. - -This endpoint does not follow HTTP redirects. + * Use this endpoint to fetch the favorite icon (AKA favicon) of any remote + * website URL. + * * * @param {string} url * @throws {AppwriteException} - * @returns {string} - */ - getFavicon(url: string): string; + * @returns {URL} + */ + getFavicon(url: string): URL; /** * Get country flag * - * You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * You can use this endpoint to show different country flags icons to your + * users. The code argument receives the 2 letter country code. Use width, + * height and quality arguments to change the output settings. Country codes + * follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {Flag} code * @param {number} width * @param {number} height * @param {number} quality * @throws {AppwriteException} - * @returns {string} - */ - getFlag(code: Flag, width?: number, height?: number, quality?: number): string; + * @returns {URL} + */ + getFlag(code: Flag, width?: number, height?: number, quality?: number): URL; /** * Get image from URL * - * Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px. - -This endpoint does not follow HTTP redirects. + * Use this endpoint to fetch a remote image URL and crop it to any image size + * you want. This endpoint is very useful if you need to crop and display + * remote images in your app or in case you want to make sure a 3rd party + * image is properly served using a TLS protocol. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 400x400px. + * * * @param {string} url * @param {number} width * @param {number} height * @throws {AppwriteException} - * @returns {string} - */ - getImage(url: string, width?: number, height?: number): string; + * @returns {URL} + */ + getImage(url: string, width?: number, height?: number): URL; /** * Get user initials * - * Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned. - -You can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials. - -When one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px. - + * Use this endpoint to show your user initials avatar icon on your website or + * app. By default, this route will try to print your logged-in user name or + * email initials. You can also overwrite the user name if you pass the 'name' + * parameter. If no name is given and no user is logged, an empty avatar will + * be returned. + * + * You can use the color and background params to change the avatar colors. By + * default, a random theme will be selected. The random theme will persist for + * the user's initials when reloading the same theme will always return for + * the same initials. + * + * When one dimension is specified and the other is 0, the image is scaled + * with preserved aspect ratio. If both dimensions are 0, the API provides an + * image at source quality. If dimensions are not specified, the default size + * of image returned is 100x100px. + * * * @param {string} name * @param {number} width * @param {number} height * @param {string} background * @throws {AppwriteException} - * @returns {string} - */ - getInitials(name?: string, width?: number, height?: number, background?: string): string; + * @returns {URL} + */ + getInitials(name?: string, width?: number, height?: number, background?: string): URL; /** * Get QR code * - * Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image. - + * Converts a given plain text to a QR code image. You can use the query + * parameters to change the size and style of the resulting image. + * * * @param {string} text * @param {number} size * @param {number} margin * @param {boolean} download * @throws {AppwriteException} - * @returns {string} - */ - getQR(text: string, size?: number, margin?: number, download?: boolean): string; + * @returns {URL} + */ + getQR(text: string, size?: number, margin?: number, download?: boolean): URL; } diff --git a/node_modules/appwrite/types/services/databases.d.ts b/node_modules/appwrite/types/services/databases.d.ts index d4f63d7..3a7662c 100644 --- a/node_modules/appwrite/types/services/databases.d.ts +++ b/node_modules/appwrite/types/services/databases.d.ts @@ -1,24 +1,28 @@ +import { Service } from '../service'; import { Client } from '../client'; import type { Models } from '../models'; -export declare class Databases { - client: Client; +export declare class Databases extends Service { constructor(client: Client); /** * List documents * - * Get a list of all the user's documents in a given collection. You can use the query params to filter your results. + * Get a list of all the user's documents in a given collection. You can use + * the query params to filter your results. * * @param {string} databaseId * @param {string} collectionId * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ listDocuments(databaseId: string, collectionId: string, queries?: string[]): Promise>; /** * Create document * - * Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) API or directly from your database console. + * Create a new Document. Before using this route, you should create a new + * collection resource using either a [server + * integration](https://appwrite.io/docs/server/databases#databasesCreateCollection) + * API or directly from your database console. * * @param {string} databaseId * @param {string} collectionId @@ -26,26 +30,28 @@ export declare class Databases { * @param {Omit} data * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createDocument(databaseId: string, collectionId: string, documentId: string, data: Omit, permissions?: string[]): Promise; /** * Get document * - * Get a document by its unique ID. This endpoint response returns a JSON object with the document data. + * Get a document by its unique ID. This endpoint response returns a JSON + * object with the document data. * * @param {string} databaseId * @param {string} collectionId * @param {string} documentId * @param {string[]} queries * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getDocument(databaseId: string, collectionId: string, documentId: string, queries?: string[]): Promise; /** * Update document * - * Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated. + * Update a document by its unique ID. Using the patch method you can pass + * only specific fields that will get updated. * * @param {string} databaseId * @param {string} collectionId @@ -53,8 +59,8 @@ export declare class Databases { * @param {Partial>} data * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateDocument(databaseId: string, collectionId: string, documentId: string, data?: Partial>, permissions?: string[]): Promise; /** * Delete document @@ -65,7 +71,7 @@ export declare class Databases { * @param {string} collectionId * @param {string} documentId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteDocument(databaseId: string, collectionId: string, documentId: string): Promise<{}>; } diff --git a/node_modules/appwrite/types/services/functions.d.ts b/node_modules/appwrite/types/services/functions.d.ts index 96b9a8f..1428c53 100644 --- a/node_modules/appwrite/types/services/functions.d.ts +++ b/node_modules/appwrite/types/services/functions.d.ts @@ -1,25 +1,29 @@ +import { Service } from '../service'; import { Client } from '../client'; import type { Models } from '../models'; import { ExecutionMethod } from '../enums/execution-method'; -export declare class Functions { - client: Client; +export declare class Functions extends Service { constructor(client: Client); /** * List executions * - * Get a list of all the current user function execution logs. You can use the query params to filter your results. + * Get a list of all the current user function execution logs. You can use the + * query params to filter your results. * * @param {string} functionId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listExecutions(functionId: string, queries?: string[], search?: string): Promise; /** * Create execution * - * Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously. + * Trigger a function execution. The returned object will return you the + * current execution status. You can ping the `Get Execution` endpoint to get + * updates on the current execution status. Once this endpoint is called, your + * function execution process will start asynchronously. * * @param {string} functionId * @param {string} body @@ -27,11 +31,10 @@ export declare class Functions { * @param {string} xpath * @param {ExecutionMethod} method * @param {object} headers - * @param {string} scheduledAt * @throws {AppwriteException} - * @returns {Promise} - */ - createExecution(functionId: string, body?: string, async?: boolean, xpath?: string, method?: ExecutionMethod, headers?: object, scheduledAt?: string): Promise; + * @returns {Promise} + */ + createExecution(functionId: string, body?: string, async?: boolean, xpath?: string, method?: ExecutionMethod, headers?: object): Promise; /** * Get execution * @@ -40,7 +43,7 @@ export declare class Functions { * @param {string} functionId * @param {string} executionId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getExecution(functionId: string, executionId: string): Promise; } diff --git a/node_modules/appwrite/types/services/graphql.d.ts b/node_modules/appwrite/types/services/graphql.d.ts index a50598c..48e9034 100644 --- a/node_modules/appwrite/types/services/graphql.d.ts +++ b/node_modules/appwrite/types/services/graphql.d.ts @@ -1,6 +1,6 @@ +import { Service } from '../service'; import { Client } from '../client'; -export declare class Graphql { - client: Client; +export declare class Graphql extends Service { constructor(client: Client); /** * GraphQL endpoint @@ -9,8 +9,8 @@ export declare class Graphql { * * @param {object} query * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ query(query: object): Promise<{}>; /** * GraphQL endpoint @@ -19,7 +19,7 @@ export declare class Graphql { * * @param {object} query * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ mutation(query: object): Promise<{}>; } diff --git a/node_modules/appwrite/types/services/locale.d.ts b/node_modules/appwrite/types/services/locale.d.ts index 74f35f1..fad3033 100644 --- a/node_modules/appwrite/types/services/locale.d.ts +++ b/node_modules/appwrite/types/services/locale.d.ts @@ -1,80 +1,91 @@ +import { Service } from '../service'; import { Client } from '../client'; import type { Models } from '../models'; -export declare class Locale { - client: Client; +export declare class Locale extends Service { constructor(client: Client); /** * Get user locale * - * Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language. - -([IP Geolocation by DB-IP](https://db-ip.com)) + * Get the current user location based on IP. Returns an object with user + * country code, country name, continent name, continent code, ip address and + * suggested currency. You can use the locale header to get the data in a + * supported language. + * + * ([IP Geolocation by DB-IP](https://db-ip.com)) * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ get(): Promise; /** * List Locale Codes * - * List of all locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). + * List of all locale codes in [ISO + * 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCodes(): Promise; /** * List continents * - * List of all continents. You can use the locale header to get the data in a supported language. + * List of all continents. You can use the locale header to get the data in a + * supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listContinents(): Promise; /** * List countries * - * List of all countries. You can use the locale header to get the data in a supported language. + * List of all countries. You can use the locale header to get the data in a + * supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountries(): Promise; /** * List EU countries * - * List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language. + * List of all countries that are currently members of the EU. You can use the + * locale header to get the data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountriesEU(): Promise; /** * List countries phone codes * - * List of all countries phone codes. You can use the locale header to get the data in a supported language. + * List of all countries phone codes. You can use the locale header to get the + * data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCountriesPhones(): Promise; /** * List currencies * - * List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language. + * List of all currencies, including currency symbol, name, plural, and + * decimal digits for all major and minor currencies. You can use the locale + * header to get the data in a supported language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listCurrencies(): Promise; /** * List languages * - * List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language. + * List of all languages classified by ISO 639-1 including 2-letter code, name + * in English, and name in the respective language. * * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listLanguages(): Promise; } diff --git a/node_modules/appwrite/types/services/messaging.d.ts b/node_modules/appwrite/types/services/messaging.d.ts index 186f104..79862e6 100644 --- a/node_modules/appwrite/types/services/messaging.d.ts +++ b/node_modules/appwrite/types/services/messaging.d.ts @@ -1,7 +1,7 @@ +import { Service } from '../service'; import { Client } from '../client'; import type { Models } from '../models'; -export declare class Messaging { - client: Client; +export declare class Messaging extends Service { constructor(client: Client); /** * Create subscriber @@ -12,8 +12,8 @@ export declare class Messaging { * @param {string} subscriberId * @param {string} targetId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createSubscriber(topicId: string, subscriberId: string, targetId: string): Promise; /** * Delete subscriber @@ -23,7 +23,7 @@ export declare class Messaging { * @param {string} topicId * @param {string} subscriberId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteSubscriber(topicId: string, subscriberId: string): Promise<{}>; } diff --git a/node_modules/appwrite/types/services/storage.d.ts b/node_modules/appwrite/types/services/storage.d.ts index fd90963..355ac3a 100644 --- a/node_modules/appwrite/types/services/storage.d.ts +++ b/node_modules/appwrite/types/services/storage.d.ts @@ -1,92 +1,113 @@ -import { Client, UploadProgress } from '../client'; +import { Service } from '../service'; +import { Client } from '../client'; import type { Models } from '../models'; +import type { UploadProgress } from '../client'; import { ImageGravity } from '../enums/image-gravity'; import { ImageFormat } from '../enums/image-format'; -export declare class Storage { - client: Client; +export declare class Storage extends Service { constructor(client: Client); /** * List files * - * Get a list of all the user files. You can use the query params to filter your results. + * Get a list of all the user files. You can use the query params to filter + * your results. * * @param {string} bucketId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listFiles(bucketId: string, queries?: string[], search?: string): Promise; /** * Create file * - * Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](https://appwrite.io/docs/server/storage#storageCreateBucket) API or directly from your Appwrite console. - -Larger files should be uploaded using multiple requests with the [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes. - -When the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one. - -If you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally. - + * Create a new file. Before using this route, you should create a new bucket + * resource using either a [server + * integration](https://appwrite.io/docs/server/storage#storageCreateBucket) + * API or directly from your Appwrite console. + * + * Larger files should be uploaded using multiple requests with the + * [content-range](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range) + * header to send a partial request with a maximum supported chunk of `5MB`. + * The `content-range` header values should always be in bytes. + * + * When the first request is sent, the server will return the **File** object, + * and the subsequent part request must include the file's **id** in + * `x-appwrite-id` header to allow the server to know that the partial upload + * is for the existing file and not for a new one. + * + * If you're creating a new file using one of the Appwrite SDKs, all the + * chunking logic will be managed by the SDK internally. + * * * @param {string} bucketId * @param {string} fileId * @param {File} file * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createFile(bucketId: string, fileId: string, file: File, permissions?: string[], onProgress?: (progress: UploadProgress) => void): Promise; /** * Get file * - * Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata. + * Get a file by its unique ID. This endpoint response returns a JSON object + * with the file metadata. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getFile(bucketId: string, fileId: string): Promise; /** * Update file * - * Update a file by its unique ID. Only users with write permissions have access to update this resource. + * Update a file by its unique ID. Only users with write permissions have + * access to update this resource. * * @param {string} bucketId * @param {string} fileId * @param {string} name * @param {string[]} permissions * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateFile(bucketId: string, fileId: string, name?: string, permissions?: string[]): Promise; /** * Delete File * - * Delete a file by its unique ID. Only users with write permissions have access to delete this resource. + * Delete a file by its unique ID. Only users with write permissions have + * access to delete this resource. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteFile(bucketId: string, fileId: string): Promise<{}>; /** * Get file for download * - * Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory. + * Get a file content by its unique ID. The endpoint response return with a + * 'Content-Disposition: attachment' header that tells the browser to start + * downloading the file to user downloads directory. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {string} - */ - getFileDownload(bucketId: string, fileId: string): string; + * @returns {URL} + */ + getFileDownload(bucketId: string, fileId: string): URL; /** * Get file preview * - * Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB. + * Get a file preview image. Currently, this method supports preview for image + * files (jpg, png, and gif), other supported formats, like pdf, docs, slides, + * and spreadsheets, will return the file icon image. You can also pass query + * string arguments for cutting and resizing your preview image. Preview is + * supported only for image files smaller than 10MB. * * @param {string} bucketId * @param {string} fileId @@ -102,18 +123,20 @@ If you're creating a new file using one of the Appwrite SDKs, all the chunk * @param {string} background * @param {ImageFormat} output * @throws {AppwriteException} - * @returns {string} - */ - getFilePreview(bucketId: string, fileId: string, width?: number, height?: number, gravity?: ImageGravity, quality?: number, borderWidth?: number, borderColor?: string, borderRadius?: number, opacity?: number, rotation?: number, background?: string, output?: ImageFormat): string; + * @returns {URL} + */ + getFilePreview(bucketId: string, fileId: string, width?: number, height?: number, gravity?: ImageGravity, quality?: number, borderWidth?: number, borderColor?: string, borderRadius?: number, opacity?: number, rotation?: number, background?: string, output?: ImageFormat): URL; /** * Get file for view * - * Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header. + * Get a file content by its unique ID. This endpoint is similar to the + * download method but returns with no 'Content-Disposition: attachment' + * header. * * @param {string} bucketId * @param {string} fileId * @throws {AppwriteException} - * @returns {string} - */ - getFileView(bucketId: string, fileId: string): string; + * @returns {URL} + */ + getFileView(bucketId: string, fileId: string): URL; } diff --git a/node_modules/appwrite/types/services/teams.d.ts b/node_modules/appwrite/types/services/teams.d.ts index b080c87..42ea107 100644 --- a/node_modules/appwrite/types/services/teams.d.ts +++ b/node_modules/appwrite/types/services/teams.d.ts @@ -1,30 +1,33 @@ +import { Service } from '../service'; import { Client } from '../client'; import type { Models } from '../models'; -export declare class Teams { - client: Client; +export declare class Teams extends Service { constructor(client: Client); /** * List teams * - * Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results. + * Get a list of all the teams in which the current user is a member. You can + * use the parameters to filter your results. * * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ list(queries?: string[], search?: string): Promise>; /** * Create team * - * Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team. + * Create a new team. The user who creates the team will automatically be + * assigned as the owner of the team. Only the users with the owner role can + * invite new members, add new owners and delete or update the team. * * @param {string} teamId * @param {string} name * @param {string[]} roles * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ create(teamId: string, name: string, roles?: string[]): Promise>; /** * Get team @@ -33,53 +36,68 @@ export declare class Teams { * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ get(teamId: string): Promise>; /** * Update name * - * Update the team's name by its unique ID. + * Update the team's name by its unique ID. * * @param {string} teamId * @param {string} name * @throws {AppwriteException} - * @returns {Promise>} - */ + * @returns {Promise} + */ updateName(teamId: string, name: string): Promise>; /** * Delete team * - * Delete a team using its ID. Only team members with the owner role can delete the team. + * Delete a team using its ID. Only team members with the owner role can + * delete the team. * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ delete(teamId: string): Promise<{}>; /** * List team memberships * - * Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint. + * Use this endpoint to list a team's members using the team's ID. All team + * members have read access to this endpoint. * * @param {string} teamId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ listMemberships(teamId: string, queries?: string[], search?: string): Promise; /** * Create team membership * - * Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appwrite will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn't exist. If initiated from a Server SDK, the new member will be added automatically to the team. - -You only need to provide one of a user ID, email, or phone number. Appwrite will prioritize accepting the user ID > email > phone number if you provide more than one of these parameters. - -Use the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team. - -Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appwrite will accept the only redirect URLs under the domains you have added as a platform on the Appwrite Console. - + * Invite a new member to join your team. Provide an ID for existing users, or + * invite unregistered users using an email or phone number. If initiated from + * a Client SDK, Appwrite will send an email or sms with a link to join the + * team to the invited user, and an account will be created for them if one + * doesn't exist. If initiated from a Server SDK, the new member will be added + * automatically to the team. + * + * You only need to provide one of a user ID, email, or phone number. Appwrite + * will prioritize accepting the user ID > email > phone number if you provide + * more than one of these parameters. + * + * Use the `url` parameter to redirect the user from the invitation email to + * your app. After the user is redirected, use the [Update Team Membership + * Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) + * endpoint to allow the user to accept the invitation to the team. + * + * Please note that to avoid a [Redirect + * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) + * Appwrite will accept the only redirect URLs under the domains you have + * added as a platform on the Appwrite Console. + * * * @param {string} teamId * @param {string[]} roles @@ -89,79 +107,91 @@ Please note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatShee * @param {string} url * @param {string} name * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ createMembership(teamId: string, roles: string[], email?: string, userId?: string, phone?: string, url?: string, name?: string): Promise; /** * Get team membership * - * Get a team member by the membership unique id. All team members have read access for this resource. + * Get a team member by the membership unique id. All team members have read + * access for this resource. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getMembership(teamId: string, membershipId: string): Promise; /** * Update membership * - * Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https://appwrite.io/docs/permissions). - + * Modify the roles of a team member. Only team members with the owner role + * have access to this endpoint. Learn more about [roles and + * permissions](https://appwrite.io/docs/permissions). + * * * @param {string} teamId * @param {string} membershipId * @param {string[]} roles * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMembership(teamId: string, membershipId: string, roles: string[]): Promise; /** * Delete team membership * - * This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted. + * This endpoint allows a user to leave a team or for a team owner to delete + * the membership of any other team member. You can also use this endpoint to + * delete a user membership even if it is not accepted. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} - * @returns {Promise<{}>} - */ + * @returns {Promise} + */ deleteMembership(teamId: string, membershipId: string): Promise<{}>; /** * Update team membership status * - * Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user. - -If the request is successful, a session for the user is automatically created. - + * Use this endpoint to allow a user to accept an invitation to join a team + * after being redirected back to your app from the invitation email received + * by the user. + * + * If the request is successful, a session for the user is automatically + * created. + * * * @param {string} teamId * @param {string} membershipId * @param {string} userId * @param {string} secret * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updateMembershipStatus(teamId: string, membershipId: string, userId: string, secret: string): Promise; /** * Get team preferences * - * Get the team's shared preferences by its unique ID. If a preference doesn't need to be shared by all team members, prefer storing them in [user preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). + * Get the team's shared preferences by its unique ID. If a preference doesn't + * need to be shared by all team members, prefer storing them in [user + * preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). * * @param {string} teamId * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ getPrefs(teamId: string): Promise; /** * Update preferences * - * Update the team's preferences by its unique ID. The object you pass is stored as is and replaces any previous value. The maximum allowed prefs size is 64kB and throws an error if exceeded. + * Update the team's preferences by its unique ID. The object you pass is + * stored as is and replaces any previous value. The maximum allowed prefs + * size is 64kB and throws an error if exceeded. * * @param {string} teamId * @param {object} prefs * @throws {AppwriteException} - * @returns {Promise} - */ + * @returns {Promise} + */ updatePrefs(teamId: string, prefs: object): Promise; } diff --git a/node_modules/asynckit/LICENSE b/node_modules/asynckit/LICENSE new file mode 100644 index 0000000..c9eca5d --- /dev/null +++ b/node_modules/asynckit/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Alex Indigo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/asynckit/README.md b/node_modules/asynckit/README.md new file mode 100644 index 0000000..ddcc7e6 --- /dev/null +++ b/node_modules/asynckit/README.md @@ -0,0 +1,233 @@ +# asynckit [![NPM Module](https://img.shields.io/npm/v/asynckit.svg?style=flat)](https://www.npmjs.com/package/asynckit) + +Minimal async jobs utility library, with streams support. + +[![PhantomJS Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=browser&style=flat)](https://travis-ci.org/alexindigo/asynckit) +[![Linux Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=linux:0.12-6.x&style=flat)](https://travis-ci.org/alexindigo/asynckit) +[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/asynckit/v0.4.0.svg?label=windows:0.12-6.x&style=flat)](https://ci.appveyor.com/project/alexindigo/asynckit) + +[![Coverage Status](https://img.shields.io/coveralls/alexindigo/asynckit/v0.4.0.svg?label=code+coverage&style=flat)](https://coveralls.io/github/alexindigo/asynckit?branch=master) +[![Dependency Status](https://img.shields.io/david/alexindigo/asynckit/v0.4.0.svg?style=flat)](https://david-dm.org/alexindigo/asynckit) +[![bitHound Overall Score](https://www.bithound.io/github/alexindigo/asynckit/badges/score.svg)](https://www.bithound.io/github/alexindigo/asynckit) + + + +AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects. +Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method. + +It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators. + +| compression | size | +| :----------------- | -------: | +| asynckit.js | 12.34 kB | +| asynckit.min.js | 4.11 kB | +| asynckit.min.js.gz | 1.47 kB | + + +## Install + +```sh +$ npm install --save asynckit +``` + +## Examples + +### Parallel Jobs + +Runs iterator over provided array in parallel. Stores output in the `result` array, +on the matching positions. In unlikely event of an error from one of the jobs, +will terminate rest of the active jobs (if abort function is provided) +and return error along with salvaged data to the main callback function. + +#### Input Array + +```javascript +var parallel = require('asynckit').parallel + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] + , target = [] + ; + +parallel(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// async job accepts one element from the array +// and a callback function +function asyncJob(item, cb) +{ + // different delays (in ms) per item + var delay = item * 25; + + // pretend different jobs take different time to finish + // and not in consequential order + var timeoutId = setTimeout(function() { + target.push(item); + cb(null, item * 2); + }, delay); + + // allow to cancel "leftover" jobs upon error + // return function, invoking of which will abort this job + return clearTimeout.bind(null, timeoutId); +} +``` + +More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js). + +#### Input Object + +Also it supports named jobs, listed via object. + +```javascript +var parallel = require('asynckit/parallel') + , assert = require('assert') + ; + +var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } + , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } + , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] + , expectedKeys = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ] + , target = [] + , keys = [] + ; + +parallel(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); + assert.deepEqual(keys, expectedKeys); +}); + +// supports full value, key, callback (shortcut) interface +function asyncJob(item, key, cb) +{ + // different delays (in ms) per item + var delay = item * 25; + + // pretend different jobs take different time to finish + // and not in consequential order + var timeoutId = setTimeout(function() { + keys.push(key); + target.push(item); + cb(null, item * 2); + }, delay); + + // allow to cancel "leftover" jobs upon error + // return function, invoking of which will abort this job + return clearTimeout.bind(null, timeoutId); +} +``` + +More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js). + +### Serial Jobs + +Runs iterator over provided array sequentially. Stores output in the `result` array, +on the matching positions. In unlikely event of an error from one of the jobs, +will not proceed to the rest of the items in the list +and return error along with salvaged data to the main callback function. + +#### Input Array + +```javascript +var serial = require('asynckit/serial') + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] + , target = [] + ; + +serial(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// extended interface (item, key, callback) +// also supported for arrays +function asyncJob(item, key, cb) +{ + target.push(key); + + // it will be automatically made async + // even it iterator "returns" in the same event loop + cb(null, item * 2); +} +``` + +More examples could be found in [test/test-serial-array.js](test/test-serial-array.js). + +#### Input Object + +Also it supports named jobs, listed via object. + +```javascript +var serial = require('asynckit').serial + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] + , target = [] + ; + +var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } + , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } + , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , target = [] + ; + + +serial(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// shortcut interface (item, callback) +// works for object as well as for the arrays +function asyncJob(item, cb) +{ + target.push(item); + + // it will be automatically made async + // even it iterator "returns" in the same event loop + cb(null, item * 2); +} +``` + +More examples could be found in [test/test-serial-object.js](test/test-serial-object.js). + +_Note: Since _object_ is an _unordered_ collection of properties, +it may produce unexpected results with sequential iterations. +Whenever order of the jobs' execution is important please use `serialOrdered` method._ + +### Ordered Serial Iterations + +TBD + +For example [compare-property](compare-property) package. + +### Streaming interface + +TBD + +## Want to Know More? + +More examples can be found in [test folder](test/). + +Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions. + +## License + +AsyncKit is licensed under the MIT license. diff --git a/node_modules/asynckit/bench.js b/node_modules/asynckit/bench.js new file mode 100644 index 0000000..c612f1a --- /dev/null +++ b/node_modules/asynckit/bench.js @@ -0,0 +1,76 @@ +/* eslint no-console: "off" */ + +var asynckit = require('./') + , async = require('async') + , assert = require('assert') + , expected = 0 + ; + +var Benchmark = require('benchmark'); +var suite = new Benchmark.Suite; + +var source = []; +for (var z = 1; z < 100; z++) +{ + source.push(z); + expected += z; +} + +suite +// add tests + +.add('async.map', function(deferred) +{ + var total = 0; + + async.map(source, + function(i, cb) + { + setImmediate(function() + { + total += i; + cb(null, total); + }); + }, + function(err, result) + { + assert.ifError(err); + assert.equal(result[result.length - 1], expected); + deferred.resolve(); + }); +}, {'defer': true}) + + +.add('asynckit.parallel', function(deferred) +{ + var total = 0; + + asynckit.parallel(source, + function(i, cb) + { + setImmediate(function() + { + total += i; + cb(null, total); + }); + }, + function(err, result) + { + assert.ifError(err); + assert.equal(result[result.length - 1], expected); + deferred.resolve(); + }); +}, {'defer': true}) + + +// add listeners +.on('cycle', function(ev) +{ + console.log(String(ev.target)); +}) +.on('complete', function() +{ + console.log('Fastest is ' + this.filter('fastest').map('name')); +}) +// run async +.run({ 'async': true }); diff --git a/node_modules/asynckit/index.js b/node_modules/asynckit/index.js new file mode 100644 index 0000000..455f945 --- /dev/null +++ b/node_modules/asynckit/index.js @@ -0,0 +1,6 @@ +module.exports = +{ + parallel : require('./parallel.js'), + serial : require('./serial.js'), + serialOrdered : require('./serialOrdered.js') +}; diff --git a/node_modules/asynckit/lib/abort.js b/node_modules/asynckit/lib/abort.js new file mode 100644 index 0000000..114367e --- /dev/null +++ b/node_modules/asynckit/lib/abort.js @@ -0,0 +1,29 @@ +// API +module.exports = abort; + +/** + * Aborts leftover active jobs + * + * @param {object} state - current state object + */ +function abort(state) +{ + Object.keys(state.jobs).forEach(clean.bind(state)); + + // reset leftover jobs + state.jobs = {}; +} + +/** + * Cleans up leftover job by invoking abort function for the provided job id + * + * @this state + * @param {string|number} key - job id to abort + */ +function clean(key) +{ + if (typeof this.jobs[key] == 'function') + { + this.jobs[key](); + } +} diff --git a/node_modules/asynckit/lib/async.js b/node_modules/asynckit/lib/async.js new file mode 100644 index 0000000..7f1288a --- /dev/null +++ b/node_modules/asynckit/lib/async.js @@ -0,0 +1,34 @@ +var defer = require('./defer.js'); + +// API +module.exports = async; + +/** + * Runs provided callback asynchronously + * even if callback itself is not + * + * @param {function} callback - callback to invoke + * @returns {function} - augmented callback + */ +function async(callback) +{ + var isAsync = false; + + // check if async happened + defer(function() { isAsync = true; }); + + return function async_callback(err, result) + { + if (isAsync) + { + callback(err, result); + } + else + { + defer(function nextTick_callback() + { + callback(err, result); + }); + } + }; +} diff --git a/node_modules/asynckit/lib/defer.js b/node_modules/asynckit/lib/defer.js new file mode 100644 index 0000000..b67110c --- /dev/null +++ b/node_modules/asynckit/lib/defer.js @@ -0,0 +1,26 @@ +module.exports = defer; + +/** + * Runs provided function on next iteration of the event loop + * + * @param {function} fn - function to run + */ +function defer(fn) +{ + var nextTick = typeof setImmediate == 'function' + ? setImmediate + : ( + typeof process == 'object' && typeof process.nextTick == 'function' + ? process.nextTick + : null + ); + + if (nextTick) + { + nextTick(fn); + } + else + { + setTimeout(fn, 0); + } +} diff --git a/node_modules/asynckit/lib/iterate.js b/node_modules/asynckit/lib/iterate.js new file mode 100644 index 0000000..5d2839a --- /dev/null +++ b/node_modules/asynckit/lib/iterate.js @@ -0,0 +1,75 @@ +var async = require('./async.js') + , abort = require('./abort.js') + ; + +// API +module.exports = iterate; + +/** + * Iterates over each job object + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {object} state - current job status + * @param {function} callback - invoked when all elements processed + */ +function iterate(list, iterator, state, callback) +{ + // store current index + var key = state['keyedList'] ? state['keyedList'][state.index] : state.index; + + state.jobs[key] = runJob(iterator, key, list[key], function(error, output) + { + // don't repeat yourself + // skip secondary callbacks + if (!(key in state.jobs)) + { + return; + } + + // clean up jobs + delete state.jobs[key]; + + if (error) + { + // don't process rest of the results + // stop still active jobs + // and reset the list + abort(state); + } + else + { + state.results[key] = output; + } + + // return salvaged results + callback(error, state.results); + }); +} + +/** + * Runs iterator over provided job element + * + * @param {function} iterator - iterator to invoke + * @param {string|number} key - key/index of the element in the list of jobs + * @param {mixed} item - job description + * @param {function} callback - invoked after iterator is done with the job + * @returns {function|mixed} - job abort function or something else + */ +function runJob(iterator, key, item, callback) +{ + var aborter; + + // allow shortcut if iterator expects only two arguments + if (iterator.length == 2) + { + aborter = iterator(item, async(callback)); + } + // otherwise go with full three arguments + else + { + aborter = iterator(item, key, async(callback)); + } + + return aborter; +} diff --git a/node_modules/asynckit/lib/readable_asynckit.js b/node_modules/asynckit/lib/readable_asynckit.js new file mode 100644 index 0000000..78ad240 --- /dev/null +++ b/node_modules/asynckit/lib/readable_asynckit.js @@ -0,0 +1,91 @@ +var streamify = require('./streamify.js') + , defer = require('./defer.js') + ; + +// API +module.exports = ReadableAsyncKit; + +/** + * Base constructor for all streams + * used to hold properties/methods + */ +function ReadableAsyncKit() +{ + ReadableAsyncKit.super_.apply(this, arguments); + + // list of active jobs + this.jobs = {}; + + // add stream methods + this.destroy = destroy; + this._start = _start; + this._read = _read; +} + +/** + * Destroys readable stream, + * by aborting outstanding jobs + * + * @returns {void} + */ +function destroy() +{ + if (this.destroyed) + { + return; + } + + this.destroyed = true; + + if (typeof this.terminator == 'function') + { + this.terminator(); + } +} + +/** + * Starts provided jobs in async manner + * + * @private + */ +function _start() +{ + // first argument – runner function + var runner = arguments[0] + // take away first argument + , args = Array.prototype.slice.call(arguments, 1) + // second argument - input data + , input = args[0] + // last argument - result callback + , endCb = streamify.callback.call(this, args[args.length - 1]) + ; + + args[args.length - 1] = endCb; + // third argument - iterator + args[1] = streamify.iterator.call(this, args[1]); + + // allow time for proper setup + defer(function() + { + if (!this.destroyed) + { + this.terminator = runner.apply(null, args); + } + else + { + endCb(null, Array.isArray(input) ? [] : {}); + } + }.bind(this)); +} + + +/** + * Implement _read to comply with Readable streams + * Doesn't really make sense for flowing object mode + * + * @private + */ +function _read() +{ + +} diff --git a/node_modules/asynckit/lib/readable_parallel.js b/node_modules/asynckit/lib/readable_parallel.js new file mode 100644 index 0000000..5d2929f --- /dev/null +++ b/node_modules/asynckit/lib/readable_parallel.js @@ -0,0 +1,25 @@ +var parallel = require('../parallel.js'); + +// API +module.exports = ReadableParallel; + +/** + * Streaming wrapper to `asynckit.parallel` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableParallel(list, iterator, callback) +{ + if (!(this instanceof ReadableParallel)) + { + return new ReadableParallel(list, iterator, callback); + } + + // turn on object mode + ReadableParallel.super_.call(this, {objectMode: true}); + + this._start(parallel, list, iterator, callback); +} diff --git a/node_modules/asynckit/lib/readable_serial.js b/node_modules/asynckit/lib/readable_serial.js new file mode 100644 index 0000000..7822698 --- /dev/null +++ b/node_modules/asynckit/lib/readable_serial.js @@ -0,0 +1,25 @@ +var serial = require('../serial.js'); + +// API +module.exports = ReadableSerial; + +/** + * Streaming wrapper to `asynckit.serial` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableSerial(list, iterator, callback) +{ + if (!(this instanceof ReadableSerial)) + { + return new ReadableSerial(list, iterator, callback); + } + + // turn on object mode + ReadableSerial.super_.call(this, {objectMode: true}); + + this._start(serial, list, iterator, callback); +} diff --git a/node_modules/asynckit/lib/readable_serial_ordered.js b/node_modules/asynckit/lib/readable_serial_ordered.js new file mode 100644 index 0000000..3de89c4 --- /dev/null +++ b/node_modules/asynckit/lib/readable_serial_ordered.js @@ -0,0 +1,29 @@ +var serialOrdered = require('../serialOrdered.js'); + +// API +module.exports = ReadableSerialOrdered; +// expose sort helpers +module.exports.ascending = serialOrdered.ascending; +module.exports.descending = serialOrdered.descending; + +/** + * Streaming wrapper to `asynckit.serialOrdered` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} sortMethod - custom sort function + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableSerialOrdered(list, iterator, sortMethod, callback) +{ + if (!(this instanceof ReadableSerialOrdered)) + { + return new ReadableSerialOrdered(list, iterator, sortMethod, callback); + } + + // turn on object mode + ReadableSerialOrdered.super_.call(this, {objectMode: true}); + + this._start(serialOrdered, list, iterator, sortMethod, callback); +} diff --git a/node_modules/asynckit/lib/state.js b/node_modules/asynckit/lib/state.js new file mode 100644 index 0000000..cbea7ad --- /dev/null +++ b/node_modules/asynckit/lib/state.js @@ -0,0 +1,37 @@ +// API +module.exports = state; + +/** + * Creates initial state object + * for iteration over list + * + * @param {array|object} list - list to iterate over + * @param {function|null} sortMethod - function to use for keys sort, + * or `null` to keep them as is + * @returns {object} - initial state object + */ +function state(list, sortMethod) +{ + var isNamedList = !Array.isArray(list) + , initState = + { + index : 0, + keyedList: isNamedList || sortMethod ? Object.keys(list) : null, + jobs : {}, + results : isNamedList ? {} : [], + size : isNamedList ? Object.keys(list).length : list.length + } + ; + + if (sortMethod) + { + // sort array keys based on it's values + // sort object's keys just on own merit + initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) + { + return sortMethod(list[a], list[b]); + }); + } + + return initState; +} diff --git a/node_modules/asynckit/lib/streamify.js b/node_modules/asynckit/lib/streamify.js new file mode 100644 index 0000000..f56a1c9 --- /dev/null +++ b/node_modules/asynckit/lib/streamify.js @@ -0,0 +1,141 @@ +var async = require('./async.js'); + +// API +module.exports = { + iterator: wrapIterator, + callback: wrapCallback +}; + +/** + * Wraps iterators with long signature + * + * @this ReadableAsyncKit# + * @param {function} iterator - function to wrap + * @returns {function} - wrapped function + */ +function wrapIterator(iterator) +{ + var stream = this; + + return function(item, key, cb) + { + var aborter + , wrappedCb = async(wrapIteratorCallback.call(stream, cb, key)) + ; + + stream.jobs[key] = wrappedCb; + + // it's either shortcut (item, cb) + if (iterator.length == 2) + { + aborter = iterator(item, wrappedCb); + } + // or long format (item, key, cb) + else + { + aborter = iterator(item, key, wrappedCb); + } + + return aborter; + }; +} + +/** + * Wraps provided callback function + * allowing to execute snitch function before + * real callback + * + * @this ReadableAsyncKit# + * @param {function} callback - function to wrap + * @returns {function} - wrapped function + */ +function wrapCallback(callback) +{ + var stream = this; + + var wrapped = function(error, result) + { + return finisher.call(stream, error, result, callback); + }; + + return wrapped; +} + +/** + * Wraps provided iterator callback function + * makes sure snitch only called once, + * but passes secondary calls to the original callback + * + * @this ReadableAsyncKit# + * @param {function} callback - callback to wrap + * @param {number|string} key - iteration key + * @returns {function} wrapped callback + */ +function wrapIteratorCallback(callback, key) +{ + var stream = this; + + return function(error, output) + { + // don't repeat yourself + if (!(key in stream.jobs)) + { + callback(error, output); + return; + } + + // clean up jobs + delete stream.jobs[key]; + + return streamer.call(stream, error, {key: key, value: output}, callback); + }; +} + +/** + * Stream wrapper for iterator callback + * + * @this ReadableAsyncKit# + * @param {mixed} error - error response + * @param {mixed} output - iterator output + * @param {function} callback - callback that expects iterator results + */ +function streamer(error, output, callback) +{ + if (error && !this.error) + { + this.error = error; + this.pause(); + this.emit('error', error); + // send back value only, as expected + callback(error, output && output.value); + return; + } + + // stream stuff + this.push(output); + + // back to original track + // send back value only, as expected + callback(error, output && output.value); +} + +/** + * Stream wrapper for finishing callback + * + * @this ReadableAsyncKit# + * @param {mixed} error - error response + * @param {mixed} output - iterator output + * @param {function} callback - callback that expects final results + */ +function finisher(error, output, callback) +{ + // signal end of the stream + // only for successfully finished streams + if (!error) + { + this.push(null); + } + + // back to original track + callback(error, output); +} diff --git a/node_modules/asynckit/lib/terminator.js b/node_modules/asynckit/lib/terminator.js new file mode 100644 index 0000000..d6eb992 --- /dev/null +++ b/node_modules/asynckit/lib/terminator.js @@ -0,0 +1,29 @@ +var abort = require('./abort.js') + , async = require('./async.js') + ; + +// API +module.exports = terminator; + +/** + * Terminates jobs in the attached state context + * + * @this AsyncKitState# + * @param {function} callback - final callback to invoke after termination + */ +function terminator(callback) +{ + if (!Object.keys(this.jobs).length) + { + return; + } + + // fast forward iteration index + this.index = this.size; + + // abort jobs + abort(this); + + // send back results we have so far + async(callback)(null, this.results); +} diff --git a/node_modules/asynckit/package.json b/node_modules/asynckit/package.json new file mode 100644 index 0000000..51147d6 --- /dev/null +++ b/node_modules/asynckit/package.json @@ -0,0 +1,63 @@ +{ + "name": "asynckit", + "version": "0.4.0", + "description": "Minimal async jobs utility library, with streams support", + "main": "index.js", + "scripts": { + "clean": "rimraf coverage", + "lint": "eslint *.js lib/*.js test/*.js", + "test": "istanbul cover --reporter=json tape -- 'test/test-*.js' | tap-spec", + "win-test": "tape test/test-*.js", + "browser": "browserify -t browserify-istanbul test/lib/browserify_adjustment.js test/test-*.js | obake --coverage | tap-spec", + "report": "istanbul report", + "size": "browserify index.js | size-table asynckit", + "debug": "tape test/test-*.js" + }, + "pre-commit": [ + "clean", + "lint", + "test", + "browser", + "report", + "size" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/alexindigo/asynckit.git" + }, + "keywords": [ + "async", + "jobs", + "parallel", + "serial", + "iterator", + "array", + "object", + "stream", + "destroy", + "terminate", + "abort" + ], + "author": "Alex Indigo ", + "license": "MIT", + "bugs": { + "url": "https://github.com/alexindigo/asynckit/issues" + }, + "homepage": "https://github.com/alexindigo/asynckit#readme", + "devDependencies": { + "browserify": "^13.0.0", + "browserify-istanbul": "^2.0.0", + "coveralls": "^2.11.9", + "eslint": "^2.9.0", + "istanbul": "^0.4.3", + "obake": "^0.1.2", + "phantomjs-prebuilt": "^2.1.7", + "pre-commit": "^1.1.3", + "reamde": "^1.1.0", + "rimraf": "^2.5.2", + "size-table": "^0.2.0", + "tap-spec": "^4.1.1", + "tape": "^4.5.1" + }, + "dependencies": {} +} diff --git a/node_modules/asynckit/parallel.js b/node_modules/asynckit/parallel.js new file mode 100644 index 0000000..3c50344 --- /dev/null +++ b/node_modules/asynckit/parallel.js @@ -0,0 +1,43 @@ +var iterate = require('./lib/iterate.js') + , initState = require('./lib/state.js') + , terminator = require('./lib/terminator.js') + ; + +// Public API +module.exports = parallel; + +/** + * Runs iterator over provided array elements in parallel + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function parallel(list, iterator, callback) +{ + var state = initState(list); + + while (state.index < (state['keyedList'] || list).length) + { + iterate(list, iterator, state, function(error, result) + { + if (error) + { + callback(error, result); + return; + } + + // looks like it's the last one + if (Object.keys(state.jobs).length === 0) + { + callback(null, state.results); + return; + } + }); + + state.index++; + } + + return terminator.bind(state, callback); +} diff --git a/node_modules/asynckit/serial.js b/node_modules/asynckit/serial.js new file mode 100644 index 0000000..6cd949a --- /dev/null +++ b/node_modules/asynckit/serial.js @@ -0,0 +1,17 @@ +var serialOrdered = require('./serialOrdered.js'); + +// Public API +module.exports = serial; + +/** + * Runs iterator over provided array elements in series + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function serial(list, iterator, callback) +{ + return serialOrdered(list, iterator, null, callback); +} diff --git a/node_modules/asynckit/serialOrdered.js b/node_modules/asynckit/serialOrdered.js new file mode 100644 index 0000000..607eafe --- /dev/null +++ b/node_modules/asynckit/serialOrdered.js @@ -0,0 +1,75 @@ +var iterate = require('./lib/iterate.js') + , initState = require('./lib/state.js') + , terminator = require('./lib/terminator.js') + ; + +// Public API +module.exports = serialOrdered; +// sorting helpers +module.exports.ascending = ascending; +module.exports.descending = descending; + +/** + * Runs iterator over provided sorted array elements in series + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} sortMethod - custom sort function + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function serialOrdered(list, iterator, sortMethod, callback) +{ + var state = initState(list, sortMethod); + + iterate(list, iterator, state, function iteratorHandler(error, result) + { + if (error) + { + callback(error, result); + return; + } + + state.index++; + + // are we there yet? + if (state.index < (state['keyedList'] || list).length) + { + iterate(list, iterator, state, iteratorHandler); + return; + } + + // done here + callback(null, state.results); + }); + + return terminator.bind(state, callback); +} + +/* + * -- Sort methods + */ + +/** + * sort helper to sort array elements in ascending order + * + * @param {mixed} a - an item to compare + * @param {mixed} b - an item to compare + * @returns {number} - comparison result + */ +function ascending(a, b) +{ + return a < b ? -1 : a > b ? 1 : 0; +} + +/** + * sort helper to sort array elements in descending order + * + * @param {mixed} a - an item to compare + * @param {mixed} b - an item to compare + * @returns {number} - comparison result + */ +function descending(a, b) +{ + return -1 * ascending(a, b); +} diff --git a/node_modules/asynckit/stream.js b/node_modules/asynckit/stream.js new file mode 100644 index 0000000..d43465f --- /dev/null +++ b/node_modules/asynckit/stream.js @@ -0,0 +1,21 @@ +var inherits = require('util').inherits + , Readable = require('stream').Readable + , ReadableAsyncKit = require('./lib/readable_asynckit.js') + , ReadableParallel = require('./lib/readable_parallel.js') + , ReadableSerial = require('./lib/readable_serial.js') + , ReadableSerialOrdered = require('./lib/readable_serial_ordered.js') + ; + +// API +module.exports = +{ + parallel : ReadableParallel, + serial : ReadableSerial, + serialOrdered : ReadableSerialOrdered, +}; + +inherits(ReadableAsyncKit, Readable); + +inherits(ReadableParallel, ReadableAsyncKit); +inherits(ReadableSerial, ReadableAsyncKit); +inherits(ReadableSerialOrdered, ReadableAsyncKit); diff --git a/node_modules/combined-stream/License b/node_modules/combined-stream/License new file mode 100644 index 0000000..4804b7a --- /dev/null +++ b/node_modules/combined-stream/License @@ -0,0 +1,19 @@ +Copyright (c) 2011 Debuggable Limited + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/combined-stream/Readme.md b/node_modules/combined-stream/Readme.md new file mode 100644 index 0000000..9e367b5 --- /dev/null +++ b/node_modules/combined-stream/Readme.md @@ -0,0 +1,138 @@ +# combined-stream + +A stream that emits multiple other streams one after another. + +**NB** Currently `combined-stream` works with streams version 1 only. There is ongoing effort to switch this library to streams version 2. Any help is welcome. :) Meanwhile you can explore other libraries that provide streams2 support with more or less compatibility with `combined-stream`. + +- [combined-stream2](https://www.npmjs.com/package/combined-stream2): A drop-in streams2-compatible replacement for the combined-stream module. + +- [multistream](https://www.npmjs.com/package/multistream): A stream that emits multiple other streams one after another. + +## Installation + +``` bash +npm install combined-stream +``` + +## Usage + +Here is a simple example that shows how you can use combined-stream to combine +two files into one: + +``` javascript +var CombinedStream = require('combined-stream'); +var fs = require('fs'); + +var combinedStream = CombinedStream.create(); +combinedStream.append(fs.createReadStream('file1.txt')); +combinedStream.append(fs.createReadStream('file2.txt')); + +combinedStream.pipe(fs.createWriteStream('combined.txt')); +``` + +While the example above works great, it will pause all source streams until +they are needed. If you don't want that to happen, you can set `pauseStreams` +to `false`: + +``` javascript +var CombinedStream = require('combined-stream'); +var fs = require('fs'); + +var combinedStream = CombinedStream.create({pauseStreams: false}); +combinedStream.append(fs.createReadStream('file1.txt')); +combinedStream.append(fs.createReadStream('file2.txt')); + +combinedStream.pipe(fs.createWriteStream('combined.txt')); +``` + +However, what if you don't have all the source streams yet, or you don't want +to allocate the resources (file descriptors, memory, etc.) for them right away? +Well, in that case you can simply provide a callback that supplies the stream +by calling a `next()` function: + +``` javascript +var CombinedStream = require('combined-stream'); +var fs = require('fs'); + +var combinedStream = CombinedStream.create(); +combinedStream.append(function(next) { + next(fs.createReadStream('file1.txt')); +}); +combinedStream.append(function(next) { + next(fs.createReadStream('file2.txt')); +}); + +combinedStream.pipe(fs.createWriteStream('combined.txt')); +``` + +## API + +### CombinedStream.create([options]) + +Returns a new combined stream object. Available options are: + +* `maxDataSize` +* `pauseStreams` + +The effect of those options is described below. + +### combinedStream.pauseStreams = `true` + +Whether to apply back pressure to the underlaying streams. If set to `false`, +the underlaying streams will never be paused. If set to `true`, the +underlaying streams will be paused right after being appended, as well as when +`delayedStream.pipe()` wants to throttle. + +### combinedStream.maxDataSize = `2 * 1024 * 1024` + +The maximum amount of bytes (or characters) to buffer for all source streams. +If this value is exceeded, `combinedStream` emits an `'error'` event. + +### combinedStream.dataSize = `0` + +The amount of bytes (or characters) currently buffered by `combinedStream`. + +### combinedStream.append(stream) + +Appends the given `stream` to the combinedStream object. If `pauseStreams` is +set to `true, this stream will also be paused right away. + +`streams` can also be a function that takes one parameter called `next`. `next` +is a function that must be invoked in order to provide the `next` stream, see +example above. + +Regardless of how the `stream` is appended, combined-stream always attaches an +`'error'` listener to it, so you don't have to do that manually. + +Special case: `stream` can also be a String or Buffer. + +### combinedStream.write(data) + +You should not call this, `combinedStream` takes care of piping the appended +streams into itself for you. + +### combinedStream.resume() + +Causes `combinedStream` to start drain the streams it manages. The function is +idempotent, and also emits a `'resume'` event each time which usually goes to +the stream that is currently being drained. + +### combinedStream.pause(); + +If `combinedStream.pauseStreams` is set to `false`, this does nothing. +Otherwise a `'pause'` event is emitted, this goes to the stream that is +currently being drained, so you can use it to apply back pressure. + +### combinedStream.end(); + +Sets `combinedStream.writable` to false, emits an `'end'` event, and removes +all streams from the queue. + +### combinedStream.destroy(); + +Same as `combinedStream.end()`, except it emits a `'close'` event instead of +`'end'`. + +## License + +combined-stream is licensed under the MIT license. diff --git a/node_modules/combined-stream/lib/combined_stream.js b/node_modules/combined-stream/lib/combined_stream.js new file mode 100644 index 0000000..125f097 --- /dev/null +++ b/node_modules/combined-stream/lib/combined_stream.js @@ -0,0 +1,208 @@ +var util = require('util'); +var Stream = require('stream').Stream; +var DelayedStream = require('delayed-stream'); + +module.exports = CombinedStream; +function CombinedStream() { + this.writable = false; + this.readable = true; + this.dataSize = 0; + this.maxDataSize = 2 * 1024 * 1024; + this.pauseStreams = true; + + this._released = false; + this._streams = []; + this._currentStream = null; + this._insideLoop = false; + this._pendingNext = false; +} +util.inherits(CombinedStream, Stream); + +CombinedStream.create = function(options) { + var combinedStream = new this(); + + options = options || {}; + for (var option in options) { + combinedStream[option] = options[option]; + } + + return combinedStream; +}; + +CombinedStream.isStreamLike = function(stream) { + return (typeof stream !== 'function') + && (typeof stream !== 'string') + && (typeof stream !== 'boolean') + && (typeof stream !== 'number') + && (!Buffer.isBuffer(stream)); +}; + +CombinedStream.prototype.append = function(stream) { + var isStreamLike = CombinedStream.isStreamLike(stream); + + if (isStreamLike) { + if (!(stream instanceof DelayedStream)) { + var newStream = DelayedStream.create(stream, { + maxDataSize: Infinity, + pauseStream: this.pauseStreams, + }); + stream.on('data', this._checkDataSize.bind(this)); + stream = newStream; + } + + this._handleErrors(stream); + + if (this.pauseStreams) { + stream.pause(); + } + } + + this._streams.push(stream); + return this; +}; + +CombinedStream.prototype.pipe = function(dest, options) { + Stream.prototype.pipe.call(this, dest, options); + this.resume(); + return dest; +}; + +CombinedStream.prototype._getNext = function() { + this._currentStream = null; + + if (this._insideLoop) { + this._pendingNext = true; + return; // defer call + } + + this._insideLoop = true; + try { + do { + this._pendingNext = false; + this._realGetNext(); + } while (this._pendingNext); + } finally { + this._insideLoop = false; + } +}; + +CombinedStream.prototype._realGetNext = function() { + var stream = this._streams.shift(); + + + if (typeof stream == 'undefined') { + this.end(); + return; + } + + if (typeof stream !== 'function') { + this._pipeNext(stream); + return; + } + + var getStream = stream; + getStream(function(stream) { + var isStreamLike = CombinedStream.isStreamLike(stream); + if (isStreamLike) { + stream.on('data', this._checkDataSize.bind(this)); + this._handleErrors(stream); + } + + this._pipeNext(stream); + }.bind(this)); +}; + +CombinedStream.prototype._pipeNext = function(stream) { + this._currentStream = stream; + + var isStreamLike = CombinedStream.isStreamLike(stream); + if (isStreamLike) { + stream.on('end', this._getNext.bind(this)); + stream.pipe(this, {end: false}); + return; + } + + var value = stream; + this.write(value); + this._getNext(); +}; + +CombinedStream.prototype._handleErrors = function(stream) { + var self = this; + stream.on('error', function(err) { + self._emitError(err); + }); +}; + +CombinedStream.prototype.write = function(data) { + this.emit('data', data); +}; + +CombinedStream.prototype.pause = function() { + if (!this.pauseStreams) { + return; + } + + if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause(); + this.emit('pause'); +}; + +CombinedStream.prototype.resume = function() { + if (!this._released) { + this._released = true; + this.writable = true; + this._getNext(); + } + + if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume(); + this.emit('resume'); +}; + +CombinedStream.prototype.end = function() { + this._reset(); + this.emit('end'); +}; + +CombinedStream.prototype.destroy = function() { + this._reset(); + this.emit('close'); +}; + +CombinedStream.prototype._reset = function() { + this.writable = false; + this._streams = []; + this._currentStream = null; +}; + +CombinedStream.prototype._checkDataSize = function() { + this._updateDataSize(); + if (this.dataSize <= this.maxDataSize) { + return; + } + + var message = + 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'; + this._emitError(new Error(message)); +}; + +CombinedStream.prototype._updateDataSize = function() { + this.dataSize = 0; + + var self = this; + this._streams.forEach(function(stream) { + if (!stream.dataSize) { + return; + } + + self.dataSize += stream.dataSize; + }); + + if (this._currentStream && this._currentStream.dataSize) { + this.dataSize += this._currentStream.dataSize; + } +}; + +CombinedStream.prototype._emitError = function(err) { + this._reset(); + this.emit('error', err); +}; diff --git a/node_modules/combined-stream/package.json b/node_modules/combined-stream/package.json new file mode 100644 index 0000000..6982b6d --- /dev/null +++ b/node_modules/combined-stream/package.json @@ -0,0 +1,25 @@ +{ + "author": "Felix Geisendörfer (http://debuggable.com/)", + "name": "combined-stream", + "description": "A stream that emits multiple other streams one after another.", + "version": "1.0.8", + "homepage": "https://github.com/felixge/node-combined-stream", + "repository": { + "type": "git", + "url": "git://github.com/felixge/node-combined-stream.git" + }, + "main": "./lib/combined_stream", + "scripts": { + "test": "node test/run.js" + }, + "engines": { + "node": ">= 0.8" + }, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "devDependencies": { + "far": "~0.0.7" + }, + "license": "MIT" +} diff --git a/node_modules/combined-stream/yarn.lock b/node_modules/combined-stream/yarn.lock new file mode 100644 index 0000000..7edf418 --- /dev/null +++ b/node_modules/combined-stream/yarn.lock @@ -0,0 +1,17 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +far@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/far/-/far-0.0.7.tgz#01c1fd362bcd26ce9cf161af3938aa34619f79a7" + dependencies: + oop "0.0.3" + +oop@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401" diff --git a/node_modules/cross-fetch/LICENSE b/node_modules/cross-fetch/LICENSE new file mode 100644 index 0000000..9198b86 --- /dev/null +++ b/node_modules/cross-fetch/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Leonardo Quixadá + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/cross-fetch/README.md b/node_modules/cross-fetch/README.md new file mode 100644 index 0000000..92434d5 --- /dev/null +++ b/node_modules/cross-fetch/README.md @@ -0,0 +1,169 @@ +cross-fetch
+[![NPM Version](https://img.shields.io/npm/v/cross-fetch.svg?branch=main)](https://www.npmjs.com/package/cross-fetch) +[![Downloads Per Week](https://img.shields.io/npm/dw/cross-fetch.svg?color=blue)](https://www.npmjs.com/package/cross-fetch) +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) +![CI](https://github.com/lquixada/cross-fetch/workflows/CI/badge.svg) +[![codecov](https://codecov.io/gh/lquixada/cross-fetch/branch/main/graph/badge.svg)](https://codecov.io/gh/lquixada/cross-fetch) +================ + +Universal WHATWG Fetch API for Node, Browsers and React Native. The scenario that cross-fetch really shines is when the same JavaScript codebase needs to run on different platforms. + +- **Platform agnostic**: browsers, Node or React Native +- **Optional polyfill**: it's up to you if something is going to be added to the global object or not +- **Simple interface**: no instantiation, no configuration and no extra dependency +- **WHATWG compliant**: it works the same way wherever your code runs +- **TypeScript support**: better development experience with types. + + +* * * + +## Table of Contents + +- [Install](#install) +- [Usage](#usage) +- [Demo & API](#demo--api) +- [FAQ](#faq) +- [Thanks](#thanks) +- [License](#license) +- [Author](#author) + +* * * + +## Install + +```sh +npm install --save cross-fetch +``` + +As a [ponyfill](https://github.com/sindresorhus/ponyfill): + +```javascript +// Using ES6 modules with Babel or TypeScript +import fetch from 'cross-fetch'; + +// Using CommonJS modules +const fetch = require('cross-fetch'); +``` + +As a polyfill: + +```javascript +// Using ES6 modules +import 'cross-fetch/polyfill'; + +// Using CommonJS modules +require('cross-fetch/polyfill'); +``` + + +The CDN build is also available on unpkg: + +```html + +``` + +This adds the fetch function to the window object. Note that this is not UMD compatible. + + +* * * + +## Usage + +With [promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise): + +```javascript +import fetch from 'cross-fetch'; +// Or just: import 'cross-fetch/polyfill'; + +fetch('//api.github.com/users/lquixada') + .then(res => { + if (res.status >= 400) { + throw new Error("Bad response from server"); + } + return res.json(); + }) + .then(user => { + console.log(user); + }) + .catch(err => { + console.error(err); + }); +``` + +With [async/await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function): + +```javascript +import fetch from 'cross-fetch'; +// Or just: import 'cross-fetch/polyfill'; + +(async () => { + try { + const res = await fetch('//api.github.com/users/lquixada'); + + if (res.status >= 400) { + throw new Error("Bad response from server"); + } + + const user = await res.json(); + + console.log(user); + } catch (err) { + console.error(err); + } +})(); +``` + +> ⚠️ **Warning**: If you're in an environment that doesn't support Promises such as Internet Explorer, you must install an ES6 Promise compatible polyfill. [es6-promise](https://github.com/jakearchibald/es6-promise) is suggested. + + +## Demo & API + +You can find a comprehensive doc at [Github's fetch](https://github.github.io/fetch/) page. If you want to play with cross-fetch, check our [**JSFiddle playground**](https://jsfiddle.net/lquixada/3ypqgacp/). + +> **Tip**: Run the fiddle on various browsers and with different settings (for instance: cross-domain requests, wrong urls or text requests). Don't forget to open the console in the test suite page and play around. + + +## FAQ + +#### Yet another fetch library? + +I did a lot of research in order to find a fetch library that could be simple, cross-platform and provide polyfill as an option. There's a plethora of libs out there but none could match those requirements. + + +#### Why not isomorphic-fetch? + +My preferred library used to be [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch) but it has this [bug](https://github.com/matthew-andrews/isomorphic-fetch/issues/125) that prevents it from running in a react native environment. It seems unlikely to be fixed since there haven't been any new commits to it since 2016. That means dependencies are outdated as well. + + +#### Why polyfill might not be a good idea? + +In a word? Risk. If the spec changes in the future, it might be problematic to debug. Read more about it on [sindresorhus's ponyfill](https://github.com/sindresorhus/ponyfill#how-are-ponyfills-better-than-polyfills) page. It's up to you if you're fine with it or not. + + +#### How does cross-fetch work? + +Just like isomorphic-fetch, it is just a proxy. If you're in node, it delivers you the [node-fetch](https://github.com/bitinn/node-fetch/) library, if you're in a browser or React Native, it delivers you the github's [whatwg-fetch](https://github.com/github/fetch/). The same strategy applies whether you're using polyfill or ponyfill. + + +## Who's Using It? + +|[![The New York Times](./docs/images/logo-nytimes.png)](https://www.nytimes.com/)|[![Apollo GraphQL](./docs/images/logo-apollo.png)](https://github.com/apollographql/apollo-client/)|[![Facebook](./docs/images/logo-facebook.png)](https://github.com/facebook/fbjs/)|[![Swagger](./docs/images/logo-swagger.png)](https://swagger.io/)|[![VulcanJS](./docs/images/logo-vulcanjs.png)](http://vulcanjs.org)|[![graphql-request](./docs/images/logo-graphql-request.png)](https://github.com/prisma/graphql-request)| +|:---:|:---:|:---:|:---:|:---:|:---:| +|The New York Times|Apollo GraphQL|Facebook|Swagger|VulcanJS|graphql-request| + + +## Thanks + +Heavily inspired by the works of [matthew-andrews](https://github.com/matthew-andrews). Kudos to him! + + +## License + +cross-fetch is licensed under the [MIT license](https://github.com/lquixada/cross-fetch/blob/main/LICENSE) © [Leonardo Quixadá](https://twitter.com/lquixada/) + + +## Author + +|[![@lquixada](https://avatars0.githubusercontent.com/u/195494?v=4&s=96)](https://github.com/lquixada)| +|:---:| +|[@lquixada](http://www.github.com/lquixada)| diff --git a/node_modules/cross-fetch/dist/browser-polyfill.js b/node_modules/cross-fetch/dist/browser-polyfill.js new file mode 100644 index 0000000..11ccad1 --- /dev/null +++ b/node_modules/cross-fetch/dist/browser-polyfill.js @@ -0,0 +1,532 @@ +(function(self) { + +var irrelevant = (function (exports) { + + var support = { + searchParams: 'URLSearchParams' in self, + iterable: 'Symbol' in self && 'iterator' in Symbol, + blob: + 'FileReader' in self && + 'Blob' in self && + (function() { + try { + new Blob(); + return true + } catch (e) { + return false + } + })(), + formData: 'FormData' in self, + arrayBuffer: 'ArrayBuffer' in self + }; + + function isDataView(obj) { + return obj && DataView.prototype.isPrototypeOf(obj) + } + + if (support.arrayBuffer) { + var viewClasses = [ + '[object Int8Array]', + '[object Uint8Array]', + '[object Uint8ClampedArray]', + '[object Int16Array]', + '[object Uint16Array]', + '[object Int32Array]', + '[object Uint32Array]', + '[object Float32Array]', + '[object Float64Array]' + ]; + + var isArrayBufferView = + ArrayBuffer.isView || + function(obj) { + return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 + }; + } + + function normalizeName(name) { + if (typeof name !== 'string') { + name = String(name); + } + if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) { + throw new TypeError('Invalid character in header field name') + } + return name.toLowerCase() + } + + function normalizeValue(value) { + if (typeof value !== 'string') { + value = String(value); + } + return value + } + + // Build a destructive iterator for the value list + function iteratorFor(items) { + var iterator = { + next: function() { + var value = items.shift(); + return {done: value === undefined, value: value} + } + }; + + if (support.iterable) { + iterator[Symbol.iterator] = function() { + return iterator + }; + } + + return iterator + } + + function Headers(headers) { + this.map = {}; + + if (headers instanceof Headers) { + headers.forEach(function(value, name) { + this.append(name, value); + }, this); + } else if (Array.isArray(headers)) { + headers.forEach(function(header) { + this.append(header[0], header[1]); + }, this); + } else if (headers) { + Object.getOwnPropertyNames(headers).forEach(function(name) { + this.append(name, headers[name]); + }, this); + } + } + + Headers.prototype.append = function(name, value) { + name = normalizeName(name); + value = normalizeValue(value); + var oldValue = this.map[name]; + this.map[name] = oldValue ? oldValue + ', ' + value : value; + }; + + Headers.prototype['delete'] = function(name) { + delete this.map[normalizeName(name)]; + }; + + Headers.prototype.get = function(name) { + name = normalizeName(name); + return this.has(name) ? this.map[name] : null + }; + + Headers.prototype.has = function(name) { + return this.map.hasOwnProperty(normalizeName(name)) + }; + + Headers.prototype.set = function(name, value) { + this.map[normalizeName(name)] = normalizeValue(value); + }; + + Headers.prototype.forEach = function(callback, thisArg) { + for (var name in this.map) { + if (this.map.hasOwnProperty(name)) { + callback.call(thisArg, this.map[name], name, this); + } + } + }; + + Headers.prototype.keys = function() { + var items = []; + this.forEach(function(value, name) { + items.push(name); + }); + return iteratorFor(items) + }; + + Headers.prototype.values = function() { + var items = []; + this.forEach(function(value) { + items.push(value); + }); + return iteratorFor(items) + }; + + Headers.prototype.entries = function() { + var items = []; + this.forEach(function(value, name) { + items.push([name, value]); + }); + return iteratorFor(items) + }; + + if (support.iterable) { + Headers.prototype[Symbol.iterator] = Headers.prototype.entries; + } + + function consumed(body) { + if (body.bodyUsed) { + return Promise.reject(new TypeError('Already read')) + } + body.bodyUsed = true; + } + + function fileReaderReady(reader) { + return new Promise(function(resolve, reject) { + reader.onload = function() { + resolve(reader.result); + }; + reader.onerror = function() { + reject(reader.error); + }; + }) + } + + function readBlobAsArrayBuffer(blob) { + var reader = new FileReader(); + var promise = fileReaderReady(reader); + reader.readAsArrayBuffer(blob); + return promise + } + + function readBlobAsText(blob) { + var reader = new FileReader(); + var promise = fileReaderReady(reader); + reader.readAsText(blob); + return promise + } + + function readArrayBufferAsText(buf) { + var view = new Uint8Array(buf); + var chars = new Array(view.length); + + for (var i = 0; i < view.length; i++) { + chars[i] = String.fromCharCode(view[i]); + } + return chars.join('') + } + + function bufferClone(buf) { + if (buf.slice) { + return buf.slice(0) + } else { + var view = new Uint8Array(buf.byteLength); + view.set(new Uint8Array(buf)); + return view.buffer + } + } + + function Body() { + this.bodyUsed = false; + + this._initBody = function(body) { + this._bodyInit = body; + if (!body) { + this._bodyText = ''; + } else if (typeof body === 'string') { + this._bodyText = body; + } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { + this._bodyBlob = body; + } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { + this._bodyFormData = body; + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this._bodyText = body.toString(); + } else if (support.arrayBuffer && support.blob && isDataView(body)) { + this._bodyArrayBuffer = bufferClone(body.buffer); + // IE 10-11 can't handle a DataView body. + this._bodyInit = new Blob([this._bodyArrayBuffer]); + } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { + this._bodyArrayBuffer = bufferClone(body); + } else { + this._bodyText = body = Object.prototype.toString.call(body); + } + + if (!this.headers.get('content-type')) { + if (typeof body === 'string') { + this.headers.set('content-type', 'text/plain;charset=UTF-8'); + } else if (this._bodyBlob && this._bodyBlob.type) { + this.headers.set('content-type', this._bodyBlob.type); + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); + } + } + }; + + if (support.blob) { + this.blob = function() { + var rejected = consumed(this); + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return Promise.resolve(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(new Blob([this._bodyArrayBuffer])) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as blob') + } else { + return Promise.resolve(new Blob([this._bodyText])) + } + }; + + this.arrayBuffer = function() { + if (this._bodyArrayBuffer) { + return consumed(this) || Promise.resolve(this._bodyArrayBuffer) + } else { + return this.blob().then(readBlobAsArrayBuffer) + } + }; + } + + this.text = function() { + var rejected = consumed(this); + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return readBlobAsText(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as text') + } else { + return Promise.resolve(this._bodyText) + } + }; + + if (support.formData) { + this.formData = function() { + return this.text().then(decode) + }; + } + + this.json = function() { + return this.text().then(JSON.parse) + }; + + return this + } + + // HTTP methods whose capitalization should be normalized + var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']; + + function normalizeMethod(method) { + var upcased = method.toUpperCase(); + return methods.indexOf(upcased) > -1 ? upcased : method + } + + function Request(input, options) { + options = options || {}; + var body = options.body; + + if (input instanceof Request) { + if (input.bodyUsed) { + throw new TypeError('Already read') + } + this.url = input.url; + this.credentials = input.credentials; + if (!options.headers) { + this.headers = new Headers(input.headers); + } + this.method = input.method; + this.mode = input.mode; + this.signal = input.signal; + if (!body && input._bodyInit != null) { + body = input._bodyInit; + input.bodyUsed = true; + } + } else { + this.url = String(input); + } + + this.credentials = options.credentials || this.credentials || 'same-origin'; + if (options.headers || !this.headers) { + this.headers = new Headers(options.headers); + } + this.method = normalizeMethod(options.method || this.method || 'GET'); + this.mode = options.mode || this.mode || null; + this.signal = options.signal || this.signal; + this.referrer = null; + + if ((this.method === 'GET' || this.method === 'HEAD') && body) { + throw new TypeError('Body not allowed for GET or HEAD requests') + } + this._initBody(body); + } + + Request.prototype.clone = function() { + return new Request(this, {body: this._bodyInit}) + }; + + function decode(body) { + var form = new FormData(); + body + .trim() + .split('&') + .forEach(function(bytes) { + if (bytes) { + var split = bytes.split('='); + var name = split.shift().replace(/\+/g, ' '); + var value = split.join('=').replace(/\+/g, ' '); + form.append(decodeURIComponent(name), decodeURIComponent(value)); + } + }); + return form + } + + function parseHeaders(rawHeaders) { + var headers = new Headers(); + // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space + // https://tools.ietf.org/html/rfc7230#section-3.2 + var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' '); + preProcessedHeaders.split(/\r?\n/).forEach(function(line) { + var parts = line.split(':'); + var key = parts.shift().trim(); + if (key) { + var value = parts.join(':').trim(); + headers.append(key, value); + } + }); + return headers + } + + Body.call(Request.prototype); + + function Response(bodyInit, options) { + if (!options) { + options = {}; + } + + this.type = 'default'; + this.status = options.status === undefined ? 200 : options.status; + this.ok = this.status >= 200 && this.status < 300; + this.statusText = 'statusText' in options ? options.statusText : 'OK'; + this.headers = new Headers(options.headers); + this.url = options.url || ''; + this._initBody(bodyInit); + } + + Body.call(Response.prototype); + + Response.prototype.clone = function() { + return new Response(this._bodyInit, { + status: this.status, + statusText: this.statusText, + headers: new Headers(this.headers), + url: this.url + }) + }; + + Response.error = function() { + var response = new Response(null, {status: 0, statusText: ''}); + response.type = 'error'; + return response + }; + + var redirectStatuses = [301, 302, 303, 307, 308]; + + Response.redirect = function(url, status) { + if (redirectStatuses.indexOf(status) === -1) { + throw new RangeError('Invalid status code') + } + + return new Response(null, {status: status, headers: {location: url}}) + }; + + exports.DOMException = self.DOMException; + try { + new exports.DOMException(); + } catch (err) { + exports.DOMException = function(message, name) { + this.message = message; + this.name = name; + var error = Error(message); + this.stack = error.stack; + }; + exports.DOMException.prototype = Object.create(Error.prototype); + exports.DOMException.prototype.constructor = exports.DOMException; + } + + function fetch(input, init) { + return new Promise(function(resolve, reject) { + var request = new Request(input, init); + + if (request.signal && request.signal.aborted) { + return reject(new exports.DOMException('Aborted', 'AbortError')) + } + + var xhr = new XMLHttpRequest(); + + function abortXhr() { + xhr.abort(); + } + + xhr.onload = function() { + var options = { + status: xhr.status, + statusText: xhr.statusText, + headers: parseHeaders(xhr.getAllResponseHeaders() || '') + }; + options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL'); + var body = 'response' in xhr ? xhr.response : xhr.responseText; + resolve(new Response(body, options)); + }; + + xhr.onerror = function() { + reject(new TypeError('Network request failed')); + }; + + xhr.ontimeout = function() { + reject(new TypeError('Network request failed')); + }; + + xhr.onabort = function() { + reject(new exports.DOMException('Aborted', 'AbortError')); + }; + + xhr.open(request.method, request.url, true); + + if (request.credentials === 'include') { + xhr.withCredentials = true; + } else if (request.credentials === 'omit') { + xhr.withCredentials = false; + } + + if ('responseType' in xhr && support.blob) { + xhr.responseType = 'blob'; + } + + request.headers.forEach(function(value, name) { + xhr.setRequestHeader(name, value); + }); + + if (request.signal) { + request.signal.addEventListener('abort', abortXhr); + + xhr.onreadystatechange = function() { + // DONE (success or failure) + if (xhr.readyState === 4) { + request.signal.removeEventListener('abort', abortXhr); + } + }; + } + + xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit); + }) + } + + fetch.polyfill = true; + + if (!self.fetch) { + self.fetch = fetch; + self.Headers = Headers; + self.Request = Request; + self.Response = Response; + } + + exports.Headers = Headers; + exports.Request = Request; + exports.Response = Response; + exports.fetch = fetch; + + Object.defineProperty(exports, '__esModule', { value: true }); + + return exports; + +})({}); +})(typeof self !== 'undefined' ? self : this); diff --git a/node_modules/cross-fetch/dist/browser-ponyfill.js b/node_modules/cross-fetch/dist/browser-ponyfill.js new file mode 100644 index 0000000..f216aa3 --- /dev/null +++ b/node_modules/cross-fetch/dist/browser-ponyfill.js @@ -0,0 +1,554 @@ +var global = typeof self !== 'undefined' ? self : this; +var __self__ = (function () { +function F() { +this.fetch = false; +this.DOMException = global.DOMException +} +F.prototype = global; +return new F(); +})(); +(function(self) { + +var irrelevant = (function (exports) { + + var support = { + searchParams: 'URLSearchParams' in self, + iterable: 'Symbol' in self && 'iterator' in Symbol, + blob: + 'FileReader' in self && + 'Blob' in self && + (function() { + try { + new Blob(); + return true + } catch (e) { + return false + } + })(), + formData: 'FormData' in self, + arrayBuffer: 'ArrayBuffer' in self + }; + + function isDataView(obj) { + return obj && DataView.prototype.isPrototypeOf(obj) + } + + if (support.arrayBuffer) { + var viewClasses = [ + '[object Int8Array]', + '[object Uint8Array]', + '[object Uint8ClampedArray]', + '[object Int16Array]', + '[object Uint16Array]', + '[object Int32Array]', + '[object Uint32Array]', + '[object Float32Array]', + '[object Float64Array]' + ]; + + var isArrayBufferView = + ArrayBuffer.isView || + function(obj) { + return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 + }; + } + + function normalizeName(name) { + if (typeof name !== 'string') { + name = String(name); + } + if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) { + throw new TypeError('Invalid character in header field name') + } + return name.toLowerCase() + } + + function normalizeValue(value) { + if (typeof value !== 'string') { + value = String(value); + } + return value + } + + // Build a destructive iterator for the value list + function iteratorFor(items) { + var iterator = { + next: function() { + var value = items.shift(); + return {done: value === undefined, value: value} + } + }; + + if (support.iterable) { + iterator[Symbol.iterator] = function() { + return iterator + }; + } + + return iterator + } + + function Headers(headers) { + this.map = {}; + + if (headers instanceof Headers) { + headers.forEach(function(value, name) { + this.append(name, value); + }, this); + } else if (Array.isArray(headers)) { + headers.forEach(function(header) { + this.append(header[0], header[1]); + }, this); + } else if (headers) { + Object.getOwnPropertyNames(headers).forEach(function(name) { + this.append(name, headers[name]); + }, this); + } + } + + Headers.prototype.append = function(name, value) { + name = normalizeName(name); + value = normalizeValue(value); + var oldValue = this.map[name]; + this.map[name] = oldValue ? oldValue + ', ' + value : value; + }; + + Headers.prototype['delete'] = function(name) { + delete this.map[normalizeName(name)]; + }; + + Headers.prototype.get = function(name) { + name = normalizeName(name); + return this.has(name) ? this.map[name] : null + }; + + Headers.prototype.has = function(name) { + return this.map.hasOwnProperty(normalizeName(name)) + }; + + Headers.prototype.set = function(name, value) { + this.map[normalizeName(name)] = normalizeValue(value); + }; + + Headers.prototype.forEach = function(callback, thisArg) { + for (var name in this.map) { + if (this.map.hasOwnProperty(name)) { + callback.call(thisArg, this.map[name], name, this); + } + } + }; + + Headers.prototype.keys = function() { + var items = []; + this.forEach(function(value, name) { + items.push(name); + }); + return iteratorFor(items) + }; + + Headers.prototype.values = function() { + var items = []; + this.forEach(function(value) { + items.push(value); + }); + return iteratorFor(items) + }; + + Headers.prototype.entries = function() { + var items = []; + this.forEach(function(value, name) { + items.push([name, value]); + }); + return iteratorFor(items) + }; + + if (support.iterable) { + Headers.prototype[Symbol.iterator] = Headers.prototype.entries; + } + + function consumed(body) { + if (body.bodyUsed) { + return Promise.reject(new TypeError('Already read')) + } + body.bodyUsed = true; + } + + function fileReaderReady(reader) { + return new Promise(function(resolve, reject) { + reader.onload = function() { + resolve(reader.result); + }; + reader.onerror = function() { + reject(reader.error); + }; + }) + } + + function readBlobAsArrayBuffer(blob) { + var reader = new FileReader(); + var promise = fileReaderReady(reader); + reader.readAsArrayBuffer(blob); + return promise + } + + function readBlobAsText(blob) { + var reader = new FileReader(); + var promise = fileReaderReady(reader); + reader.readAsText(blob); + return promise + } + + function readArrayBufferAsText(buf) { + var view = new Uint8Array(buf); + var chars = new Array(view.length); + + for (var i = 0; i < view.length; i++) { + chars[i] = String.fromCharCode(view[i]); + } + return chars.join('') + } + + function bufferClone(buf) { + if (buf.slice) { + return buf.slice(0) + } else { + var view = new Uint8Array(buf.byteLength); + view.set(new Uint8Array(buf)); + return view.buffer + } + } + + function Body() { + this.bodyUsed = false; + + this._initBody = function(body) { + this._bodyInit = body; + if (!body) { + this._bodyText = ''; + } else if (typeof body === 'string') { + this._bodyText = body; + } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { + this._bodyBlob = body; + } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { + this._bodyFormData = body; + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this._bodyText = body.toString(); + } else if (support.arrayBuffer && support.blob && isDataView(body)) { + this._bodyArrayBuffer = bufferClone(body.buffer); + // IE 10-11 can't handle a DataView body. + this._bodyInit = new Blob([this._bodyArrayBuffer]); + } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { + this._bodyArrayBuffer = bufferClone(body); + } else { + this._bodyText = body = Object.prototype.toString.call(body); + } + + if (!this.headers.get('content-type')) { + if (typeof body === 'string') { + this.headers.set('content-type', 'text/plain;charset=UTF-8'); + } else if (this._bodyBlob && this._bodyBlob.type) { + this.headers.set('content-type', this._bodyBlob.type); + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); + } + } + }; + + if (support.blob) { + this.blob = function() { + var rejected = consumed(this); + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return Promise.resolve(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(new Blob([this._bodyArrayBuffer])) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as blob') + } else { + return Promise.resolve(new Blob([this._bodyText])) + } + }; + + this.arrayBuffer = function() { + if (this._bodyArrayBuffer) { + return consumed(this) || Promise.resolve(this._bodyArrayBuffer) + } else { + return this.blob().then(readBlobAsArrayBuffer) + } + }; + } + + this.text = function() { + var rejected = consumed(this); + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return readBlobAsText(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as text') + } else { + return Promise.resolve(this._bodyText) + } + }; + + if (support.formData) { + this.formData = function() { + return this.text().then(decode) + }; + } + + this.json = function() { + return this.text().then(JSON.parse) + }; + + return this + } + + // HTTP methods whose capitalization should be normalized + var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']; + + function normalizeMethod(method) { + var upcased = method.toUpperCase(); + return methods.indexOf(upcased) > -1 ? upcased : method + } + + function Request(input, options) { + options = options || {}; + var body = options.body; + + if (input instanceof Request) { + if (input.bodyUsed) { + throw new TypeError('Already read') + } + this.url = input.url; + this.credentials = input.credentials; + if (!options.headers) { + this.headers = new Headers(input.headers); + } + this.method = input.method; + this.mode = input.mode; + this.signal = input.signal; + if (!body && input._bodyInit != null) { + body = input._bodyInit; + input.bodyUsed = true; + } + } else { + this.url = String(input); + } + + this.credentials = options.credentials || this.credentials || 'same-origin'; + if (options.headers || !this.headers) { + this.headers = new Headers(options.headers); + } + this.method = normalizeMethod(options.method || this.method || 'GET'); + this.mode = options.mode || this.mode || null; + this.signal = options.signal || this.signal; + this.referrer = null; + + if ((this.method === 'GET' || this.method === 'HEAD') && body) { + throw new TypeError('Body not allowed for GET or HEAD requests') + } + this._initBody(body); + } + + Request.prototype.clone = function() { + return new Request(this, {body: this._bodyInit}) + }; + + function decode(body) { + var form = new FormData(); + body + .trim() + .split('&') + .forEach(function(bytes) { + if (bytes) { + var split = bytes.split('='); + var name = split.shift().replace(/\+/g, ' '); + var value = split.join('=').replace(/\+/g, ' '); + form.append(decodeURIComponent(name), decodeURIComponent(value)); + } + }); + return form + } + + function parseHeaders(rawHeaders) { + var headers = new Headers(); + // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space + // https://tools.ietf.org/html/rfc7230#section-3.2 + var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' '); + preProcessedHeaders.split(/\r?\n/).forEach(function(line) { + var parts = line.split(':'); + var key = parts.shift().trim(); + if (key) { + var value = parts.join(':').trim(); + headers.append(key, value); + } + }); + return headers + } + + Body.call(Request.prototype); + + function Response(bodyInit, options) { + if (!options) { + options = {}; + } + + this.type = 'default'; + this.status = options.status === undefined ? 200 : options.status; + this.ok = this.status >= 200 && this.status < 300; + this.statusText = 'statusText' in options ? options.statusText : 'OK'; + this.headers = new Headers(options.headers); + this.url = options.url || ''; + this._initBody(bodyInit); + } + + Body.call(Response.prototype); + + Response.prototype.clone = function() { + return new Response(this._bodyInit, { + status: this.status, + statusText: this.statusText, + headers: new Headers(this.headers), + url: this.url + }) + }; + + Response.error = function() { + var response = new Response(null, {status: 0, statusText: ''}); + response.type = 'error'; + return response + }; + + var redirectStatuses = [301, 302, 303, 307, 308]; + + Response.redirect = function(url, status) { + if (redirectStatuses.indexOf(status) === -1) { + throw new RangeError('Invalid status code') + } + + return new Response(null, {status: status, headers: {location: url}}) + }; + + exports.DOMException = self.DOMException; + try { + new exports.DOMException(); + } catch (err) { + exports.DOMException = function(message, name) { + this.message = message; + this.name = name; + var error = Error(message); + this.stack = error.stack; + }; + exports.DOMException.prototype = Object.create(Error.prototype); + exports.DOMException.prototype.constructor = exports.DOMException; + } + + function fetch(input, init) { + return new Promise(function(resolve, reject) { + var request = new Request(input, init); + + if (request.signal && request.signal.aborted) { + return reject(new exports.DOMException('Aborted', 'AbortError')) + } + + var xhr = new XMLHttpRequest(); + + function abortXhr() { + xhr.abort(); + } + + xhr.onload = function() { + var options = { + status: xhr.status, + statusText: xhr.statusText, + headers: parseHeaders(xhr.getAllResponseHeaders() || '') + }; + options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL'); + var body = 'response' in xhr ? xhr.response : xhr.responseText; + resolve(new Response(body, options)); + }; + + xhr.onerror = function() { + reject(new TypeError('Network request failed')); + }; + + xhr.ontimeout = function() { + reject(new TypeError('Network request failed')); + }; + + xhr.onabort = function() { + reject(new exports.DOMException('Aborted', 'AbortError')); + }; + + xhr.open(request.method, request.url, true); + + if (request.credentials === 'include') { + xhr.withCredentials = true; + } else if (request.credentials === 'omit') { + xhr.withCredentials = false; + } + + if ('responseType' in xhr && support.blob) { + xhr.responseType = 'blob'; + } + + request.headers.forEach(function(value, name) { + xhr.setRequestHeader(name, value); + }); + + if (request.signal) { + request.signal.addEventListener('abort', abortXhr); + + xhr.onreadystatechange = function() { + // DONE (success or failure) + if (xhr.readyState === 4) { + request.signal.removeEventListener('abort', abortXhr); + } + }; + } + + xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit); + }) + } + + fetch.polyfill = true; + + if (!self.fetch) { + self.fetch = fetch; + self.Headers = Headers; + self.Request = Request; + self.Response = Response; + } + + exports.Headers = Headers; + exports.Request = Request; + exports.Response = Response; + exports.fetch = fetch; + + Object.defineProperty(exports, '__esModule', { value: true }); + + return exports; + +})({}); +})(__self__); +__self__.fetch.ponyfill = true; +// Remove "polyfill" property added by whatwg-fetch +delete __self__.fetch.polyfill; +// Choose between native implementation (global) or custom implementation (__self__) +// var ctx = global.fetch ? global : __self__; +var ctx = __self__; // this line disable service worker support temporarily +exports = ctx.fetch // To enable: import fetch from 'cross-fetch' +exports.default = ctx.fetch // For TypeScript consumers without esModuleInterop. +exports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch' +exports.Headers = ctx.Headers +exports.Request = ctx.Request +exports.Response = ctx.Response +module.exports = exports diff --git a/node_modules/cross-fetch/dist/cross-fetch.js b/node_modules/cross-fetch/dist/cross-fetch.js new file mode 100644 index 0000000..865dd5d --- /dev/null +++ b/node_modules/cross-fetch/dist/cross-fetch.js @@ -0,0 +1,2 @@ +!function(t){!function(e){var r="URLSearchParams"in t,o="Symbol"in t&&"iterator"in Symbol,n="FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),i="FormData"in t,s="ArrayBuffer"in t;if(s)var a=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],h=ArrayBuffer.isView||function(t){return t&&a.indexOf(Object.prototype.toString.call(t))>-1};function u(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return t.toLowerCase()}function d(t){return"string"!=typeof t&&(t=String(t)),t}function f(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return o&&(e[Symbol.iterator]=function(){return e}),e}function c(t){this.map={},t instanceof c?t.forEach((function(t,e){this.append(e,t)}),this):Array.isArray(t)?t.forEach((function(t){this.append(t[0],t[1])}),this):t&&Object.getOwnPropertyNames(t).forEach((function(e){this.append(e,t[e])}),this)}function p(t){if(t.bodyUsed)return Promise.reject(new TypeError("Already read"));t.bodyUsed=!0}function y(t){return new Promise((function(e,r){t.onload=function(){e(t.result)},t.onerror=function(){r(t.error)}}))}function l(t){var e=new FileReader,r=y(e);return e.readAsArrayBuffer(t),r}function b(t){if(t.slice)return t.slice(0);var e=new Uint8Array(t.byteLength);return e.set(new Uint8Array(t)),e.buffer}function m(){return this.bodyUsed=!1,this._initBody=function(t){var e;this._bodyInit=t,t?"string"==typeof t?this._bodyText=t:n&&Blob.prototype.isPrototypeOf(t)?this._bodyBlob=t:i&&FormData.prototype.isPrototypeOf(t)?this._bodyFormData=t:r&&URLSearchParams.prototype.isPrototypeOf(t)?this._bodyText=t.toString():s&&n&&((e=t)&&DataView.prototype.isPrototypeOf(e))?(this._bodyArrayBuffer=b(t.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):s&&(ArrayBuffer.prototype.isPrototypeOf(t)||h(t))?this._bodyArrayBuffer=b(t):this._bodyText=t=Object.prototype.toString.call(t):this._bodyText="",this.headers.get("content-type")||("string"==typeof t?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):r&&URLSearchParams.prototype.isPrototypeOf(t)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},n&&(this.blob=function(){var t=p(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?p(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(l)}),this.text=function(){var t,e,r,o=p(this);if(o)return o;if(this._bodyBlob)return t=this._bodyBlob,e=new FileReader,r=y(e),e.readAsText(t),r;if(this._bodyArrayBuffer)return Promise.resolve(function(t){for(var e=new Uint8Array(t),r=new Array(e.length),o=0;o-1?o:r),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n)}function E(t){var e=new FormData;return t.trim().split("&").forEach((function(t){if(t){var r=t.split("="),o=r.shift().replace(/\+/g," "),n=r.join("=").replace(/\+/g," ");e.append(decodeURIComponent(o),decodeURIComponent(n))}})),e}function A(t,e){e||(e={}),this.type="default",this.status=void 0===e.status?200:e.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new c(e.headers),this.url=e.url||"",this._initBody(t)}v.prototype.clone=function(){return new v(this,{body:this._bodyInit})},m.call(v.prototype),m.call(A.prototype),A.prototype.clone=function(){return new A(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new c(this.headers),url:this.url})},A.error=function(){var t=new A(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];A.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new A(null,{status:e,headers:{location:t}})},e.DOMException=t.DOMException;try{new e.DOMException}catch(t){e.DOMException=function(t,e){this.message=t,this.name=e;var r=Error(t);this.stack=r.stack},e.DOMException.prototype=Object.create(Error.prototype),e.DOMException.prototype.constructor=e.DOMException}function g(t,r){return new Promise((function(o,i){var s=new v(t,r);if(s.signal&&s.signal.aborted)return i(new e.DOMException("Aborted","AbortError"));var a=new XMLHttpRequest;function h(){a.abort()}a.onload=function(){var t,e,r={status:a.status,statusText:a.statusText,headers:(t=a.getAllResponseHeaders()||"",e=new c,t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(t){var r=t.split(":"),o=r.shift().trim();if(o){var n=r.join(":").trim();e.append(o,n)}})),e)};r.url="responseURL"in a?a.responseURL:r.headers.get("X-Request-URL");var n="response"in a?a.response:a.responseText;o(new A(n,r))},a.onerror=function(){i(new TypeError("Network request failed"))},a.ontimeout=function(){i(new TypeError("Network request failed"))},a.onabort=function(){i(new e.DOMException("Aborted","AbortError"))},a.open(s.method,s.url,!0),"include"===s.credentials?a.withCredentials=!0:"omit"===s.credentials&&(a.withCredentials=!1),"responseType"in a&&n&&(a.responseType="blob"),s.headers.forEach((function(t,e){a.setRequestHeader(e,t)})),s.signal&&(s.signal.addEventListener("abort",h),a.onreadystatechange=function(){4===a.readyState&&s.signal.removeEventListener("abort",h)}),a.send(void 0===s._bodyInit?null:s._bodyInit)}))}g.polyfill=!0,t.fetch||(t.fetch=g,t.Headers=c,t.Request=v,t.Response=A),e.Headers=c,e.Request=v,e.Response=A,e.fetch=g,Object.defineProperty(e,"__esModule",{value:!0})}({})}("undefined"!=typeof self?self:this); +//# sourceMappingURL=cross-fetch.js.map diff --git a/node_modules/cross-fetch/dist/cross-fetch.js.map b/node_modules/cross-fetch/dist/cross-fetch.js.map new file mode 100644 index 0000000..ddcd1e8 --- /dev/null +++ b/node_modules/cross-fetch/dist/cross-fetch.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cross-fetch.js","sources":["../node_modules/whatwg-fetch/fetch.js"],"sourcesContent":["var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = self.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.onabort = function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!self.fetch) {\n self.fetch = fetch\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n}\n"],"names":["support","self","Symbol","Blob","e","viewClasses","isArrayBufferView","ArrayBuffer","isView","obj","indexOf","Object","prototype","toString","call","normalizeName","name","String","test","TypeError","toLowerCase","normalizeValue","value","iteratorFor","items","iterator","next","shift","done","undefined","Headers","headers","this","map","forEach","append","Array","isArray","header","getOwnPropertyNames","consumed","body","bodyUsed","Promise","reject","fileReaderReady","reader","resolve","onload","result","onerror","error","readBlobAsArrayBuffer","blob","FileReader","promise","readAsArrayBuffer","bufferClone","buf","slice","view","Uint8Array","byteLength","set","buffer","Body","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","FormData","_bodyFormData","URLSearchParams","DataView","_bodyArrayBuffer","get","type","rejected","Error","arrayBuffer","then","text","readAsText","chars","length","i","fromCharCode","join","readArrayBufferAsText","formData","decode","json","JSON","parse","oldValue","has","hasOwnProperty","callback","thisArg","keys","push","values","entries","methods","Request","input","options","method","upcased","url","credentials","mode","signal","toUpperCase","referrer","form","trim","split","bytes","replace","decodeURIComponent","Response","bodyInit","status","ok","statusText","clone","response","redirectStatuses","redirect","RangeError","location","DOMException","err","message","stack","create","constructor","fetch","init","request","aborted","xhr","XMLHttpRequest","abortXhr","abort","rawHeaders","getAllResponseHeaders","line","parts","key","responseURL","responseText","ontimeout","onabort","open","withCredentials","responseType","setRequestHeader","addEventListener","onreadystatechange","readyState","removeEventListener","send","polyfill"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/cross-fetch/dist/node-polyfill.js b/node_modules/cross-fetch/dist/node-polyfill.js new file mode 100644 index 0000000..d7b73d0 --- /dev/null +++ b/node_modules/cross-fetch/dist/node-polyfill.js @@ -0,0 +1,11 @@ +const fetchNode = require('./node-ponyfill') +const fetch = fetchNode.fetch.bind({}) + +fetch.polyfill = true + +if (!global.fetch) { + global.fetch = fetch + global.Response = fetchNode.Response + global.Headers = fetchNode.Headers + global.Request = fetchNode.Request +} diff --git a/node_modules/cross-fetch/dist/node-ponyfill.js b/node_modules/cross-fetch/dist/node-ponyfill.js new file mode 100644 index 0000000..e8b153f --- /dev/null +++ b/node_modules/cross-fetch/dist/node-ponyfill.js @@ -0,0 +1,22 @@ +const nodeFetch = require('node-fetch') +const realFetch = nodeFetch.default || nodeFetch + +const fetch = function (url, options) { + // Support schemaless URIs on the server for parity with the browser. + // Ex: //github.com/ -> https://github.com/ + if (/^\/\//.test(url)) { + url = 'https:' + url + } + return realFetch.call(this, url, options) +} + +fetch.ponyfill = true + +module.exports = exports = fetch +exports.fetch = fetch +exports.Headers = nodeFetch.Headers +exports.Request = nodeFetch.Request +exports.Response = nodeFetch.Response + +// Needed for TypeScript consumers without esModuleInterop. +exports.default = fetch diff --git a/node_modules/cross-fetch/dist/react-native-polyfill.js b/node_modules/cross-fetch/dist/react-native-polyfill.js new file mode 100644 index 0000000..57ad256 --- /dev/null +++ b/node_modules/cross-fetch/dist/react-native-polyfill.js @@ -0,0 +1,12 @@ +/*! + * VaporJS JavaScript Library v1.4.5 + * https://github.com/madrobby/vapor.js + * + * Copyright (c) 2010 Thomas Fuchs (http://script.aculo.us/thomas) + * Released under the MIT license + * https://github.com/madrobby/vapor.js/blob/master/MIT-LICENSE + * + * Date: 2019-05-25T03:04Z + */ + +// React Native already polyfills `fetch` so this code is intentionally handled to VaporJS. diff --git a/node_modules/cross-fetch/dist/react-native-ponyfill.js b/node_modules/cross-fetch/dist/react-native-ponyfill.js new file mode 100644 index 0000000..8e5baff --- /dev/null +++ b/node_modules/cross-fetch/dist/react-native-ponyfill.js @@ -0,0 +1,6 @@ +module.exports = global.fetch // To enable: import fetch from 'cross-fetch' +module.exports.default = global.fetch // For TypeScript consumers without esModuleInterop. +module.exports.fetch = global.fetch // To enable: import {fetch} from 'cross-fetch' +module.exports.Headers = global.Headers +module.exports.Request = global.Request +module.exports.Response = global.Response diff --git a/node_modules/cross-fetch/index.d.ts b/node_modules/cross-fetch/index.d.ts new file mode 100644 index 0000000..3c030c0 --- /dev/null +++ b/node_modules/cross-fetch/index.d.ts @@ -0,0 +1,14 @@ +/// + +declare const _fetch: typeof fetch; +declare const _Request: typeof Request; +declare const _Response: typeof Response; +declare const _Headers: typeof Headers; + +declare module "cross-fetch" { + export const fetch: typeof _fetch; + export const Request: typeof _Request; + export const Response: typeof _Response; + export const Headers: typeof _Headers; + export default fetch; +} diff --git a/node_modules/cross-fetch/package.json b/node_modules/cross-fetch/package.json new file mode 100644 index 0000000..4db780a --- /dev/null +++ b/node_modules/cross-fetch/package.json @@ -0,0 +1,129 @@ +{ + "name": "cross-fetch", + "version": "3.1.5", + "description": "Universal WHATWG Fetch API for Node, Browsers and React Native", + "homepage": "https://github.com/lquixada/cross-fetch", + "main": "dist/node-ponyfill.js", + "browser": "dist/browser-ponyfill.js", + "react-native": "dist/react-native-ponyfill.js", + "types": "index.d.ts", + "scripts": { + "prepare": "husky install" + }, + "lint-staged": { + "*.js": [ + "make build", + "standard --fix" + ] + }, + "standard": { + "env": [ + "mocha", + "browser" + ], + "globals": [ + "expect", + "assert", + "chai" + ], + "ignore": [ + "/dist/", + "bundle.js", + "test.js", + "test.*.js", + "api.spec.js", + "*.ts" + ] + }, + "mocha": { + "require": [ + "chai/register-expect", + "chai/register-assert" + ], + "check-leaks": true + }, + "nyc": { + "temp-dir": ".reports/.coverage" + }, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } + }, + "standard-version": { + "skip": { + "changelog": true + } + }, + "repository": { + "type": "git", + "url": "https://github.com/lquixada/cross-fetch.git" + }, + "author": "Leonardo Quixada ", + "license": "MIT", + "bugs": { + "url": "https://github.com/lquixada/cross-fetch/issues" + }, + "dependencies": { + "node-fetch": "2.6.7" + }, + "devDependencies": { + "@commitlint/cli": "12.0.1", + "@commitlint/config-conventional": "12.0.1", + "@types/chai": "4.2.22", + "@types/mocha": "8.2.2", + "@types/node": "14.14.37", + "body-parser": "1.19.0", + "chai": "4.3.4", + "codecov": "3.8.3", + "cz-conventional-changelog": "3.3.0", + "express": "4.17.1", + "husky": "6.0.0", + "lint-staged": "10.5.4", + "mocha": "8.3.2", + "mocha-headless-chrome": "3.1.0", + "nock": "13.1.3", + "nyc": "15.1.0", + "open-cli": "6.0.1", + "rollup": "2.58.0", + "rollup-plugin-copy": "3.4.0", + "rollup-plugin-terser": "7.0.2", + "semver": "7.3.5", + "serve-index": "1.9.1", + "standard": "16.0.4", + "standard-version": "9.3.1", + "typescript": "4.4.4", + "webpack": "5.58.2", + "webpack-cli": "4.9.0", + "whatwg-fetch": "3.0.0", + "yargs": "16.2.0" + }, + "files": [ + "dist", + "polyfill", + "index.d.ts" + ], + "keywords": [ + "fetch", + "http", + "url", + "promise", + "async", + "await", + "isomorphic", + "universal", + "node", + "react", + "native", + "browser", + "ponyfill", + "whatwg", + "xhr", + "ajax" + ] +} diff --git a/node_modules/cross-fetch/polyfill/package.json b/node_modules/cross-fetch/polyfill/package.json new file mode 100644 index 0000000..07e1d3e --- /dev/null +++ b/node_modules/cross-fetch/polyfill/package.json @@ -0,0 +1,8 @@ +{ + "name": "cross-fetch-polyfill", + "version": "0.0.0", + "main": "../dist/node-polyfill.js", + "browser": "../dist/browser-polyfill.js", + "react-native": "../dist/react-native-polyfill.js", + "license": "MIT" +} diff --git a/node_modules/delayed-stream/.npmignore b/node_modules/delayed-stream/.npmignore new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/node_modules/delayed-stream/.npmignore @@ -0,0 +1 @@ +test diff --git a/node_modules/delayed-stream/License b/node_modules/delayed-stream/License new file mode 100644 index 0000000..4804b7a --- /dev/null +++ b/node_modules/delayed-stream/License @@ -0,0 +1,19 @@ +Copyright (c) 2011 Debuggable Limited + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/delayed-stream/Makefile b/node_modules/delayed-stream/Makefile new file mode 100644 index 0000000..b4ff85a --- /dev/null +++ b/node_modules/delayed-stream/Makefile @@ -0,0 +1,7 @@ +SHELL := /bin/bash + +test: + @./test/run.js + +.PHONY: test + diff --git a/node_modules/delayed-stream/Readme.md b/node_modules/delayed-stream/Readme.md new file mode 100644 index 0000000..aca36f9 --- /dev/null +++ b/node_modules/delayed-stream/Readme.md @@ -0,0 +1,141 @@ +# delayed-stream + +Buffers events from a stream until you are ready to handle them. + +## Installation + +``` bash +npm install delayed-stream +``` + +## Usage + +The following example shows how to write a http echo server that delays its +response by 1000 ms. + +``` javascript +var DelayedStream = require('delayed-stream'); +var http = require('http'); + +http.createServer(function(req, res) { + var delayed = DelayedStream.create(req); + + setTimeout(function() { + res.writeHead(200); + delayed.pipe(res); + }, 1000); +}); +``` + +If you are not using `Stream#pipe`, you can also manually release the buffered +events by calling `delayedStream.resume()`: + +``` javascript +var delayed = DelayedStream.create(req); + +setTimeout(function() { + // Emit all buffered events and resume underlaying source + delayed.resume(); +}, 1000); +``` + +## Implementation + +In order to use this meta stream properly, here are a few things you should +know about the implementation. + +### Event Buffering / Proxying + +All events of the `source` stream are hijacked by overwriting the `source.emit` +method. Until node implements a catch-all event listener, this is the only way. + +However, delayed-stream still continues to emit all events it captures on the +`source`, regardless of whether you have released the delayed stream yet or +not. + +Upon creation, delayed-stream captures all `source` events and stores them in +an internal event buffer. Once `delayedStream.release()` is called, all +buffered events are emitted on the `delayedStream`, and the event buffer is +cleared. After that, delayed-stream merely acts as a proxy for the underlaying +source. + +### Error handling + +Error events on `source` are buffered / proxied just like any other events. +However, `delayedStream.create` attaches a no-op `'error'` listener to the +`source`. This way you only have to handle errors on the `delayedStream` +object, rather than in two places. + +### Buffer limits + +delayed-stream provides a `maxDataSize` property that can be used to limit +the amount of data being buffered. In order to protect you from bad `source` +streams that don't react to `source.pause()`, this feature is enabled by +default. + +## API + +### DelayedStream.create(source, [options]) + +Returns a new `delayedStream`. Available options are: + +* `pauseStream` +* `maxDataSize` + +The description for those properties can be found below. + +### delayedStream.source + +The `source` stream managed by this object. This is useful if you are +passing your `delayedStream` around, and you still want to access properties +on the `source` object. + +### delayedStream.pauseStream = true + +Whether to pause the underlaying `source` when calling +`DelayedStream.create()`. Modifying this property afterwards has no effect. + +### delayedStream.maxDataSize = 1024 * 1024 + +The amount of data to buffer before emitting an `error`. + +If the underlaying source is emitting `Buffer` objects, the `maxDataSize` +refers to bytes. + +If the underlaying source is emitting JavaScript strings, the size refers to +characters. + +If you know what you are doing, you can set this property to `Infinity` to +disable this feature. You can also modify this property during runtime. + +### delayedStream.dataSize = 0 + +The amount of data buffered so far. + +### delayedStream.readable + +An ECMA5 getter that returns the value of `source.readable`. + +### delayedStream.resume() + +If the `delayedStream` has not been released so far, `delayedStream.release()` +is called. + +In either case, `source.resume()` is called. + +### delayedStream.pause() + +Calls `source.pause()`. + +### delayedStream.pipe(dest) + +Calls `delayedStream.resume()` and then proxies the arguments to `source.pipe`. + +### delayedStream.release() + +Emits and clears all events that have been buffered up so far. This does not +resume the underlaying source, use `delayedStream.resume()` instead. + +## License + +delayed-stream is licensed under the MIT license. diff --git a/node_modules/delayed-stream/lib/delayed_stream.js b/node_modules/delayed-stream/lib/delayed_stream.js new file mode 100644 index 0000000..b38fc85 --- /dev/null +++ b/node_modules/delayed-stream/lib/delayed_stream.js @@ -0,0 +1,107 @@ +var Stream = require('stream').Stream; +var util = require('util'); + +module.exports = DelayedStream; +function DelayedStream() { + this.source = null; + this.dataSize = 0; + this.maxDataSize = 1024 * 1024; + this.pauseStream = true; + + this._maxDataSizeExceeded = false; + this._released = false; + this._bufferedEvents = []; +} +util.inherits(DelayedStream, Stream); + +DelayedStream.create = function(source, options) { + var delayedStream = new this(); + + options = options || {}; + for (var option in options) { + delayedStream[option] = options[option]; + } + + delayedStream.source = source; + + var realEmit = source.emit; + source.emit = function() { + delayedStream._handleEmit(arguments); + return realEmit.apply(source, arguments); + }; + + source.on('error', function() {}); + if (delayedStream.pauseStream) { + source.pause(); + } + + return delayedStream; +}; + +Object.defineProperty(DelayedStream.prototype, 'readable', { + configurable: true, + enumerable: true, + get: function() { + return this.source.readable; + } +}); + +DelayedStream.prototype.setEncoding = function() { + return this.source.setEncoding.apply(this.source, arguments); +}; + +DelayedStream.prototype.resume = function() { + if (!this._released) { + this.release(); + } + + this.source.resume(); +}; + +DelayedStream.prototype.pause = function() { + this.source.pause(); +}; + +DelayedStream.prototype.release = function() { + this._released = true; + + this._bufferedEvents.forEach(function(args) { + this.emit.apply(this, args); + }.bind(this)); + this._bufferedEvents = []; +}; + +DelayedStream.prototype.pipe = function() { + var r = Stream.prototype.pipe.apply(this, arguments); + this.resume(); + return r; +}; + +DelayedStream.prototype._handleEmit = function(args) { + if (this._released) { + this.emit.apply(this, args); + return; + } + + if (args[0] === 'data') { + this.dataSize += args[1].length; + this._checkIfMaxDataSizeExceeded(); + } + + this._bufferedEvents.push(args); +}; + +DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { + if (this._maxDataSizeExceeded) { + return; + } + + if (this.dataSize <= this.maxDataSize) { + return; + } + + this._maxDataSizeExceeded = true; + var message = + 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' + this.emit('error', new Error(message)); +}; diff --git a/node_modules/delayed-stream/package.json b/node_modules/delayed-stream/package.json new file mode 100644 index 0000000..eea3291 --- /dev/null +++ b/node_modules/delayed-stream/package.json @@ -0,0 +1,27 @@ +{ + "author": "Felix Geisendörfer (http://debuggable.com/)", + "contributors": [ + "Mike Atkins " + ], + "name": "delayed-stream", + "description": "Buffers events from a stream until you are ready to handle them.", + "license": "MIT", + "version": "1.0.0", + "homepage": "https://github.com/felixge/node-delayed-stream", + "repository": { + "type": "git", + "url": "git://github.com/felixge/node-delayed-stream.git" + }, + "main": "./lib/delayed_stream", + "engines": { + "node": ">=0.4.0" + }, + "scripts": { + "test": "make test" + }, + "dependencies": {}, + "devDependencies": { + "fake": "0.2.0", + "far": "0.0.1" + } +} diff --git a/node_modules/form-data/License b/node_modules/form-data/License new file mode 100644 index 0000000..c7ff12a --- /dev/null +++ b/node_modules/form-data/License @@ -0,0 +1,19 @@ +Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. diff --git a/node_modules/form-data/Readme.md b/node_modules/form-data/Readme.md new file mode 100644 index 0000000..6077db9 --- /dev/null +++ b/node_modules/form-data/Readme.md @@ -0,0 +1,350 @@ +# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data) + +A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. + +The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. + +[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface + +[![Linux Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=linux:4.x-12.x)](https://travis-ci.org/form-data/form-data) +[![MacOS Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=macos:4.x-12.x)](https://travis-ci.org/form-data/form-data) +[![Windows Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=windows:4.x-12.x)](https://travis-ci.org/form-data/form-data) + +[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/master.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) +[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) + +## Install + +``` +npm install --save form-data +``` + +## Usage + +In this example we are constructing a form with 3 fields that contain a string, +a buffer and a file stream. + +``` javascript +var FormData = require('form-data'); +var fs = require('fs'); + +var form = new FormData(); +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_file', fs.createReadStream('/foo/bar.jpg')); +``` + +Also you can use http-response stream: + +``` javascript +var FormData = require('form-data'); +var http = require('http'); + +var form = new FormData(); + +http.request('http://nodejs.org/images/logo.png', function(response) { + form.append('my_field', 'my value'); + form.append('my_buffer', new Buffer(10)); + form.append('my_logo', response); +}); +``` + +Or @mikeal's [request](https://github.com/request/request) stream: + +``` javascript +var FormData = require('form-data'); +var request = require('request'); + +var form = new FormData(); + +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_logo', request('http://nodejs.org/images/logo.png')); +``` + +In order to submit this form to a web application, call ```submit(url, [callback])``` method: + +``` javascript +form.submit('http://example.org/', function(err, res) { + // res – response object (http.IncomingMessage) // + res.resume(); +}); + +``` + +For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. + +### Custom options + +You can provide custom options, such as `maxDataSize`: + +``` javascript +var FormData = require('form-data'); + +var form = new FormData({ maxDataSize: 20971520 }); +form.append('my_field', 'my value'); +form.append('my_buffer', /* something big */); +``` + +List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15) + +### Alternative submission methods + +You can use node's http client interface: + +``` javascript +var http = require('http'); + +var request = http.request({ + method: 'post', + host: 'example.org', + path: '/upload', + headers: form.getHeaders() +}); + +form.pipe(request); + +request.on('response', function(res) { + console.log(res.statusCode); +}); +``` + +Or if you would prefer the `'Content-Length'` header to be set for you: + +``` javascript +form.submit('example.org/upload', function(err, res) { + console.log(res.statusCode); +}); +``` + +To use custom headers and pre-known length in parts: + +``` javascript +var CRLF = '\r\n'; +var form = new FormData(); + +var options = { + header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, + knownLength: 1 +}; + +form.append('my_buffer', buffer, options); + +form.submit('http://example.com/', function(err, res) { + if (err) throw err; + console.log('Done'); +}); +``` + +Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: + +``` javascript +someModule.stream(function(err, stdout, stderr) { + if (err) throw err; + + var form = new FormData(); + + form.append('file', stdout, { + filename: 'unicycle.jpg', // ... or: + filepath: 'photos/toys/unicycle.jpg', + contentType: 'image/jpeg', + knownLength: 19806 + }); + + form.submit('http://example.com/', function(err, res) { + if (err) throw err; + console.log('Done'); + }); +}); +``` + +The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory). + +For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: + +``` javascript +form.submit({ + host: 'example.com', + path: '/probably.php?extra=params', + auth: 'username:password' +}, function(err, res) { + console.log(res.statusCode); +}); +``` + +In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`: + +``` javascript +form.submit({ + host: 'example.com', + path: '/surelynot.php', + headers: {'x-test-header': 'test-header-value'} +}, function(err, res) { + console.log(res.statusCode); +}); +``` + +### Methods + +- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-). +- [_Array_ getHeaders( [**Array** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-) +- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary) +- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer) +- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync) +- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-) +- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength) +- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-) +- [_String_ toString()](https://github.com/form-data/form-data#string-tostring) + +#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] ) +Append data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user. +```javascript +var form = new FormData(); +form.append( 'my_string', 'my value' ); +form.append( 'my_integer', 1 ); +form.append( 'my_boolean', true ); +form.append( 'my_buffer', new Buffer(10) ); +form.append( 'my_array_as_json', JSON.stringify( ['bird','cute'] ) ) +``` + +You may provide a string for options, or an object. +```javascript +// Set filename by providing a string for options +form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' ); + +// provide an object. +form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} ); +``` + +#### _Array_ getHeaders( [**Array** _userHeaders_] ) +This method ads the correct `content-type` header to the provided array of `userHeaders`. + +#### _String_ getBoundary() +Return the boundary of the formData. A boundary consists of 26 `-` followed by 24 numbers +for example: +```javascript +--------------------------515890814546601021194782 +``` +_Note: The boundary must be unique and may not appear in the data._ + +#### _Buffer_ getBuffer() +Return the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data. +```javascript +var form = new FormData(); +form.append( 'my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]) ); +form.append( 'my_file', fs.readFileSync('/foo/bar.jpg') ); + +axios.post( 'https://example.com/path/to/api', + form.getBuffer(), + form.getHeaders() + ) +``` +**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error. + +#### _Integer_ getLengthSync() +Same as `getLength` but synchronous. + +_Note: getLengthSync __doesn't__ calculate streams length._ + +#### _Integer_ getLength( **function** _callback_ ) +Returns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated +```javascript +this.getLength(function(err, length) { + if (err) { + this._error(err); + return; + } + + // add content length + request.setHeader('Content-Length', length); + + ... +}.bind(this)); +``` + +#### _Boolean_ hasKnownLength() +Checks if the length of added values is known. + +#### _Request_ submit( _params_, **function** _callback_ ) +Submit the form to a web application. +```javascript +var form = new FormData(); +form.append( 'my_string', 'Hello World' ); + +form.submit( 'http://example.com/', function(err, res) { + // res – response object (http.IncomingMessage) // + res.resume(); +} ); +``` + +#### _String_ toString() +Returns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead. + +### Integration with other libraries + +#### Request + +Form submission using [request](https://github.com/request/request): + +```javascript +var formData = { + my_field: 'my_value', + my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), +}; + +request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) { + if (err) { + return console.error('upload failed:', err); + } + console.log('Upload successful! Server responded with:', body); +}); +``` + +For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). + +#### node-fetch + +You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): + +```javascript +var form = new FormData(); + +form.append('a', 1); + +fetch('http://example.com', { method: 'POST', body: form }) + .then(function(res) { + return res.json(); + }).then(function(json) { + console.log(json); + }); +``` + +#### axios + +In Node.js you can post a file using [axios](https://github.com/axios/axios): +```javascript +const form = new FormData(); +const stream = fs.createReadStream(PATH_TO_FILE); + +form.append('image', stream); + +// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders` +const formHeaders = form.getHeaders(); + +axios.post('http://example.com', form, { + headers: { + ...formHeaders, + }, +}) +.then(response => response) +.catch(error => error) +``` + +## Notes + +- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. +- Starting version `2.x` FormData has dropped support for `node@0.10.x`. + +## License + +Form-Data is released under the [MIT](License) license. diff --git a/node_modules/form-data/index.d.ts b/node_modules/form-data/index.d.ts new file mode 100644 index 0000000..255292d --- /dev/null +++ b/node_modules/form-data/index.d.ts @@ -0,0 +1,51 @@ +// Definitions by: Carlos Ballesteros Velasco +// Leon Yu +// BendingBender +// Maple Miao + +/// +import * as stream from 'stream'; +import * as http from 'http'; + +export = FormData; + +interface Options { + writable?: boolean; + readable?: boolean; + dataSize?: number; + maxDataSize?: number; + pauseStreams?: boolean; +} + +declare class FormData extends stream.Readable { + constructor(options?: Options); + append(key: string, value: any, options?: FormData.AppendOptions | string): void; + getHeaders(): FormData.Headers; + submit( + params: string | FormData.SubmitOptions, + callback?: (error: Error | null, response: http.IncomingMessage) => void + ): http.ClientRequest; + getBuffer(): Buffer; + getBoundary(): string; + getLength(callback: (err: Error | null, length: number) => void): void; + getLengthSync(): number; + hasKnownLength(): boolean; +} + +declare namespace FormData { + interface Headers { + [key: string]: any; + } + + interface AppendOptions { + header?: string | Headers; + knownLength?: number; + filename?: string; + filepath?: string; + contentType?: string; + } + + interface SubmitOptions extends http.RequestOptions { + protocol?: 'https:' | 'http:'; + } +} diff --git a/node_modules/form-data/lib/browser.js b/node_modules/form-data/lib/browser.js new file mode 100644 index 0000000..09e7c70 --- /dev/null +++ b/node_modules/form-data/lib/browser.js @@ -0,0 +1,2 @@ +/* eslint-env browser */ +module.exports = typeof self == 'object' ? self.FormData : window.FormData; diff --git a/node_modules/form-data/lib/form_data.js b/node_modules/form-data/lib/form_data.js new file mode 100644 index 0000000..b1b20c9 --- /dev/null +++ b/node_modules/form-data/lib/form_data.js @@ -0,0 +1,484 @@ +var CombinedStream = require('combined-stream'); +var util = require('util'); +var path = require('path'); +var http = require('http'); +var https = require('https'); +var parseUrl = require('url').parse; +var fs = require('fs'); +var mime = require('mime-types'); +var asynckit = require('asynckit'); +var populate = require('./populate.js'); +var Buffer = require('safe-buffer').Buffer; // eslint-disable-line no-shadow + +// Public API +module.exports = FormData; + +// make it a Stream +util.inherits(FormData, CombinedStream); + +/** + * Create readable "multipart/form-data" streams. + * Can be used to submit forms + * and file uploads to other web applications. + * + * @constructor + * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream + */ +function FormData(options) { + if (!(this instanceof FormData)) { + return new FormData(); + } + + this._overheadLength = 0; + this._valueLength = 0; + this._valuesToMeasure = []; + + CombinedStream.call(this); + + options = options || {}; + for (var option in options) { + this[option] = options[option]; + } +} + +FormData.LINE_BREAK = '\r\n'; +FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; + +FormData.prototype.append = function(field, value, options) { + + options = options || {}; + + // allow filename as single option + if (typeof options == 'string') { + options = {filename: options}; + } + + var append = CombinedStream.prototype.append.bind(this); + + // all that streamy business can't handle numbers + if (typeof value == 'number') { + value = '' + value; + } + + // https://github.com/felixge/node-form-data/issues/38 + if (Array.isArray(value)) { + // Please convert your array into string + // the way web server expects it + this._error(new Error('Arrays are not supported.')); + return; + } + + var header = this._multiPartHeader(field, value, options); + var footer = this._multiPartFooter(); + + append(header); + append(value); + append(footer); + + // pass along options.knownLength + this._trackLength(header, value, options); +}; + +FormData.prototype._trackLength = function(header, value, options) { + var valueLength = 0; + + // used w/ getLengthSync(), when length is known. + // e.g. for streaming directly from a remote server, + // w/ a known file a size, and not wanting to wait for + // incoming file to finish to get its size. + if (options.knownLength != null) { + valueLength += +options.knownLength; + } else if (Buffer.isBuffer(value)) { + valueLength = value.length; + } else if (typeof value === 'string') { + valueLength = Buffer.byteLength(value); + } + + this._valueLength += valueLength; + + // @check why add CRLF? does this account for custom/multiple CRLFs? + this._overheadLength += + Buffer.byteLength(header) + + FormData.LINE_BREAK.length; + + // empty or either doesn't have path or not an http response + if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) { + return; + } + + // no need to bother with the length + if (!options.knownLength) { + this._valuesToMeasure.push(value); + } +}; + +FormData.prototype._lengthRetriever = function(value, callback) { + + if (value.hasOwnProperty('fd')) { + + // take read range into a account + // `end` = Infinity –> read file till the end + // + // TODO: Looks like there is bug in Node fs.createReadStream + // it doesn't respect `end` options without `start` options + // Fix it when node fixes it. + // https://github.com/joyent/node/issues/7819 + if (value.end != undefined && value.end != Infinity && value.start != undefined) { + + // when end specified + // no need to calculate range + // inclusive, starts with 0 + callback(null, value.end + 1 - (value.start ? value.start : 0)); + + // not that fast snoopy + } else { + // still need to fetch file size from fs + fs.stat(value.path, function(err, stat) { + + var fileSize; + + if (err) { + callback(err); + return; + } + + // update final size based on the range options + fileSize = stat.size - (value.start ? value.start : 0); + callback(null, fileSize); + }); + } + + // or http response + } else if (value.hasOwnProperty('httpVersion')) { + callback(null, +value.headers['content-length']); + + // or request stream http://github.com/mikeal/request + } else if (value.hasOwnProperty('httpModule')) { + // wait till response come back + value.on('response', function(response) { + value.pause(); + callback(null, +response.headers['content-length']); + }); + value.resume(); + + // something else + } else { + callback('Unknown stream'); + } +}; + +FormData.prototype._multiPartHeader = function(field, value, options) { + // custom header specified (as string)? + // it becomes responsible for boundary + // (e.g. to handle extra CRLFs on .NET servers) + if (typeof options.header == 'string') { + return options.header; + } + + var contentDisposition = this._getContentDisposition(value, options); + var contentType = this._getContentType(value, options); + + var contents = ''; + var headers = { + // add custom disposition as third element or keep it two elements if not + 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), + // if no content type. allow it to be empty array + 'Content-Type': [].concat(contentType || []) + }; + + // allow custom headers. + if (typeof options.header == 'object') { + populate(headers, options.header); + } + + var header; + for (var prop in headers) { + if (!headers.hasOwnProperty(prop)) continue; + header = headers[prop]; + + // skip nullish headers. + if (header == null) { + continue; + } + + // convert all headers to arrays. + if (!Array.isArray(header)) { + header = [header]; + } + + // add non-empty headers. + if (header.length) { + contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; + } + } + + return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; +}; + +FormData.prototype._getContentDisposition = function(value, options) { + + var filename + , contentDisposition + ; + + if (typeof options.filepath === 'string') { + // custom filepath for relative paths + filename = path.normalize(options.filepath).replace(/\\/g, '/'); + } else if (options.filename || value.name || value.path) { + // custom filename take precedence + // formidable and the browser add a name property + // fs- and request- streams have path property + filename = path.basename(options.filename || value.name || value.path); + } else if (value.readable && value.hasOwnProperty('httpVersion')) { + // or try http response + filename = path.basename(value.client._httpMessage.path || ''); + } + + if (filename) { + contentDisposition = 'filename="' + filename + '"'; + } + + return contentDisposition; +}; + +FormData.prototype._getContentType = function(value, options) { + + // use custom content-type above all + var contentType = options.contentType; + + // or try `name` from formidable, browser + if (!contentType && value.name) { + contentType = mime.lookup(value.name); + } + + // or try `path` from fs-, request- streams + if (!contentType && value.path) { + contentType = mime.lookup(value.path); + } + + // or if it's http-reponse + if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) { + contentType = value.headers['content-type']; + } + + // or guess it from the filepath or filename + if (!contentType && (options.filepath || options.filename)) { + contentType = mime.lookup(options.filepath || options.filename); + } + + // fallback to the default content type if `value` is not simple value + if (!contentType && typeof value == 'object') { + contentType = FormData.DEFAULT_CONTENT_TYPE; + } + + return contentType; +}; + +FormData.prototype._multiPartFooter = function() { + return function(next) { + var footer = FormData.LINE_BREAK; + + var lastPart = (this._streams.length === 0); + if (lastPart) { + footer += this._lastBoundary(); + } + + next(footer); + }.bind(this); +}; + +FormData.prototype._lastBoundary = function() { + return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; +}; + +FormData.prototype.getHeaders = function(userHeaders) { + var header; + var formHeaders = { + 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() + }; + + for (header in userHeaders) { + if (userHeaders.hasOwnProperty(header)) { + formHeaders[header.toLowerCase()] = userHeaders[header]; + } + } + + return formHeaders; +}; + +FormData.prototype.getBoundary = function() { + if (!this._boundary) { + this._generateBoundary(); + } + + return this._boundary; +}; + +FormData.prototype.getBuffer = function() { + var dataBuffer = new Buffer.alloc(0); + var boundary = this.getBoundary(); + + // Create the form content. Add Line breaks to the end of data. + for (var i = 0, len = this._streams.length; i < len; i++) { + if (typeof this._streams[i] !== 'function') { + + // Add content to the buffer. + if(Buffer.isBuffer(this._streams[i])) { + dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]); + }else { + dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]); + } + + // Add break after content. + if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) { + dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] ); + } + } + } + + // Add the footer and return the Buffer object. + return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] ); +}; + +FormData.prototype._generateBoundary = function() { + // This generates a 50 character boundary similar to those used by Firefox. + // They are optimized for boyer-moore parsing. + var boundary = '--------------------------'; + for (var i = 0; i < 24; i++) { + boundary += Math.floor(Math.random() * 10).toString(16); + } + + this._boundary = boundary; +}; + +// Note: getLengthSync DOESN'T calculate streams length +// As workaround one can calculate file size manually +// and add it as knownLength option +FormData.prototype.getLengthSync = function() { + var knownLength = this._overheadLength + this._valueLength; + + // Don't get confused, there are 3 "internal" streams for each keyval pair + // so it basically checks if there is any value added to the form + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + // https://github.com/form-data/form-data/issues/40 + if (!this.hasKnownLength()) { + // Some async length retrievers are present + // therefore synchronous length calculation is false. + // Please use getLength(callback) to get proper length + this._error(new Error('Cannot calculate proper length in synchronous way.')); + } + + return knownLength; +}; + +// Public API to check if length of added values is known +// https://github.com/form-data/form-data/issues/196 +// https://github.com/form-data/form-data/issues/262 +FormData.prototype.hasKnownLength = function() { + var hasKnownLength = true; + + if (this._valuesToMeasure.length) { + hasKnownLength = false; + } + + return hasKnownLength; +}; + +FormData.prototype.getLength = function(cb) { + var knownLength = this._overheadLength + this._valueLength; + + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + if (!this._valuesToMeasure.length) { + process.nextTick(cb.bind(this, null, knownLength)); + return; + } + + asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) { + if (err) { + cb(err); + return; + } + + values.forEach(function(length) { + knownLength += length; + }); + + cb(null, knownLength); + }); +}; + +FormData.prototype.submit = function(params, cb) { + var request + , options + , defaults = {method: 'post'} + ; + + // parse provided url if it's string + // or treat it as options object + if (typeof params == 'string') { + + params = parseUrl(params); + options = populate({ + port: params.port, + path: params.pathname, + host: params.hostname, + protocol: params.protocol + }, defaults); + + // use custom params + } else { + + options = populate(params, defaults); + // if no port provided use default one + if (!options.port) { + options.port = options.protocol == 'https:' ? 443 : 80; + } + } + + // put that good code in getHeaders to some use + options.headers = this.getHeaders(params.headers); + + // https if specified, fallback to http in any other case + if (options.protocol == 'https:') { + request = https.request(options); + } else { + request = http.request(options); + } + + // get content length and fire away + this.getLength(function(err, length) { + if (err) { + this._error(err); + return; + } + + // add content length + request.setHeader('Content-Length', length); + + this.pipe(request); + if (cb) { + request.on('error', cb); + request.on('response', cb.bind(this, null)); + } + }.bind(this)); + + return request; +}; + +FormData.prototype._error = function(err) { + if (!this.error) { + this.error = err; + this.pause(); + this.emit('error', err); + } +}; + +FormData.prototype.toString = function () { + return '[object FormData]'; +}; diff --git a/node_modules/form-data/lib/populate.js b/node_modules/form-data/lib/populate.js new file mode 100644 index 0000000..4d35738 --- /dev/null +++ b/node_modules/form-data/lib/populate.js @@ -0,0 +1,10 @@ +// populates missing values +module.exports = function(dst, src) { + + Object.keys(src).forEach(function(prop) + { + dst[prop] = dst[prop] || src[prop]; + }); + + return dst; +}; diff --git a/node_modules/form-data/node_modules/safe-buffer/LICENSE b/node_modules/form-data/node_modules/safe-buffer/LICENSE new file mode 100644 index 0000000..0c068ce --- /dev/null +++ b/node_modules/form-data/node_modules/safe-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/form-data/node_modules/safe-buffer/README.md b/node_modules/form-data/node_modules/safe-buffer/README.md new file mode 100644 index 0000000..e9a81af --- /dev/null +++ b/node_modules/form-data/node_modules/safe-buffer/README.md @@ -0,0 +1,584 @@ +# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/safe-buffer +[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg +[npm-url]: https://npmjs.org/package/safe-buffer +[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg +[downloads-url]: https://npmjs.org/package/safe-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Safer Node.js Buffer API + +**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, +`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** + +**Uses the built-in implementation when available.** + +## install + +``` +npm install safe-buffer +``` + +## usage + +The goal of this package is to provide a safe replacement for the node.js `Buffer`. + +It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to +the top of your node.js modules: + +```js +var Buffer = require('safe-buffer').Buffer + +// Existing buffer code will continue to work without issues: + +new Buffer('hey', 'utf8') +new Buffer([1, 2, 3], 'utf8') +new Buffer(obj) +new Buffer(16) // create an uninitialized buffer (potentially unsafe) + +// But you can use these new explicit APIs to make clear what you want: + +Buffer.from('hey', 'utf8') // convert from many types to a Buffer +Buffer.alloc(16) // create a zero-filled buffer (safe) +Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) +``` + +## api + +### Class Method: Buffer.from(array) + + +* `array` {Array} + +Allocates a new `Buffer` using an `array` of octets. + +```js +const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); + // creates a new Buffer containing ASCII bytes + // ['b','u','f','f','e','r'] +``` + +A `TypeError` will be thrown if `array` is not an `Array`. + +### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) + + +* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or + a `new ArrayBuffer()` +* `byteOffset` {Number} Default: `0` +* `length` {Number} Default: `arrayBuffer.length - byteOffset` + +When passed a reference to the `.buffer` property of a `TypedArray` instance, +the newly created `Buffer` will share the same allocated memory as the +TypedArray. + +```js +const arr = new Uint16Array(2); +arr[0] = 5000; +arr[1] = 4000; + +const buf = Buffer.from(arr.buffer); // shares the memory with arr; + +console.log(buf); + // Prints: + +// changing the TypedArray changes the Buffer also +arr[1] = 6000; + +console.log(buf); + // Prints: +``` + +The optional `byteOffset` and `length` arguments specify a memory range within +the `arrayBuffer` that will be shared by the `Buffer`. + +```js +const ab = new ArrayBuffer(10); +const buf = Buffer.from(ab, 0, 2); +console.log(buf.length); + // Prints: 2 +``` + +A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. + +### Class Method: Buffer.from(buffer) + + +* `buffer` {Buffer} + +Copies the passed `buffer` data onto a new `Buffer` instance. + +```js +const buf1 = Buffer.from('buffer'); +const buf2 = Buffer.from(buf1); + +buf1[0] = 0x61; +console.log(buf1.toString()); + // 'auffer' +console.log(buf2.toString()); + // 'buffer' (copy is not changed) +``` + +A `TypeError` will be thrown if `buffer` is not a `Buffer`. + +### Class Method: Buffer.from(str[, encoding]) + + +* `str` {String} String to encode. +* `encoding` {String} Encoding to use, Default: `'utf8'` + +Creates a new `Buffer` containing the given JavaScript string `str`. If +provided, the `encoding` parameter identifies the character encoding. +If not provided, `encoding` defaults to `'utf8'`. + +```js +const buf1 = Buffer.from('this is a tést'); +console.log(buf1.toString()); + // prints: this is a tést +console.log(buf1.toString('ascii')); + // prints: this is a tC)st + +const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); +console.log(buf2.toString()); + // prints: this is a tést +``` + +A `TypeError` will be thrown if `str` is not a string. + +### Class Method: Buffer.alloc(size[, fill[, encoding]]) + + +* `size` {Number} +* `fill` {Value} Default: `undefined` +* `encoding` {String} Default: `utf8` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the +`Buffer` will be *zero-filled*. + +```js +const buf = Buffer.alloc(5); +console.log(buf); + // +``` + +The `size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +If `fill` is specified, the allocated `Buffer` will be initialized by calling +`buf.fill(fill)`. See [`buf.fill()`][] for more information. + +```js +const buf = Buffer.alloc(5, 'a'); +console.log(buf); + // +``` + +If both `fill` and `encoding` are specified, the allocated `Buffer` will be +initialized by calling `buf.fill(fill, encoding)`. For example: + +```js +const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); +console.log(buf); + // +``` + +Calling `Buffer.alloc(size)` can be significantly slower than the alternative +`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance +contents will *never contain sensitive data*. + +A `TypeError` will be thrown if `size` is not a number. + +### Class Method: Buffer.allocUnsafe(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must +be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit +architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is +thrown. A zero-length Buffer will be created if a `size` less than or equal to +0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +```js +const buf = Buffer.allocUnsafe(5); +console.log(buf); + // + // (octets will be different, every time) +buf.fill(0); +console.log(buf); + // +``` + +A `TypeError` will be thrown if `size` is not a number. + +Note that the `Buffer` module pre-allocates an internal `Buffer` instance of +size `Buffer.poolSize` that is used as a pool for the fast allocation of new +`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated +`new Buffer(size)` constructor) only when `size` is less than or equal to +`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default +value of `Buffer.poolSize` is `8192` but can be modified. + +Use of this pre-allocated internal memory pool is a key difference between +calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. +Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer +pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal +Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The +difference is subtle but can be important when an application requires the +additional performance that `Buffer.allocUnsafe(size)` provides. + +### Class Method: Buffer.allocUnsafeSlow(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The +`size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, +allocations under 4KB are, by default, sliced from a single pre-allocated +`Buffer`. This allows applications to avoid the garbage collection overhead of +creating many individually allocated Buffers. This approach improves both +performance and memory usage by eliminating the need to track and cleanup as +many `Persistent` objects. + +However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then +copy out the relevant bits. + +```js +// need to keep around a few small chunks of memory +const store = []; + +socket.on('readable', () => { + const data = socket.read(); + // allocate for retained data + const sb = Buffer.allocUnsafeSlow(10); + // copy the data into the new allocation + data.copy(sb, 0, 0, 10); + store.push(sb); +}); +``` + +Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* +a developer has observed undue memory retention in their applications. + +A `TypeError` will be thrown if `size` is not a number. + +### All the Rest + +The rest of the `Buffer` API is exactly the same as in node.js. +[See the docs](https://nodejs.org/api/buffer.html). + + +## Related links + +- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) +- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) + +## Why is `Buffer` unsafe? + +Today, the node.js `Buffer` constructor is overloaded to handle many different argument +types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), +`ArrayBuffer`, and also `Number`. + +The API is optimized for convenience: you can throw any type at it, and it will try to do +what you want. + +Because the Buffer constructor is so powerful, you often see code like this: + +```js +// Convert UTF-8 strings to hex +function toHex (str) { + return new Buffer(str).toString('hex') +} +``` + +***But what happens if `toHex` is called with a `Number` argument?*** + +### Remote Memory Disclosure + +If an attacker can make your program call the `Buffer` constructor with a `Number` +argument, then they can make it allocate uninitialized memory from the node.js process. +This could potentially disclose TLS private keys, user data, or database passwords. + +When the `Buffer` constructor is passed a `Number` argument, it returns an +**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like +this, you **MUST** overwrite the contents before returning it to the user. + +From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): + +> `new Buffer(size)` +> +> - `size` Number +> +> The underlying memory for `Buffer` instances created in this way is not initialized. +> **The contents of a newly created `Buffer` are unknown and could contain sensitive +> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. + +(Emphasis our own.) + +Whenever the programmer intended to create an uninitialized `Buffer` you often see code +like this: + +```js +var buf = new Buffer(16) + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### Would this ever be a problem in real code? + +Yes. It's surprisingly common to forget to check the type of your variables in a +dynamically-typed language like JavaScript. + +Usually the consequences of assuming the wrong type is that your program crashes with an +uncaught exception. But the failure mode for forgetting to check the type of arguments to +the `Buffer` constructor is more catastrophic. + +Here's an example of a vulnerable service that takes a JSON payload and converts it to +hex: + +```js +// Take a JSON payload {str: "some string"} and convert it to hex +var server = http.createServer(function (req, res) { + var data = '' + req.setEncoding('utf8') + req.on('data', function (chunk) { + data += chunk + }) + req.on('end', function () { + var body = JSON.parse(data) + res.end(new Buffer(body.str).toString('hex')) + }) +}) + +server.listen(8080) +``` + +In this example, an http client just has to send: + +```json +{ + "str": 1000 +} +``` + +and it will get back 1,000 bytes of uninitialized memory from the server. + +This is a very serious bug. It's similar in severity to the +[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process +memory by remote attackers. + + +### Which real-world packages were vulnerable? + +#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) + +[Mathias Buus](https://github.com/mafintosh) and I +([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, +[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow +anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get +them to reveal 20 bytes at a time of uninitialized memory from the node.js process. + +Here's +[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) +that fixed it. We released a new fixed version, created a +[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all +vulnerable versions on npm so users will get a warning to upgrade to a newer version. + +#### [`ws`](https://www.npmjs.com/package/ws) + +That got us wondering if there were other vulnerable packages. Sure enough, within a short +period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the +most popular WebSocket implementation in node.js. + +If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as +expected, then uninitialized server memory would be disclosed to the remote peer. + +These were the vulnerable methods: + +```js +socket.send(number) +socket.ping(number) +socket.pong(number) +``` + +Here's a vulnerable socket server with some echo functionality: + +```js +server.on('connection', function (socket) { + socket.on('message', function (message) { + message = JSON.parse(message) + if (message.type === 'echo') { + socket.send(message.data) // send back the user's message + } + }) +}) +``` + +`socket.send(number)` called on the server, will disclose server memory. + +Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue +was fixed, with a more detailed explanation. Props to +[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the +[Node Security Project disclosure](https://nodesecurity.io/advisories/67). + + +### What's the solution? + +It's important that node.js offers a fast way to get memory otherwise performance-critical +applications would needlessly get a lot slower. + +But we need a better way to *signal our intent* as programmers. **When we want +uninitialized memory, we should request it explicitly.** + +Sensitive functionality should not be packed into a developer-friendly API that loosely +accepts many different types. This type of API encourages the lazy practice of passing +variables in without checking the type very carefully. + +#### A new API: `Buffer.allocUnsafe(number)` + +The functionality of creating buffers with uninitialized memory should be part of another +API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that +frequently gets user input of all sorts of different types passed into it. + +```js +var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### How do we fix node.js core? + +We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as +`semver-major`) which defends against one case: + +```js +var str = 16 +new Buffer(str, 'utf8') +``` + +In this situation, it's implied that the programmer intended the first argument to be a +string, since they passed an encoding as a second argument. Today, node.js will allocate +uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not +what the programmer intended. + +But this is only a partial solution, since if the programmer does `new Buffer(variable)` +(without an `encoding` parameter) there's no way to know what they intended. If `variable` +is sometimes a number, then uninitialized memory will sometimes be returned. + +### What's the real long-term fix? + +We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when +we need uninitialized memory. But that would break 1000s of packages. + +~~We believe the best solution is to:~~ + +~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ + +~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ + +#### Update + +We now support adding three new APIs: + +- `Buffer.from(value)` - convert from any type to a buffer +- `Buffer.alloc(size)` - create a zero-filled buffer +- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size + +This solves the core problem that affected `ws` and `bittorrent-dht` which is +`Buffer(variable)` getting tricked into taking a number argument. + +This way, existing code continues working and the impact on the npm ecosystem will be +minimal. Over time, npm maintainers can migrate performance-critical code to use +`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. + + +### Conclusion + +We think there's a serious design issue with the `Buffer` API as it exists today. It +promotes insecure software by putting high-risk functionality into a convenient API +with friendly "developer ergonomics". + +This wasn't merely a theoretical exercise because we found the issue in some of the +most popular npm packages. + +Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of +`buffer`. + +```js +var Buffer = require('safe-buffer').Buffer +``` + +Eventually, we hope that node.js core can switch to this new, safer behavior. We believe +the impact on the ecosystem would be minimal since it's not a breaking change. +Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while +older, insecure packages would magically become safe from this attack vector. + + +## links + +- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) +- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) +- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) + + +## credit + +The original issues in `bittorrent-dht` +([disclosure](https://nodesecurity.io/advisories/68)) and +`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by +[Mathias Buus](https://github.com/mafintosh) and +[Feross Aboukhadijeh](http://feross.org/). + +Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues +and for his work running the [Node Security Project](https://nodesecurity.io/). + +Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and +auditing the code. + + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/node_modules/form-data/node_modules/safe-buffer/index.d.ts b/node_modules/form-data/node_modules/safe-buffer/index.d.ts new file mode 100644 index 0000000..e9fed80 --- /dev/null +++ b/node_modules/form-data/node_modules/safe-buffer/index.d.ts @@ -0,0 +1,187 @@ +declare module "safe-buffer" { + export class Buffer { + length: number + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): { type: 'Buffer', data: any[] }; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): this; + indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; + + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + constructor (str: string, encoding?: string); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + constructor (size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + constructor (arrayBuffer: ArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: any[]); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + constructor (buffer: Buffer); + prototype: Buffer; + /** + * Allocates a new Buffer using an {array} of octets. + * + * @param array + */ + static from(array: any[]): Buffer; + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() + * @param byteOffset + * @param length + */ + static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; + /** + * Copies the passed {buffer} data onto a new Buffer instance. + * + * @param buffer + */ + static from(buffer: Buffer): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + * + * @param str + */ + static from(str: string, encoding?: string): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: Buffer[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Buffer, buf2: Buffer): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initalizing + */ + static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; + } +} \ No newline at end of file diff --git a/node_modules/form-data/node_modules/safe-buffer/index.js b/node_modules/form-data/node_modules/safe-buffer/index.js new file mode 100644 index 0000000..f8d3ec9 --- /dev/null +++ b/node_modules/form-data/node_modules/safe-buffer/index.js @@ -0,0 +1,65 @@ +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.prototype = Object.create(Buffer.prototype) + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} diff --git a/node_modules/form-data/node_modules/safe-buffer/package.json b/node_modules/form-data/node_modules/safe-buffer/package.json new file mode 100644 index 0000000..f2869e2 --- /dev/null +++ b/node_modules/form-data/node_modules/safe-buffer/package.json @@ -0,0 +1,51 @@ +{ + "name": "safe-buffer", + "description": "Safer Node.js Buffer API", + "version": "5.2.1", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/safe-buffer/issues" + }, + "devDependencies": { + "standard": "*", + "tape": "^5.0.0" + }, + "homepage": "https://github.com/feross/safe-buffer", + "keywords": [ + "buffer", + "buffer allocate", + "node security", + "safe", + "safe-buffer", + "security", + "uninitialized" + ], + "license": "MIT", + "main": "index.js", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "git://github.com/feross/safe-buffer.git" + }, + "scripts": { + "test": "standard && tape test/*.js" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] +} diff --git a/node_modules/form-data/package.json b/node_modules/form-data/package.json new file mode 100644 index 0000000..4a7cae7 --- /dev/null +++ b/node_modules/form-data/package.json @@ -0,0 +1,72 @@ +{ + "author": "Felix Geisendörfer (http://debuggable.com/)", + "name": "form-data", + "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", + "version": "2.5.2", + "repository": { + "type": "git", + "url": "git://github.com/form-data/form-data.git" + }, + "main": "./lib/form_data", + "browser": "./lib/browser", + "typings": "./index.d.ts", + "scripts": { + "pretest": "npm run lint", + "pretests-only": "rimraf coverage test/tmp", + "tests-only": "istanbul cover test/run.js", + "posttests-only": "istanbul report lcov text", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "lint": "eslint --ext=js,mjs .", + "report": "istanbul report lcov text", + "ci-lint": "is-node-modern 8 && npm run lint || is-node-not-modern 8", + "ci-test": "npm run tests-only && npm run browser && npm run report", + "predebug": "rimraf coverage test/tmp", + "debug": "verbose=1 ./test/run.js", + "browser": "browserify -t browserify-istanbul test/run-browser.js | obake --coverage", + "check": "istanbul check-coverage coverage/coverage*.json", + "files": "pkgfiles --sort=name", + "get-version": "node -e \"console.log(require('./package.json').version)\"", + "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md", + "restore-readme": "mv README.md.bak README.md", + "prepublish": "in-publish && npm run update-readme || not-in-publish", + "postpublish": "npm run restore-readme" + }, + "pre-commit": [ + "lint", + "ci-test", + "check" + ], + "engines": { + "node": ">= 0.12" + }, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12", + "safe-buffer": "^5.2.1" + }, + "devDependencies": { + "@types/node": "^12.0.10", + "browserify": "^13.1.1", + "browserify-istanbul": "^2.0.0", + "coveralls": "^3.0.4", + "cross-spawn": "^4.0.2", + "eslint": "^6.0.1", + "fake": "^0.2.2", + "far": "^0.0.7", + "formidable": "^1.0.17", + "in-publish": "^2.0.0", + "is-node-modern": "^1.0.0", + "istanbul": "^0.4.5", + "obake": "^0.1.2", + "phantomjs-prebuilt": "^2.1.13", + "pkgfiles": "^2.3.0", + "pre-commit": "^1.1.3", + "request": "^2.88.0", + "rimraf": "^2.7.1", + "tape": "^4.6.2", + "typescript": "^3.5.2" + }, + "license": "MIT" +} diff --git a/node_modules/isomorphic-form-data/License b/node_modules/isomorphic-form-data/License new file mode 100644 index 0000000..c7ff12a --- /dev/null +++ b/node_modules/isomorphic-form-data/License @@ -0,0 +1,19 @@ +Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. diff --git a/node_modules/isomorphic-form-data/Readme.md b/node_modules/isomorphic-form-data/Readme.md new file mode 100644 index 0000000..7b9e4da --- /dev/null +++ b/node_modules/isomorphic-form-data/Readme.md @@ -0,0 +1,46 @@ +A library to create readable ```"multipart/form-data"``` isomorphically in node and the browser. + +[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface +[streams2-thing]: http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions + +## Install + +``` +npm install isomorphic-form-data +``` + +## Usage + +In this example we are constructing a form with 3 fields that contain a string, +a buffer and a file stream. + +``` javascript +require('isomorphic-form-data'); +var fs = require('fs'); + +var form = new FormData(); +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_file', fs.createReadStream('/foo/bar.jpg')); +``` + +#### node-fetch + +You can submit a form using [node-fetch](https://github.com/matthew-andrews/isomorphic-fetch): + +```javascript +var form = new FormData(); + +form.append('a', 1); + +fetch('http://example.com', { method: 'POST', body: form }) + .then(function(res) { + return res.json(); + }).then(function(json) { + console.log(json); + }); +``` + +## License + +Form-Data is licensed under the MIT license. diff --git a/node_modules/isomorphic-form-data/lib/browser.js b/node_modules/isomorphic-form-data/lib/browser.js new file mode 100644 index 0000000..8b4c9fa --- /dev/null +++ b/node_modules/isomorphic-form-data/lib/browser.js @@ -0,0 +1 @@ +module.exports = window.FormData diff --git a/node_modules/isomorphic-form-data/lib/index.js b/node_modules/isomorphic-form-data/lib/index.js new file mode 100644 index 0000000..fd2c197 --- /dev/null +++ b/node_modules/isomorphic-form-data/lib/index.js @@ -0,0 +1 @@ +global.FormData = module.exports = require('form-data') diff --git a/node_modules/isomorphic-form-data/package.json b/node_modules/isomorphic-form-data/package.json new file mode 100644 index 0000000..6ce3fcf --- /dev/null +++ b/node_modules/isomorphic-form-data/package.json @@ -0,0 +1,22 @@ +{ + "author": "Dylan Piercey ", + "name": "isomorphic-form-data", + "description": "A library to create readable \"multipart/form-data\" in node and the browser.", + "version": "2.0.0", + "repository": { + "type": "git", + "url": "git://github.com/form-data/isomorphic-form-data.git" + }, + "main": "./lib/index", + "browser": "./lib/browser", + "scripts": { + "test": "./test/run.js" + }, + "pre-commit": [ + "test" + ], + "dependencies": { + "form-data": "^2.3.2" + }, + "license": "MIT" +} diff --git a/node_modules/mime-db/HISTORY.md b/node_modules/mime-db/HISTORY.md new file mode 100644 index 0000000..7436f64 --- /dev/null +++ b/node_modules/mime-db/HISTORY.md @@ -0,0 +1,507 @@ +1.52.0 / 2022-02-21 +=================== + + * Add extensions from IANA for more `image/*` types + * Add extension `.asc` to `application/pgp-keys` + * Add extensions to various XML types + * Add new upstream MIME types + +1.51.0 / 2021-11-08 +=================== + + * Add new upstream MIME types + * Mark `image/vnd.microsoft.icon` as compressible + * Mark `image/vnd.ms-dds` as compressible + +1.50.0 / 2021-09-15 +=================== + + * Add deprecated iWorks mime types and extensions + * Add new upstream MIME types + +1.49.0 / 2021-07-26 +=================== + + * Add extension `.trig` to `application/trig` + * Add new upstream MIME types + +1.48.0 / 2021-05-30 +=================== + + * Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + * Add new upstream MIME types + * Mark `text/yaml` as compressible + +1.47.0 / 2021-04-01 +=================== + + * Add new upstream MIME types + * Remove ambigious extensions from IANA for `application/*+xml` types + * Update primary extension to `.es` for `application/ecmascript` + +1.46.0 / 2021-02-13 +=================== + + * Add extension `.amr` to `audio/amr` + * Add extension `.m4s` to `video/iso.segment` + * Add extension `.opus` to `audio/ogg` + * Add new upstream MIME types + +1.45.0 / 2020-09-22 +=================== + + * Add `application/ubjson` with extension `.ubj` + * Add `image/avif` with extension `.avif` + * Add `image/ktx2` with extension `.ktx2` + * Add extension `.dbf` to `application/vnd.dbf` + * Add extension `.rar` to `application/vnd.rar` + * Add extension `.td` to `application/urc-targetdesc+xml` + * Add new upstream MIME types + * Fix extension of `application/vnd.apple.keynote` to be `.key` + +1.44.0 / 2020-04-22 +=================== + + * Add charsets from IANA + * Add extension `.cjs` to `application/node` + * Add new upstream MIME types + +1.43.0 / 2020-01-05 +=================== + + * Add `application/x-keepass2` with extension `.kdbx` + * Add extension `.mxmf` to `audio/mobile-xmf` + * Add extensions from IANA for `application/*+xml` types + * Add new upstream MIME types + +1.42.0 / 2019-09-25 +=================== + + * Add `image/vnd.ms-dds` with extension `.dds` + * Add new upstream MIME types + * Remove compressible from `multipart/mixed` + +1.41.0 / 2019-08-30 +=================== + + * Add new upstream MIME types + * Add `application/toml` with extension `.toml` + * Mark `font/ttf` as compressible + +1.40.0 / 2019-04-20 +=================== + + * Add extensions from IANA for `model/*` types + * Add `text/mdx` with extension `.mdx` + +1.39.0 / 2019-04-04 +=================== + + * Add extensions `.siv` and `.sieve` to `application/sieve` + * Add new upstream MIME types + +1.38.0 / 2019-02-04 +=================== + + * Add extension `.nq` to `application/n-quads` + * Add extension `.nt` to `application/n-triples` + * Add new upstream MIME types + * Mark `text/less` as compressible + +1.37.0 / 2018-10-19 +=================== + + * Add extensions to HEIC image types + * Add new upstream MIME types + +1.36.0 / 2018-08-20 +=================== + + * Add Apple file extensions from IANA + * Add extensions from IANA for `image/*` types + * Add new upstream MIME types + +1.35.0 / 2018-07-15 +=================== + + * Add extension `.owl` to `application/rdf+xml` + * Add new upstream MIME types + - Removes extension `.woff` from `application/font-woff` + +1.34.0 / 2018-06-03 +=================== + + * Add extension `.csl` to `application/vnd.citationstyles.style+xml` + * Add extension `.es` to `application/ecmascript` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/turtle` + * Mark all XML-derived types as compressible + +1.33.0 / 2018-02-15 +=================== + + * Add extensions from IANA for `message/*` types + * Add new upstream MIME types + * Fix some incorrect OOXML types + * Remove `application/font-woff2` + +1.32.0 / 2017-11-29 +=================== + + * Add new upstream MIME types + * Update `text/hjson` to registered `application/hjson` + * Add `text/shex` with extension `.shex` + +1.31.0 / 2017-10-25 +=================== + + * Add `application/raml+yaml` with extension `.raml` + * Add `application/wasm` with extension `.wasm` + * Add new `font` type from IANA + * Add new upstream font extensions + * Add new upstream MIME types + * Add extensions for JPEG-2000 images + +1.30.0 / 2017-08-27 +=================== + + * Add `application/vnd.ms-outlook` + * Add `application/x-arj` + * Add extension `.mjs` to `application/javascript` + * Add glTF types and extensions + * Add new upstream MIME types + * Add `text/x-org` + * Add VirtualBox MIME types + * Fix `source` records for `video/*` types that are IANA + * Update `font/opentype` to registered `font/otf` + +1.29.0 / 2017-07-10 +=================== + + * Add `application/fido.trusted-apps+json` + * Add extension `.wadl` to `application/vnd.sun.wadl+xml` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/css` + +1.28.0 / 2017-05-14 +=================== + + * Add new upstream MIME types + * Add extension `.gz` to `application/gzip` + * Update extensions `.md` and `.markdown` to be `text/markdown` + +1.27.0 / 2017-03-16 +=================== + + * Add new upstream MIME types + * Add `image/apng` with extension `.apng` + +1.26.0 / 2017-01-14 +=================== + + * Add new upstream MIME types + * Add extension `.geojson` to `application/geo+json` + +1.25.0 / 2016-11-11 +=================== + + * Add new upstream MIME types + +1.24.0 / 2016-09-18 +=================== + + * Add `audio/mp3` + * Add new upstream MIME types + +1.23.0 / 2016-05-01 +=================== + + * Add new upstream MIME types + * Add extension `.3gpp` to `audio/3gpp` + +1.22.0 / 2016-02-15 +=================== + + * Add `text/slim` + * Add extension `.rng` to `application/xml` + * Add new upstream MIME types + * Fix extension of `application/dash+xml` to be `.mpd` + * Update primary extension to `.m4a` for `audio/mp4` + +1.21.0 / 2016-01-06 +=================== + + * Add Google document types + * Add new upstream MIME types + +1.20.0 / 2015-11-10 +=================== + + * Add `text/x-suse-ymp` + * Add new upstream MIME types + +1.19.0 / 2015-09-17 +=================== + + * Add `application/vnd.apple.pkpass` + * Add new upstream MIME types + +1.18.0 / 2015-09-03 +=================== + + * Add new upstream MIME types + +1.17.0 / 2015-08-13 +=================== + + * Add `application/x-msdos-program` + * Add `audio/g711-0` + * Add `image/vnd.mozilla.apng` + * Add extension `.exe` to `application/x-msdos-program` + +1.16.0 / 2015-07-29 +=================== + + * Add `application/vnd.uri-map` + +1.15.0 / 2015-07-13 +=================== + + * Add `application/x-httpd-php` + +1.14.0 / 2015-06-25 +=================== + + * Add `application/scim+json` + * Add `application/vnd.3gpp.ussd+xml` + * Add `application/vnd.biopax.rdf+xml` + * Add `text/x-processing` + +1.13.0 / 2015-06-07 +=================== + + * Add nginx as a source + * Add `application/x-cocoa` + * Add `application/x-java-archive-diff` + * Add `application/x-makeself` + * Add `application/x-perl` + * Add `application/x-pilot` + * Add `application/x-redhat-package-manager` + * Add `application/x-sea` + * Add `audio/x-m4a` + * Add `audio/x-realaudio` + * Add `image/x-jng` + * Add `text/mathml` + +1.12.0 / 2015-06-05 +=================== + + * Add `application/bdoc` + * Add `application/vnd.hyperdrive+json` + * Add `application/x-bdoc` + * Add extension `.rtf` to `text/rtf` + +1.11.0 / 2015-05-31 +=================== + + * Add `audio/wav` + * Add `audio/wave` + * Add extension `.litcoffee` to `text/coffeescript` + * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data` + * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install` + +1.10.0 / 2015-05-19 +=================== + + * Add `application/vnd.balsamiq.bmpr` + * Add `application/vnd.microsoft.portable-executable` + * Add `application/x-ns-proxy-autoconfig` + +1.9.1 / 2015-04-19 +================== + + * Remove `.json` extension from `application/manifest+json` + - This is causing bugs downstream + +1.9.0 / 2015-04-19 +================== + + * Add `application/manifest+json` + * Add `application/vnd.micro+json` + * Add `image/vnd.zbrush.pcx` + * Add `image/x-ms-bmp` + +1.8.0 / 2015-03-13 +================== + + * Add `application/vnd.citationstyles.style+xml` + * Add `application/vnd.fastcopy-disk-image` + * Add `application/vnd.gov.sk.xmldatacontainer+xml` + * Add extension `.jsonld` to `application/ld+json` + +1.7.0 / 2015-02-08 +================== + + * Add `application/vnd.gerber` + * Add `application/vnd.msa-disk-image` + +1.6.1 / 2015-02-05 +================== + + * Community extensions ownership transferred from `node-mime` + +1.6.0 / 2015-01-29 +================== + + * Add `application/jose` + * Add `application/jose+json` + * Add `application/json-seq` + * Add `application/jwk+json` + * Add `application/jwk-set+json` + * Add `application/jwt` + * Add `application/rdap+json` + * Add `application/vnd.gov.sk.e-form+xml` + * Add `application/vnd.ims.imsccv1p3` + +1.5.0 / 2014-12-30 +================== + + * Add `application/vnd.oracle.resource+json` + * Fix various invalid MIME type entries + - `application/mbox+xml` + - `application/oscp-response` + - `application/vwg-multiplexed` + - `audio/g721` + +1.4.0 / 2014-12-21 +================== + + * Add `application/vnd.ims.imsccv1p2` + * Fix various invalid MIME type entries + - `application/vnd-acucobol` + - `application/vnd-curl` + - `application/vnd-dart` + - `application/vnd-dxr` + - `application/vnd-fdf` + - `application/vnd-mif` + - `application/vnd-sema` + - `application/vnd-wap-wmlc` + - `application/vnd.adobe.flash-movie` + - `application/vnd.dece-zip` + - `application/vnd.dvb_service` + - `application/vnd.micrografx-igx` + - `application/vnd.sealed-doc` + - `application/vnd.sealed-eml` + - `application/vnd.sealed-mht` + - `application/vnd.sealed-ppt` + - `application/vnd.sealed-tiff` + - `application/vnd.sealed-xls` + - `application/vnd.sealedmedia.softseal-html` + - `application/vnd.sealedmedia.softseal-pdf` + - `application/vnd.wap-slc` + - `application/vnd.wap-wbxml` + - `audio/vnd.sealedmedia.softseal-mpeg` + - `image/vnd-djvu` + - `image/vnd-svf` + - `image/vnd-wap-wbmp` + - `image/vnd.sealed-png` + - `image/vnd.sealedmedia.softseal-gif` + - `image/vnd.sealedmedia.softseal-jpg` + - `model/vnd-dwf` + - `model/vnd.parasolid.transmit-binary` + - `model/vnd.parasolid.transmit-text` + - `text/vnd-a` + - `text/vnd-curl` + - `text/vnd.wap-wml` + * Remove example template MIME types + - `application/example` + - `audio/example` + - `image/example` + - `message/example` + - `model/example` + - `multipart/example` + - `text/example` + - `video/example` + +1.3.1 / 2014-12-16 +================== + + * Fix missing extensions + - `application/json5` + - `text/hjson` + +1.3.0 / 2014-12-07 +================== + + * Add `application/a2l` + * Add `application/aml` + * Add `application/atfx` + * Add `application/atxml` + * Add `application/cdfx+xml` + * Add `application/dii` + * Add `application/json5` + * Add `application/lxf` + * Add `application/mf4` + * Add `application/vnd.apache.thrift.compact` + * Add `application/vnd.apache.thrift.json` + * Add `application/vnd.coffeescript` + * Add `application/vnd.enphase.envoy` + * Add `application/vnd.ims.imsccv1p1` + * Add `text/csv-schema` + * Add `text/hjson` + * Add `text/markdown` + * Add `text/yaml` + +1.2.0 / 2014-11-09 +================== + + * Add `application/cea` + * Add `application/dit` + * Add `application/vnd.gov.sk.e-form+zip` + * Add `application/vnd.tmd.mediaflex.api+xml` + * Type `application/epub+zip` is now IANA-registered + +1.1.2 / 2014-10-23 +================== + + * Rebuild database for `application/x-www-form-urlencoded` change + +1.1.1 / 2014-10-20 +================== + + * Mark `application/x-www-form-urlencoded` as compressible. + +1.1.0 / 2014-09-28 +================== + + * Add `application/font-woff2` + +1.0.3 / 2014-09-25 +================== + + * Fix engine requirement in package + +1.0.2 / 2014-09-25 +================== + + * Add `application/coap-group+json` + * Add `application/dcd` + * Add `application/vnd.apache.thrift.binary` + * Add `image/vnd.tencent.tap` + * Mark all JSON-derived types as compressible + * Update `text/vtt` data + +1.0.1 / 2014-08-30 +================== + + * Fix extension ordering + +1.0.0 / 2014-08-30 +================== + + * Add `application/atf` + * Add `application/merge-patch+json` + * Add `multipart/x-mixed-replace` + * Add `source: 'apache'` metadata + * Add `source: 'iana'` metadata + * Remove badly-assumed charset data diff --git a/node_modules/mime-db/LICENSE b/node_modules/mime-db/LICENSE new file mode 100644 index 0000000..0751cb1 --- /dev/null +++ b/node_modules/mime-db/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mime-db/README.md b/node_modules/mime-db/README.md new file mode 100644 index 0000000..5a8fcfe --- /dev/null +++ b/node_modules/mime-db/README.md @@ -0,0 +1,100 @@ +# mime-db + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][ci-image]][ci-url] +[![Coverage Status][coveralls-image]][coveralls-url] + +This is a large database of mime types and information about them. +It consists of a single, public JSON file and does not include any logic, +allowing it to remain as un-opinionated as possible with an API. +It aggregates data from the following sources: + +- http://www.iana.org/assignments/media-types/media-types.xhtml +- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types +- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types + +## Installation + +```bash +npm install mime-db +``` + +### Database Download + +If you're crazy enough to use this in the browser, you can just grab the +JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to +replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags) +as the JSON format may change in the future. + +``` +https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json +``` + +## Usage + +```js +var db = require('mime-db') + +// grab data on .js files +var data = db['application/javascript'] +``` + +## Data Structure + +The JSON file is a map lookup for lowercased mime types. +Each mime type has the following properties: + +- `.source` - where the mime type is defined. + If not set, it's probably a custom media type. + - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) + - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml) + - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) +- `.extensions[]` - known extensions associated with this mime type. +- `.compressible` - whether a file of this type can be gzipped. +- `.charset` - the default charset associated with this type, if any. + +If unknown, every property could be `undefined`. + +## Contributing + +To edit the database, only make PRs against `src/custom-types.json` or +`src/custom-suffix.json`. + +The `src/custom-types.json` file is a JSON object with the MIME type as the +keys and the values being an object with the following keys: + +- `compressible` - leave out if you don't know, otherwise `true`/`false` to + indicate whether the data represented by the type is typically compressible. +- `extensions` - include an array of file extensions that are associated with + the type. +- `notes` - human-readable notes about the type, typically what the type is. +- `sources` - include an array of URLs of where the MIME type and the associated + extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source); + links to type aggregating sites and Wikipedia are _not acceptable_. + +To update the build, run `npm run build`. + +### Adding Custom Media Types + +The best way to get new media types included in this library is to register +them with the IANA. The community registration procedure is outlined in +[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types +registered with the IANA are automatically pulled into this library. + +If that is not possible / feasible, they can be added directly here as a +"custom" type. To do this, it is required to have a primary source that +definitively lists the media type. If an extension is going to be listed as +associateed with this media type, the source must definitively link the +media type and extension as well. + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-db/master?label=ci +[ci-url]: https://github.com/jshttp/mime-db/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master +[node-image]: https://badgen.net/npm/node/mime-db +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-db +[npm-url]: https://npmjs.org/package/mime-db +[npm-version-image]: https://badgen.net/npm/v/mime-db diff --git a/node_modules/mime-db/db.json b/node_modules/mime-db/db.json new file mode 100644 index 0000000..eb9c42c --- /dev/null +++ b/node_modules/mime-db/db.json @@ -0,0 +1,8519 @@ +{ + "application/1d-interleaved-parityfec": { + "source": "iana" + }, + "application/3gpdash-qoe-report+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/3gpp-ims+xml": { + "source": "iana", + "compressible": true + }, + "application/3gpphal+json": { + "source": "iana", + "compressible": true + }, + "application/3gpphalforms+json": { + "source": "iana", + "compressible": true + }, + "application/a2l": { + "source": "iana" + }, + "application/ace+cbor": { + "source": "iana" + }, + "application/activemessage": { + "source": "iana" + }, + "application/activity+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-directory+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcost+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcostparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointprop+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointpropparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-error+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamcontrol+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamparams+json": { + "source": "iana", + "compressible": true + }, + "application/aml": { + "source": "iana" + }, + "application/andrew-inset": { + "source": "iana", + "extensions": ["ez"] + }, + "application/applefile": { + "source": "iana" + }, + "application/applixware": { + "source": "apache", + "extensions": ["aw"] + }, + "application/at+jwt": { + "source": "iana" + }, + "application/atf": { + "source": "iana" + }, + "application/atfx": { + "source": "iana" + }, + "application/atom+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atom"] + }, + "application/atomcat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomcat"] + }, + "application/atomdeleted+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomdeleted"] + }, + "application/atomicmail": { + "source": "iana" + }, + "application/atomsvc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomsvc"] + }, + "application/atsc-dwd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dwd"] + }, + "application/atsc-dynamic-event-message": { + "source": "iana" + }, + "application/atsc-held+xml": { + "source": "iana", + "compressible": true, + "extensions": ["held"] + }, + "application/atsc-rdt+json": { + "source": "iana", + "compressible": true + }, + "application/atsc-rsat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsat"] + }, + "application/atxml": { + "source": "iana" + }, + "application/auth-policy+xml": { + "source": "iana", + "compressible": true + }, + "application/bacnet-xdd+zip": { + "source": "iana", + "compressible": false + }, + "application/batch-smtp": { + "source": "iana" + }, + "application/bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/beep+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/calendar+json": { + "source": "iana", + "compressible": true + }, + "application/calendar+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xcs"] + }, + "application/call-completion": { + "source": "iana" + }, + "application/cals-1840": { + "source": "iana" + }, + "application/captive+json": { + "source": "iana", + "compressible": true + }, + "application/cbor": { + "source": "iana" + }, + "application/cbor-seq": { + "source": "iana" + }, + "application/cccex": { + "source": "iana" + }, + "application/ccmp+xml": { + "source": "iana", + "compressible": true + }, + "application/ccxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ccxml"] + }, + "application/cdfx+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdfx"] + }, + "application/cdmi-capability": { + "source": "iana", + "extensions": ["cdmia"] + }, + "application/cdmi-container": { + "source": "iana", + "extensions": ["cdmic"] + }, + "application/cdmi-domain": { + "source": "iana", + "extensions": ["cdmid"] + }, + "application/cdmi-object": { + "source": "iana", + "extensions": ["cdmio"] + }, + "application/cdmi-queue": { + "source": "iana", + "extensions": ["cdmiq"] + }, + "application/cdni": { + "source": "iana" + }, + "application/cea": { + "source": "iana" + }, + "application/cea-2018+xml": { + "source": "iana", + "compressible": true + }, + "application/cellml+xml": { + "source": "iana", + "compressible": true + }, + "application/cfw": { + "source": "iana" + }, + "application/city+json": { + "source": "iana", + "compressible": true + }, + "application/clr": { + "source": "iana" + }, + "application/clue+xml": { + "source": "iana", + "compressible": true + }, + "application/clue_info+xml": { + "source": "iana", + "compressible": true + }, + "application/cms": { + "source": "iana" + }, + "application/cnrp+xml": { + "source": "iana", + "compressible": true + }, + "application/coap-group+json": { + "source": "iana", + "compressible": true + }, + "application/coap-payload": { + "source": "iana" + }, + "application/commonground": { + "source": "iana" + }, + "application/conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/cose": { + "source": "iana" + }, + "application/cose-key": { + "source": "iana" + }, + "application/cose-key-set": { + "source": "iana" + }, + "application/cpl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cpl"] + }, + "application/csrattrs": { + "source": "iana" + }, + "application/csta+xml": { + "source": "iana", + "compressible": true + }, + "application/cstadata+xml": { + "source": "iana", + "compressible": true + }, + "application/csvm+json": { + "source": "iana", + "compressible": true + }, + "application/cu-seeme": { + "source": "apache", + "extensions": ["cu"] + }, + "application/cwt": { + "source": "iana" + }, + "application/cybercash": { + "source": "iana" + }, + "application/dart": { + "compressible": true + }, + "application/dash+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpd"] + }, + "application/dash-patch+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpp"] + }, + "application/dashdelta": { + "source": "iana" + }, + "application/davmount+xml": { + "source": "iana", + "compressible": true, + "extensions": ["davmount"] + }, + "application/dca-rft": { + "source": "iana" + }, + "application/dcd": { + "source": "iana" + }, + "application/dec-dx": { + "source": "iana" + }, + "application/dialog-info+xml": { + "source": "iana", + "compressible": true + }, + "application/dicom": { + "source": "iana" + }, + "application/dicom+json": { + "source": "iana", + "compressible": true + }, + "application/dicom+xml": { + "source": "iana", + "compressible": true + }, + "application/dii": { + "source": "iana" + }, + "application/dit": { + "source": "iana" + }, + "application/dns": { + "source": "iana" + }, + "application/dns+json": { + "source": "iana", + "compressible": true + }, + "application/dns-message": { + "source": "iana" + }, + "application/docbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dbk"] + }, + "application/dots+cbor": { + "source": "iana" + }, + "application/dskpp+xml": { + "source": "iana", + "compressible": true + }, + "application/dssc+der": { + "source": "iana", + "extensions": ["dssc"] + }, + "application/dssc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdssc"] + }, + "application/dvcs": { + "source": "iana" + }, + "application/ecmascript": { + "source": "iana", + "compressible": true, + "extensions": ["es","ecma"] + }, + "application/edi-consent": { + "source": "iana" + }, + "application/edi-x12": { + "source": "iana", + "compressible": false + }, + "application/edifact": { + "source": "iana", + "compressible": false + }, + "application/efi": { + "source": "iana" + }, + "application/elm+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/elm+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.cap+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/emergencycalldata.comment+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.control+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.deviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.ecall.msd": { + "source": "iana" + }, + "application/emergencycalldata.providerinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.serviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.subscriberinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.veds+xml": { + "source": "iana", + "compressible": true + }, + "application/emma+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emma"] + }, + "application/emotionml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emotionml"] + }, + "application/encaprtp": { + "source": "iana" + }, + "application/epp+xml": { + "source": "iana", + "compressible": true + }, + "application/epub+zip": { + "source": "iana", + "compressible": false, + "extensions": ["epub"] + }, + "application/eshop": { + "source": "iana" + }, + "application/exi": { + "source": "iana", + "extensions": ["exi"] + }, + "application/expect-ct-report+json": { + "source": "iana", + "compressible": true + }, + "application/express": { + "source": "iana", + "extensions": ["exp"] + }, + "application/fastinfoset": { + "source": "iana" + }, + "application/fastsoap": { + "source": "iana" + }, + "application/fdt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fdt"] + }, + "application/fhir+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fhir+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fido.trusted-apps+json": { + "compressible": true + }, + "application/fits": { + "source": "iana" + }, + "application/flexfec": { + "source": "iana" + }, + "application/font-sfnt": { + "source": "iana" + }, + "application/font-tdpfr": { + "source": "iana", + "extensions": ["pfr"] + }, + "application/font-woff": { + "source": "iana", + "compressible": false + }, + "application/framework-attributes+xml": { + "source": "iana", + "compressible": true + }, + "application/geo+json": { + "source": "iana", + "compressible": true, + "extensions": ["geojson"] + }, + "application/geo+json-seq": { + "source": "iana" + }, + "application/geopackage+sqlite3": { + "source": "iana" + }, + "application/geoxacml+xml": { + "source": "iana", + "compressible": true + }, + "application/gltf-buffer": { + "source": "iana" + }, + "application/gml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["gml"] + }, + "application/gpx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["gpx"] + }, + "application/gxf": { + "source": "apache", + "extensions": ["gxf"] + }, + "application/gzip": { + "source": "iana", + "compressible": false, + "extensions": ["gz"] + }, + "application/h224": { + "source": "iana" + }, + "application/held+xml": { + "source": "iana", + "compressible": true + }, + "application/hjson": { + "extensions": ["hjson"] + }, + "application/http": { + "source": "iana" + }, + "application/hyperstudio": { + "source": "iana", + "extensions": ["stk"] + }, + "application/ibe-key-request+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pkg-reply+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pp-data": { + "source": "iana" + }, + "application/iges": { + "source": "iana" + }, + "application/im-iscomposing+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/index": { + "source": "iana" + }, + "application/index.cmd": { + "source": "iana" + }, + "application/index.obj": { + "source": "iana" + }, + "application/index.response": { + "source": "iana" + }, + "application/index.vnd": { + "source": "iana" + }, + "application/inkml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ink","inkml"] + }, + "application/iotp": { + "source": "iana" + }, + "application/ipfix": { + "source": "iana", + "extensions": ["ipfix"] + }, + "application/ipp": { + "source": "iana" + }, + "application/isup": { + "source": "iana" + }, + "application/its+xml": { + "source": "iana", + "compressible": true, + "extensions": ["its"] + }, + "application/java-archive": { + "source": "apache", + "compressible": false, + "extensions": ["jar","war","ear"] + }, + "application/java-serialized-object": { + "source": "apache", + "compressible": false, + "extensions": ["ser"] + }, + "application/java-vm": { + "source": "apache", + "compressible": false, + "extensions": ["class"] + }, + "application/javascript": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["js","mjs"] + }, + "application/jf2feed+json": { + "source": "iana", + "compressible": true + }, + "application/jose": { + "source": "iana" + }, + "application/jose+json": { + "source": "iana", + "compressible": true + }, + "application/jrd+json": { + "source": "iana", + "compressible": true + }, + "application/jscalendar+json": { + "source": "iana", + "compressible": true + }, + "application/json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["json","map"] + }, + "application/json-patch+json": { + "source": "iana", + "compressible": true + }, + "application/json-seq": { + "source": "iana" + }, + "application/json5": { + "extensions": ["json5"] + }, + "application/jsonml+json": { + "source": "apache", + "compressible": true, + "extensions": ["jsonml"] + }, + "application/jwk+json": { + "source": "iana", + "compressible": true + }, + "application/jwk-set+json": { + "source": "iana", + "compressible": true + }, + "application/jwt": { + "source": "iana" + }, + "application/kpml-request+xml": { + "source": "iana", + "compressible": true + }, + "application/kpml-response+xml": { + "source": "iana", + "compressible": true + }, + "application/ld+json": { + "source": "iana", + "compressible": true, + "extensions": ["jsonld"] + }, + "application/lgr+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lgr"] + }, + "application/link-format": { + "source": "iana" + }, + "application/load-control+xml": { + "source": "iana", + "compressible": true + }, + "application/lost+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lostxml"] + }, + "application/lostsync+xml": { + "source": "iana", + "compressible": true + }, + "application/lpf+zip": { + "source": "iana", + "compressible": false + }, + "application/lxf": { + "source": "iana" + }, + "application/mac-binhex40": { + "source": "iana", + "extensions": ["hqx"] + }, + "application/mac-compactpro": { + "source": "apache", + "extensions": ["cpt"] + }, + "application/macwriteii": { + "source": "iana" + }, + "application/mads+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mads"] + }, + "application/manifest+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["webmanifest"] + }, + "application/marc": { + "source": "iana", + "extensions": ["mrc"] + }, + "application/marcxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mrcx"] + }, + "application/mathematica": { + "source": "iana", + "extensions": ["ma","nb","mb"] + }, + "application/mathml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mathml"] + }, + "application/mathml-content+xml": { + "source": "iana", + "compressible": true + }, + "application/mathml-presentation+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-associated-procedure-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-deregister+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-envelope+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-protection-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-reception-report+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-schedule+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-user-service-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbox": { + "source": "iana", + "extensions": ["mbox"] + }, + "application/media-policy-dataset+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpf"] + }, + "application/media_control+xml": { + "source": "iana", + "compressible": true + }, + "application/mediaservercontrol+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mscml"] + }, + "application/merge-patch+json": { + "source": "iana", + "compressible": true + }, + "application/metalink+xml": { + "source": "apache", + "compressible": true, + "extensions": ["metalink"] + }, + "application/metalink4+xml": { + "source": "iana", + "compressible": true, + "extensions": ["meta4"] + }, + "application/mets+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mets"] + }, + "application/mf4": { + "source": "iana" + }, + "application/mikey": { + "source": "iana" + }, + "application/mipc": { + "source": "iana" + }, + "application/missing-blocks+cbor-seq": { + "source": "iana" + }, + "application/mmt-aei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["maei"] + }, + "application/mmt-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musd"] + }, + "application/mods+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mods"] + }, + "application/moss-keys": { + "source": "iana" + }, + "application/moss-signature": { + "source": "iana" + }, + "application/mosskey-data": { + "source": "iana" + }, + "application/mosskey-request": { + "source": "iana" + }, + "application/mp21": { + "source": "iana", + "extensions": ["m21","mp21"] + }, + "application/mp4": { + "source": "iana", + "extensions": ["mp4s","m4p"] + }, + "application/mpeg4-generic": { + "source": "iana" + }, + "application/mpeg4-iod": { + "source": "iana" + }, + "application/mpeg4-iod-xmt": { + "source": "iana" + }, + "application/mrb-consumer+xml": { + "source": "iana", + "compressible": true + }, + "application/mrb-publish+xml": { + "source": "iana", + "compressible": true + }, + "application/msc-ivr+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/msc-mixer+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/msword": { + "source": "iana", + "compressible": false, + "extensions": ["doc","dot"] + }, + "application/mud+json": { + "source": "iana", + "compressible": true + }, + "application/multipart-core": { + "source": "iana" + }, + "application/mxf": { + "source": "iana", + "extensions": ["mxf"] + }, + "application/n-quads": { + "source": "iana", + "extensions": ["nq"] + }, + "application/n-triples": { + "source": "iana", + "extensions": ["nt"] + }, + "application/nasdata": { + "source": "iana" + }, + "application/news-checkgroups": { + "source": "iana", + "charset": "US-ASCII" + }, + "application/news-groupinfo": { + "source": "iana", + "charset": "US-ASCII" + }, + "application/news-transmission": { + "source": "iana" + }, + "application/nlsml+xml": { + "source": "iana", + "compressible": true + }, + "application/node": { + "source": "iana", + "extensions": ["cjs"] + }, + "application/nss": { + "source": "iana" + }, + "application/oauth-authz-req+jwt": { + "source": "iana" + }, + "application/oblivious-dns-message": { + "source": "iana" + }, + "application/ocsp-request": { + "source": "iana" + }, + "application/ocsp-response": { + "source": "iana" + }, + "application/octet-stream": { + "source": "iana", + "compressible": false, + "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"] + }, + "application/oda": { + "source": "iana", + "extensions": ["oda"] + }, + "application/odm+xml": { + "source": "iana", + "compressible": true + }, + "application/odx": { + "source": "iana" + }, + "application/oebps-package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["opf"] + }, + "application/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogx"] + }, + "application/omdoc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["omdoc"] + }, + "application/onenote": { + "source": "apache", + "extensions": ["onetoc","onetoc2","onetmp","onepkg"] + }, + "application/opc-nodeset+xml": { + "source": "iana", + "compressible": true + }, + "application/oscore": { + "source": "iana" + }, + "application/oxps": { + "source": "iana", + "extensions": ["oxps"] + }, + "application/p21": { + "source": "iana" + }, + "application/p21+zip": { + "source": "iana", + "compressible": false + }, + "application/p2p-overlay+xml": { + "source": "iana", + "compressible": true, + "extensions": ["relo"] + }, + "application/parityfec": { + "source": "iana" + }, + "application/passport": { + "source": "iana" + }, + "application/patch-ops-error+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xer"] + }, + "application/pdf": { + "source": "iana", + "compressible": false, + "extensions": ["pdf"] + }, + "application/pdx": { + "source": "iana" + }, + "application/pem-certificate-chain": { + "source": "iana" + }, + "application/pgp-encrypted": { + "source": "iana", + "compressible": false, + "extensions": ["pgp"] + }, + "application/pgp-keys": { + "source": "iana", + "extensions": ["asc"] + }, + "application/pgp-signature": { + "source": "iana", + "extensions": ["asc","sig"] + }, + "application/pics-rules": { + "source": "apache", + "extensions": ["prf"] + }, + "application/pidf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/pidf-diff+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/pkcs10": { + "source": "iana", + "extensions": ["p10"] + }, + "application/pkcs12": { + "source": "iana" + }, + "application/pkcs7-mime": { + "source": "iana", + "extensions": ["p7m","p7c"] + }, + "application/pkcs7-signature": { + "source": "iana", + "extensions": ["p7s"] + }, + "application/pkcs8": { + "source": "iana", + "extensions": ["p8"] + }, + "application/pkcs8-encrypted": { + "source": "iana" + }, + "application/pkix-attr-cert": { + "source": "iana", + "extensions": ["ac"] + }, + "application/pkix-cert": { + "source": "iana", + "extensions": ["cer"] + }, + "application/pkix-crl": { + "source": "iana", + "extensions": ["crl"] + }, + "application/pkix-pkipath": { + "source": "iana", + "extensions": ["pkipath"] + }, + "application/pkixcmp": { + "source": "iana", + "extensions": ["pki"] + }, + "application/pls+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pls"] + }, + "application/poc-settings+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/postscript": { + "source": "iana", + "compressible": true, + "extensions": ["ai","eps","ps"] + }, + "application/ppsp-tracker+json": { + "source": "iana", + "compressible": true + }, + "application/problem+json": { + "source": "iana", + "compressible": true + }, + "application/problem+xml": { + "source": "iana", + "compressible": true + }, + "application/provenance+xml": { + "source": "iana", + "compressible": true, + "extensions": ["provx"] + }, + "application/prs.alvestrand.titrax-sheet": { + "source": "iana" + }, + "application/prs.cww": { + "source": "iana", + "extensions": ["cww"] + }, + "application/prs.cyn": { + "source": "iana", + "charset": "7-BIT" + }, + "application/prs.hpub+zip": { + "source": "iana", + "compressible": false + }, + "application/prs.nprend": { + "source": "iana" + }, + "application/prs.plucker": { + "source": "iana" + }, + "application/prs.rdf-xml-crypt": { + "source": "iana" + }, + "application/prs.xsf+xml": { + "source": "iana", + "compressible": true + }, + "application/pskc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pskcxml"] + }, + "application/pvd+json": { + "source": "iana", + "compressible": true + }, + "application/qsig": { + "source": "iana" + }, + "application/raml+yaml": { + "compressible": true, + "extensions": ["raml"] + }, + "application/raptorfec": { + "source": "iana" + }, + "application/rdap+json": { + "source": "iana", + "compressible": true + }, + "application/rdf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rdf","owl"] + }, + "application/reginfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rif"] + }, + "application/relax-ng-compact-syntax": { + "source": "iana", + "extensions": ["rnc"] + }, + "application/remote-printing": { + "source": "iana" + }, + "application/reputon+json": { + "source": "iana", + "compressible": true + }, + "application/resource-lists+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rl"] + }, + "application/resource-lists-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rld"] + }, + "application/rfc+xml": { + "source": "iana", + "compressible": true + }, + "application/riscos": { + "source": "iana" + }, + "application/rlmi+xml": { + "source": "iana", + "compressible": true + }, + "application/rls-services+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rs"] + }, + "application/route-apd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rapd"] + }, + "application/route-s-tsid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sls"] + }, + "application/route-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rusd"] + }, + "application/rpki-ghostbusters": { + "source": "iana", + "extensions": ["gbr"] + }, + "application/rpki-manifest": { + "source": "iana", + "extensions": ["mft"] + }, + "application/rpki-publication": { + "source": "iana" + }, + "application/rpki-roa": { + "source": "iana", + "extensions": ["roa"] + }, + "application/rpki-updown": { + "source": "iana" + }, + "application/rsd+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rsd"] + }, + "application/rss+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rss"] + }, + "application/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "application/rtploopback": { + "source": "iana" + }, + "application/rtx": { + "source": "iana" + }, + "application/samlassertion+xml": { + "source": "iana", + "compressible": true + }, + "application/samlmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/sarif+json": { + "source": "iana", + "compressible": true + }, + "application/sarif-external-properties+json": { + "source": "iana", + "compressible": true + }, + "application/sbe": { + "source": "iana" + }, + "application/sbml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sbml"] + }, + "application/scaip+xml": { + "source": "iana", + "compressible": true + }, + "application/scim+json": { + "source": "iana", + "compressible": true + }, + "application/scvp-cv-request": { + "source": "iana", + "extensions": ["scq"] + }, + "application/scvp-cv-response": { + "source": "iana", + "extensions": ["scs"] + }, + "application/scvp-vp-request": { + "source": "iana", + "extensions": ["spq"] + }, + "application/scvp-vp-response": { + "source": "iana", + "extensions": ["spp"] + }, + "application/sdp": { + "source": "iana", + "extensions": ["sdp"] + }, + "application/secevent+jwt": { + "source": "iana" + }, + "application/senml+cbor": { + "source": "iana" + }, + "application/senml+json": { + "source": "iana", + "compressible": true + }, + "application/senml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["senmlx"] + }, + "application/senml-etch+cbor": { + "source": "iana" + }, + "application/senml-etch+json": { + "source": "iana", + "compressible": true + }, + "application/senml-exi": { + "source": "iana" + }, + "application/sensml+cbor": { + "source": "iana" + }, + "application/sensml+json": { + "source": "iana", + "compressible": true + }, + "application/sensml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sensmlx"] + }, + "application/sensml-exi": { + "source": "iana" + }, + "application/sep+xml": { + "source": "iana", + "compressible": true + }, + "application/sep-exi": { + "source": "iana" + }, + "application/session-info": { + "source": "iana" + }, + "application/set-payment": { + "source": "iana" + }, + "application/set-payment-initiation": { + "source": "iana", + "extensions": ["setpay"] + }, + "application/set-registration": { + "source": "iana" + }, + "application/set-registration-initiation": { + "source": "iana", + "extensions": ["setreg"] + }, + "application/sgml": { + "source": "iana" + }, + "application/sgml-open-catalog": { + "source": "iana" + }, + "application/shf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["shf"] + }, + "application/sieve": { + "source": "iana", + "extensions": ["siv","sieve"] + }, + "application/simple-filter+xml": { + "source": "iana", + "compressible": true + }, + "application/simple-message-summary": { + "source": "iana" + }, + "application/simplesymbolcontainer": { + "source": "iana" + }, + "application/sipc": { + "source": "iana" + }, + "application/slate": { + "source": "iana" + }, + "application/smil": { + "source": "iana" + }, + "application/smil+xml": { + "source": "iana", + "compressible": true, + "extensions": ["smi","smil"] + }, + "application/smpte336m": { + "source": "iana" + }, + "application/soap+fastinfoset": { + "source": "iana" + }, + "application/soap+xml": { + "source": "iana", + "compressible": true + }, + "application/sparql-query": { + "source": "iana", + "extensions": ["rq"] + }, + "application/sparql-results+xml": { + "source": "iana", + "compressible": true, + "extensions": ["srx"] + }, + "application/spdx+json": { + "source": "iana", + "compressible": true + }, + "application/spirits-event+xml": { + "source": "iana", + "compressible": true + }, + "application/sql": { + "source": "iana" + }, + "application/srgs": { + "source": "iana", + "extensions": ["gram"] + }, + "application/srgs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["grxml"] + }, + "application/sru+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sru"] + }, + "application/ssdl+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ssdl"] + }, + "application/ssml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ssml"] + }, + "application/stix+json": { + "source": "iana", + "compressible": true + }, + "application/swid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["swidtag"] + }, + "application/tamp-apex-update": { + "source": "iana" + }, + "application/tamp-apex-update-confirm": { + "source": "iana" + }, + "application/tamp-community-update": { + "source": "iana" + }, + "application/tamp-community-update-confirm": { + "source": "iana" + }, + "application/tamp-error": { + "source": "iana" + }, + "application/tamp-sequence-adjust": { + "source": "iana" + }, + "application/tamp-sequence-adjust-confirm": { + "source": "iana" + }, + "application/tamp-status-query": { + "source": "iana" + }, + "application/tamp-status-response": { + "source": "iana" + }, + "application/tamp-update": { + "source": "iana" + }, + "application/tamp-update-confirm": { + "source": "iana" + }, + "application/tar": { + "compressible": true + }, + "application/taxii+json": { + "source": "iana", + "compressible": true + }, + "application/td+json": { + "source": "iana", + "compressible": true + }, + "application/tei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tei","teicorpus"] + }, + "application/tetra_isi": { + "source": "iana" + }, + "application/thraud+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tfi"] + }, + "application/timestamp-query": { + "source": "iana" + }, + "application/timestamp-reply": { + "source": "iana" + }, + "application/timestamped-data": { + "source": "iana", + "extensions": ["tsd"] + }, + "application/tlsrpt+gzip": { + "source": "iana" + }, + "application/tlsrpt+json": { + "source": "iana", + "compressible": true + }, + "application/tnauthlist": { + "source": "iana" + }, + "application/token-introspection+jwt": { + "source": "iana" + }, + "application/toml": { + "compressible": true, + "extensions": ["toml"] + }, + "application/trickle-ice-sdpfrag": { + "source": "iana" + }, + "application/trig": { + "source": "iana", + "extensions": ["trig"] + }, + "application/ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ttml"] + }, + "application/tve-trigger": { + "source": "iana" + }, + "application/tzif": { + "source": "iana" + }, + "application/tzif-leap": { + "source": "iana" + }, + "application/ubjson": { + "compressible": false, + "extensions": ["ubj"] + }, + "application/ulpfec": { + "source": "iana" + }, + "application/urc-grpsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/urc-ressheet+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsheet"] + }, + "application/urc-targetdesc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["td"] + }, + "application/urc-uisocketdesc+xml": { + "source": "iana", + "compressible": true + }, + "application/vcard+json": { + "source": "iana", + "compressible": true + }, + "application/vcard+xml": { + "source": "iana", + "compressible": true + }, + "application/vemmi": { + "source": "iana" + }, + "application/vividence.scriptfile": { + "source": "apache" + }, + "application/vnd.1000minds.decision-model+xml": { + "source": "iana", + "compressible": true, + "extensions": ["1km"] + }, + "application/vnd.3gpp-prose+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-v2x-local-service-information": { + "source": "iana" + }, + "application/vnd.3gpp.5gnas": { + "source": "iana" + }, + "application/vnd.3gpp.access-transfer-events+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.bsf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gmop+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gtpc": { + "source": "iana" + }, + "application/vnd.3gpp.interworking-data": { + "source": "iana" + }, + "application/vnd.3gpp.lpp": { + "source": "iana" + }, + "application/vnd.3gpp.mc-signalling-ear": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-payload": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-signalling": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-floor-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-signed+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-init-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-transmission-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mid-call+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ngap": { + "source": "iana" + }, + "application/vnd.3gpp.pfcp": { + "source": "iana" + }, + "application/vnd.3gpp.pic-bw-large": { + "source": "iana", + "extensions": ["plb"] + }, + "application/vnd.3gpp.pic-bw-small": { + "source": "iana", + "extensions": ["psb"] + }, + "application/vnd.3gpp.pic-bw-var": { + "source": "iana", + "extensions": ["pvb"] + }, + "application/vnd.3gpp.s1ap": { + "source": "iana" + }, + "application/vnd.3gpp.sms": { + "source": "iana" + }, + "application/vnd.3gpp.sms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-ext+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.state-and-event-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ussd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.sms": { + "source": "iana" + }, + "application/vnd.3gpp2.tcap": { + "source": "iana", + "extensions": ["tcap"] + }, + "application/vnd.3lightssoftware.imagescal": { + "source": "iana" + }, + "application/vnd.3m.post-it-notes": { + "source": "iana", + "extensions": ["pwn"] + }, + "application/vnd.accpac.simply.aso": { + "source": "iana", + "extensions": ["aso"] + }, + "application/vnd.accpac.simply.imp": { + "source": "iana", + "extensions": ["imp"] + }, + "application/vnd.acucobol": { + "source": "iana", + "extensions": ["acu"] + }, + "application/vnd.acucorp": { + "source": "iana", + "extensions": ["atc","acutc"] + }, + "application/vnd.adobe.air-application-installer-package+zip": { + "source": "apache", + "compressible": false, + "extensions": ["air"] + }, + "application/vnd.adobe.flash.movie": { + "source": "iana" + }, + "application/vnd.adobe.formscentral.fcdt": { + "source": "iana", + "extensions": ["fcdt"] + }, + "application/vnd.adobe.fxp": { + "source": "iana", + "extensions": ["fxp","fxpl"] + }, + "application/vnd.adobe.partial-upload": { + "source": "iana" + }, + "application/vnd.adobe.xdp+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdp"] + }, + "application/vnd.adobe.xfdf": { + "source": "iana", + "extensions": ["xfdf"] + }, + "application/vnd.aether.imp": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata-pagedef": { + "source": "iana" + }, + "application/vnd.afpc.cmoca-cmresource": { + "source": "iana" + }, + "application/vnd.afpc.foca-charset": { + "source": "iana" + }, + "application/vnd.afpc.foca-codedfont": { + "source": "iana" + }, + "application/vnd.afpc.foca-codepage": { + "source": "iana" + }, + "application/vnd.afpc.modca": { + "source": "iana" + }, + "application/vnd.afpc.modca-cmtable": { + "source": "iana" + }, + "application/vnd.afpc.modca-formdef": { + "source": "iana" + }, + "application/vnd.afpc.modca-mediummap": { + "source": "iana" + }, + "application/vnd.afpc.modca-objectcontainer": { + "source": "iana" + }, + "application/vnd.afpc.modca-overlay": { + "source": "iana" + }, + "application/vnd.afpc.modca-pagesegment": { + "source": "iana" + }, + "application/vnd.age": { + "source": "iana", + "extensions": ["age"] + }, + "application/vnd.ah-barcode": { + "source": "iana" + }, + "application/vnd.ahead.space": { + "source": "iana", + "extensions": ["ahead"] + }, + "application/vnd.airzip.filesecure.azf": { + "source": "iana", + "extensions": ["azf"] + }, + "application/vnd.airzip.filesecure.azs": { + "source": "iana", + "extensions": ["azs"] + }, + "application/vnd.amadeus+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.amazon.ebook": { + "source": "apache", + "extensions": ["azw"] + }, + "application/vnd.amazon.mobi8-ebook": { + "source": "iana" + }, + "application/vnd.americandynamics.acc": { + "source": "iana", + "extensions": ["acc"] + }, + "application/vnd.amiga.ami": { + "source": "iana", + "extensions": ["ami"] + }, + "application/vnd.amundsen.maze+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.android.ota": { + "source": "iana" + }, + "application/vnd.android.package-archive": { + "source": "apache", + "compressible": false, + "extensions": ["apk"] + }, + "application/vnd.anki": { + "source": "iana" + }, + "application/vnd.anser-web-certificate-issue-initiation": { + "source": "iana", + "extensions": ["cii"] + }, + "application/vnd.anser-web-funds-transfer-initiation": { + "source": "apache", + "extensions": ["fti"] + }, + "application/vnd.antix.game-component": { + "source": "iana", + "extensions": ["atx"] + }, + "application/vnd.apache.arrow.file": { + "source": "iana" + }, + "application/vnd.apache.arrow.stream": { + "source": "iana" + }, + "application/vnd.apache.thrift.binary": { + "source": "iana" + }, + "application/vnd.apache.thrift.compact": { + "source": "iana" + }, + "application/vnd.apache.thrift.json": { + "source": "iana" + }, + "application/vnd.api+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.aplextor.warrp+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apothekende.reservation+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apple.installer+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpkg"] + }, + "application/vnd.apple.keynote": { + "source": "iana", + "extensions": ["key"] + }, + "application/vnd.apple.mpegurl": { + "source": "iana", + "extensions": ["m3u8"] + }, + "application/vnd.apple.numbers": { + "source": "iana", + "extensions": ["numbers"] + }, + "application/vnd.apple.pages": { + "source": "iana", + "extensions": ["pages"] + }, + "application/vnd.apple.pkpass": { + "compressible": false, + "extensions": ["pkpass"] + }, + "application/vnd.arastra.swi": { + "source": "iana" + }, + "application/vnd.aristanetworks.swi": { + "source": "iana", + "extensions": ["swi"] + }, + "application/vnd.artisan+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.artsquare": { + "source": "iana" + }, + "application/vnd.astraea-software.iota": { + "source": "iana", + "extensions": ["iota"] + }, + "application/vnd.audiograph": { + "source": "iana", + "extensions": ["aep"] + }, + "application/vnd.autopackage": { + "source": "iana" + }, + "application/vnd.avalon+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.avistar+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.balsamiq.bmml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["bmml"] + }, + "application/vnd.balsamiq.bmpr": { + "source": "iana" + }, + "application/vnd.banana-accounting": { + "source": "iana" + }, + "application/vnd.bbf.usp.error": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bekitzur-stech+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bint.med-content": { + "source": "iana" + }, + "application/vnd.biopax.rdf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.blink-idb-value-wrapper": { + "source": "iana" + }, + "application/vnd.blueice.multipass": { + "source": "iana", + "extensions": ["mpm"] + }, + "application/vnd.bluetooth.ep.oob": { + "source": "iana" + }, + "application/vnd.bluetooth.le.oob": { + "source": "iana" + }, + "application/vnd.bmi": { + "source": "iana", + "extensions": ["bmi"] + }, + "application/vnd.bpf": { + "source": "iana" + }, + "application/vnd.bpf3": { + "source": "iana" + }, + "application/vnd.businessobjects": { + "source": "iana", + "extensions": ["rep"] + }, + "application/vnd.byu.uapi+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cab-jscript": { + "source": "iana" + }, + "application/vnd.canon-cpdl": { + "source": "iana" + }, + "application/vnd.canon-lips": { + "source": "iana" + }, + "application/vnd.capasystems-pg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cendio.thinlinc.clientconf": { + "source": "iana" + }, + "application/vnd.century-systems.tcp_stream": { + "source": "iana" + }, + "application/vnd.chemdraw+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdxml"] + }, + "application/vnd.chess-pgn": { + "source": "iana" + }, + "application/vnd.chipnuts.karaoke-mmd": { + "source": "iana", + "extensions": ["mmd"] + }, + "application/vnd.ciedi": { + "source": "iana" + }, + "application/vnd.cinderella": { + "source": "iana", + "extensions": ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + "source": "iana" + }, + "application/vnd.citationstyles.style+xml": { + "source": "iana", + "compressible": true, + "extensions": ["csl"] + }, + "application/vnd.claymore": { + "source": "iana", + "extensions": ["cla"] + }, + "application/vnd.cloanto.rp9": { + "source": "iana", + "extensions": ["rp9"] + }, + "application/vnd.clonk.c4group": { + "source": "iana", + "extensions": ["c4g","c4d","c4f","c4p","c4u"] + }, + "application/vnd.cluetrust.cartomobile-config": { + "source": "iana", + "extensions": ["c11amc"] + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + "source": "iana", + "extensions": ["c11amz"] + }, + "application/vnd.coffeescript": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet-template": { + "source": "iana" + }, + "application/vnd.collection+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.doc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.next+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.comicbook+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.comicbook-rar": { + "source": "iana" + }, + "application/vnd.commerce-battelle": { + "source": "iana" + }, + "application/vnd.commonspace": { + "source": "iana", + "extensions": ["csp"] + }, + "application/vnd.contact.cmsg": { + "source": "iana", + "extensions": ["cdbcmsg"] + }, + "application/vnd.coreos.ignition+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cosmocaller": { + "source": "iana", + "extensions": ["cmc"] + }, + "application/vnd.crick.clicker": { + "source": "iana", + "extensions": ["clkx"] + }, + "application/vnd.crick.clicker.keyboard": { + "source": "iana", + "extensions": ["clkk"] + }, + "application/vnd.crick.clicker.palette": { + "source": "iana", + "extensions": ["clkp"] + }, + "application/vnd.crick.clicker.template": { + "source": "iana", + "extensions": ["clkt"] + }, + "application/vnd.crick.clicker.wordbank": { + "source": "iana", + "extensions": ["clkw"] + }, + "application/vnd.criticaltools.wbs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wbs"] + }, + "application/vnd.cryptii.pipe+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.crypto-shade-file": { + "source": "iana" + }, + "application/vnd.cryptomator.encrypted": { + "source": "iana" + }, + "application/vnd.cryptomator.vault": { + "source": "iana" + }, + "application/vnd.ctc-posml": { + "source": "iana", + "extensions": ["pml"] + }, + "application/vnd.ctct.ws+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cups-pdf": { + "source": "iana" + }, + "application/vnd.cups-postscript": { + "source": "iana" + }, + "application/vnd.cups-ppd": { + "source": "iana", + "extensions": ["ppd"] + }, + "application/vnd.cups-raster": { + "source": "iana" + }, + "application/vnd.cups-raw": { + "source": "iana" + }, + "application/vnd.curl": { + "source": "iana" + }, + "application/vnd.curl.car": { + "source": "apache", + "extensions": ["car"] + }, + "application/vnd.curl.pcurl": { + "source": "apache", + "extensions": ["pcurl"] + }, + "application/vnd.cyan.dean.root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cybank": { + "source": "iana" + }, + "application/vnd.cyclonedx+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cyclonedx+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.d2l.coursepackage1p0+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.d3m-dataset": { + "source": "iana" + }, + "application/vnd.d3m-problem": { + "source": "iana" + }, + "application/vnd.dart": { + "source": "iana", + "compressible": true, + "extensions": ["dart"] + }, + "application/vnd.data-vision.rdz": { + "source": "iana", + "extensions": ["rdz"] + }, + "application/vnd.datapackage+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dataresource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dbf": { + "source": "iana", + "extensions": ["dbf"] + }, + "application/vnd.debian.binary-package": { + "source": "iana" + }, + "application/vnd.dece.data": { + "source": "iana", + "extensions": ["uvf","uvvf","uvd","uvvd"] + }, + "application/vnd.dece.ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uvt","uvvt"] + }, + "application/vnd.dece.unspecified": { + "source": "iana", + "extensions": ["uvx","uvvx"] + }, + "application/vnd.dece.zip": { + "source": "iana", + "extensions": ["uvz","uvvz"] + }, + "application/vnd.denovo.fcselayout-link": { + "source": "iana", + "extensions": ["fe_launch"] + }, + "application/vnd.desmume.movie": { + "source": "iana" + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + "source": "iana" + }, + "application/vnd.dm.delegation+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dna": { + "source": "iana", + "extensions": ["dna"] + }, + "application/vnd.document+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dolby.mlp": { + "source": "apache", + "extensions": ["mlp"] + }, + "application/vnd.dolby.mobile.1": { + "source": "iana" + }, + "application/vnd.dolby.mobile.2": { + "source": "iana" + }, + "application/vnd.doremir.scorecloud-binary-document": { + "source": "iana" + }, + "application/vnd.dpgraph": { + "source": "iana", + "extensions": ["dpg"] + }, + "application/vnd.dreamfactory": { + "source": "iana", + "extensions": ["dfac"] + }, + "application/vnd.drive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ds-keypoint": { + "source": "apache", + "extensions": ["kpxx"] + }, + "application/vnd.dtg.local": { + "source": "iana" + }, + "application/vnd.dtg.local.flash": { + "source": "iana" + }, + "application/vnd.dtg.local.html": { + "source": "iana" + }, + "application/vnd.dvb.ait": { + "source": "iana", + "extensions": ["ait"] + }, + "application/vnd.dvb.dvbisl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.dvbj": { + "source": "iana" + }, + "application/vnd.dvb.esgcontainer": { + "source": "iana" + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess2": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgpdd": { + "source": "iana" + }, + "application/vnd.dvb.ipdcroaming": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-base": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + "source": "iana" + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-container+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-generic+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-init+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.pfr": { + "source": "iana" + }, + "application/vnd.dvb.service": { + "source": "iana", + "extensions": ["svc"] + }, + "application/vnd.dxr": { + "source": "iana" + }, + "application/vnd.dynageo": { + "source": "iana", + "extensions": ["geo"] + }, + "application/vnd.dzr": { + "source": "iana" + }, + "application/vnd.easykaraoke.cdgdownload": { + "source": "iana" + }, + "application/vnd.ecdis-update": { + "source": "iana" + }, + "application/vnd.ecip.rlp": { + "source": "iana" + }, + "application/vnd.eclipse.ditto+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ecowin.chart": { + "source": "iana", + "extensions": ["mag"] + }, + "application/vnd.ecowin.filerequest": { + "source": "iana" + }, + "application/vnd.ecowin.fileupdate": { + "source": "iana" + }, + "application/vnd.ecowin.series": { + "source": "iana" + }, + "application/vnd.ecowin.seriesrequest": { + "source": "iana" + }, + "application/vnd.ecowin.seriesupdate": { + "source": "iana" + }, + "application/vnd.efi.img": { + "source": "iana" + }, + "application/vnd.efi.iso": { + "source": "iana" + }, + "application/vnd.emclient.accessrequest+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.enliven": { + "source": "iana", + "extensions": ["nml"] + }, + "application/vnd.enphase.envoy": { + "source": "iana" + }, + "application/vnd.eprints.data+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.epson.esf": { + "source": "iana", + "extensions": ["esf"] + }, + "application/vnd.epson.msf": { + "source": "iana", + "extensions": ["msf"] + }, + "application/vnd.epson.quickanime": { + "source": "iana", + "extensions": ["qam"] + }, + "application/vnd.epson.salt": { + "source": "iana", + "extensions": ["slt"] + }, + "application/vnd.epson.ssf": { + "source": "iana", + "extensions": ["ssf"] + }, + "application/vnd.ericsson.quickcall": { + "source": "iana" + }, + "application/vnd.espass-espass+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.eszigno3+xml": { + "source": "iana", + "compressible": true, + "extensions": ["es3","et3"] + }, + "application/vnd.etsi.aoc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.asic-e+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.asic-s+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.cug+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvcommand+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-bc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-cod+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvservice+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsync+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mcid+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mheg5": { + "source": "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.pstn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.sci+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.simservs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.timestamp-token": { + "source": "iana" + }, + "application/vnd.etsi.tsl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.tsl.der": { + "source": "iana" + }, + "application/vnd.eu.kasparian.car+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.eudora.data": { + "source": "iana" + }, + "application/vnd.evolv.ecig.profile": { + "source": "iana" + }, + "application/vnd.evolv.ecig.settings": { + "source": "iana" + }, + "application/vnd.evolv.ecig.theme": { + "source": "iana" + }, + "application/vnd.exstream-empower+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.exstream-package": { + "source": "iana" + }, + "application/vnd.ezpix-album": { + "source": "iana", + "extensions": ["ez2"] + }, + "application/vnd.ezpix-package": { + "source": "iana", + "extensions": ["ez3"] + }, + "application/vnd.f-secure.mobile": { + "source": "iana" + }, + "application/vnd.familysearch.gedcom+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.fastcopy-disk-image": { + "source": "iana" + }, + "application/vnd.fdf": { + "source": "iana", + "extensions": ["fdf"] + }, + "application/vnd.fdsn.mseed": { + "source": "iana", + "extensions": ["mseed"] + }, + "application/vnd.fdsn.seed": { + "source": "iana", + "extensions": ["seed","dataless"] + }, + "application/vnd.ffsns": { + "source": "iana" + }, + "application/vnd.ficlab.flb+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.filmit.zfc": { + "source": "iana" + }, + "application/vnd.fints": { + "source": "iana" + }, + "application/vnd.firemonkeys.cloudcell": { + "source": "iana" + }, + "application/vnd.flographit": { + "source": "iana", + "extensions": ["gph"] + }, + "application/vnd.fluxtime.clip": { + "source": "iana", + "extensions": ["ftc"] + }, + "application/vnd.font-fontforge-sfd": { + "source": "iana" + }, + "application/vnd.framemaker": { + "source": "iana", + "extensions": ["fm","frame","maker","book"] + }, + "application/vnd.frogans.fnc": { + "source": "iana", + "extensions": ["fnc"] + }, + "application/vnd.frogans.ltf": { + "source": "iana", + "extensions": ["ltf"] + }, + "application/vnd.fsc.weblaunch": { + "source": "iana", + "extensions": ["fsc"] + }, + "application/vnd.fujifilm.fb.docuworks": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.binder": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.jfi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.fujitsu.oasys": { + "source": "iana", + "extensions": ["oas"] + }, + "application/vnd.fujitsu.oasys2": { + "source": "iana", + "extensions": ["oa2"] + }, + "application/vnd.fujitsu.oasys3": { + "source": "iana", + "extensions": ["oa3"] + }, + "application/vnd.fujitsu.oasysgp": { + "source": "iana", + "extensions": ["fg5"] + }, + "application/vnd.fujitsu.oasysprs": { + "source": "iana", + "extensions": ["bh2"] + }, + "application/vnd.fujixerox.art-ex": { + "source": "iana" + }, + "application/vnd.fujixerox.art4": { + "source": "iana" + }, + "application/vnd.fujixerox.ddd": { + "source": "iana", + "extensions": ["ddd"] + }, + "application/vnd.fujixerox.docuworks": { + "source": "iana", + "extensions": ["xdw"] + }, + "application/vnd.fujixerox.docuworks.binder": { + "source": "iana", + "extensions": ["xbd"] + }, + "application/vnd.fujixerox.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujixerox.hbpl": { + "source": "iana" + }, + "application/vnd.fut-misnet": { + "source": "iana" + }, + "application/vnd.futoin+cbor": { + "source": "iana" + }, + "application/vnd.futoin+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.fuzzysheet": { + "source": "iana", + "extensions": ["fzs"] + }, + "application/vnd.genomatix.tuxedo": { + "source": "iana", + "extensions": ["txd"] + }, + "application/vnd.gentics.grd+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geo+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geocube+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.geogebra.file": { + "source": "iana", + "extensions": ["ggb"] + }, + "application/vnd.geogebra.slides": { + "source": "iana" + }, + "application/vnd.geogebra.tool": { + "source": "iana", + "extensions": ["ggt"] + }, + "application/vnd.geometry-explorer": { + "source": "iana", + "extensions": ["gex","gre"] + }, + "application/vnd.geonext": { + "source": "iana", + "extensions": ["gxt"] + }, + "application/vnd.geoplan": { + "source": "iana", + "extensions": ["g2w"] + }, + "application/vnd.geospace": { + "source": "iana", + "extensions": ["g3w"] + }, + "application/vnd.gerber": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt-response": { + "source": "iana" + }, + "application/vnd.gmx": { + "source": "iana", + "extensions": ["gmx"] + }, + "application/vnd.google-apps.document": { + "compressible": false, + "extensions": ["gdoc"] + }, + "application/vnd.google-apps.presentation": { + "compressible": false, + "extensions": ["gslides"] + }, + "application/vnd.google-apps.spreadsheet": { + "compressible": false, + "extensions": ["gsheet"] + }, + "application/vnd.google-earth.kml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["kml"] + }, + "application/vnd.google-earth.kmz": { + "source": "iana", + "compressible": false, + "extensions": ["kmz"] + }, + "application/vnd.gov.sk.e-form+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.gov.sk.e-form+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.grafeq": { + "source": "iana", + "extensions": ["gqf","gqs"] + }, + "application/vnd.gridmp": { + "source": "iana" + }, + "application/vnd.groove-account": { + "source": "iana", + "extensions": ["gac"] + }, + "application/vnd.groove-help": { + "source": "iana", + "extensions": ["ghf"] + }, + "application/vnd.groove-identity-message": { + "source": "iana", + "extensions": ["gim"] + }, + "application/vnd.groove-injector": { + "source": "iana", + "extensions": ["grv"] + }, + "application/vnd.groove-tool-message": { + "source": "iana", + "extensions": ["gtm"] + }, + "application/vnd.groove-tool-template": { + "source": "iana", + "extensions": ["tpl"] + }, + "application/vnd.groove-vcard": { + "source": "iana", + "extensions": ["vcg"] + }, + "application/vnd.hal+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hal+xml": { + "source": "iana", + "compressible": true, + "extensions": ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zmm"] + }, + "application/vnd.hbci": { + "source": "iana", + "extensions": ["hbci"] + }, + "application/vnd.hc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hcl-bireports": { + "source": "iana" + }, + "application/vnd.hdt": { + "source": "iana" + }, + "application/vnd.heroku+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hhe.lesson-player": { + "source": "iana", + "extensions": ["les"] + }, + "application/vnd.hl7cda+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hl7v2+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hp-hpgl": { + "source": "iana", + "extensions": ["hpgl"] + }, + "application/vnd.hp-hpid": { + "source": "iana", + "extensions": ["hpid"] + }, + "application/vnd.hp-hps": { + "source": "iana", + "extensions": ["hps"] + }, + "application/vnd.hp-jlyt": { + "source": "iana", + "extensions": ["jlt"] + }, + "application/vnd.hp-pcl": { + "source": "iana", + "extensions": ["pcl"] + }, + "application/vnd.hp-pclxl": { + "source": "iana", + "extensions": ["pclxl"] + }, + "application/vnd.httphone": { + "source": "iana" + }, + "application/vnd.hydrostatix.sof-data": { + "source": "iana", + "extensions": ["sfd-hdstx"] + }, + "application/vnd.hyper+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyper-item+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyperdrive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hzn-3d-crossword": { + "source": "iana" + }, + "application/vnd.ibm.afplinedata": { + "source": "iana" + }, + "application/vnd.ibm.electronic-media": { + "source": "iana" + }, + "application/vnd.ibm.minipay": { + "source": "iana", + "extensions": ["mpy"] + }, + "application/vnd.ibm.modcap": { + "source": "iana", + "extensions": ["afp","listafp","list3820"] + }, + "application/vnd.ibm.rights-management": { + "source": "iana", + "extensions": ["irm"] + }, + "application/vnd.ibm.secure-container": { + "source": "iana", + "extensions": ["sc"] + }, + "application/vnd.iccprofile": { + "source": "iana", + "extensions": ["icc","icm"] + }, + "application/vnd.ieee.1905": { + "source": "iana" + }, + "application/vnd.igloader": { + "source": "iana", + "extensions": ["igl"] + }, + "application/vnd.imagemeter.folder+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.imagemeter.image+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.immervision-ivp": { + "source": "iana", + "extensions": ["ivp"] + }, + "application/vnd.immervision-ivu": { + "source": "iana", + "extensions": ["ivu"] + }, + "application/vnd.ims.imsccv1p1": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p2": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p3": { + "source": "iana" + }, + "application/vnd.ims.lis.v2.result+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.informedcontrol.rms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.informix-visionary": { + "source": "iana" + }, + "application/vnd.infotech.project": { + "source": "iana" + }, + "application/vnd.infotech.project+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.innopath.wamp.notification": { + "source": "iana" + }, + "application/vnd.insors.igm": { + "source": "iana", + "extensions": ["igm"] + }, + "application/vnd.intercon.formnet": { + "source": "iana", + "extensions": ["xpw","xpx"] + }, + "application/vnd.intergeo": { + "source": "iana", + "extensions": ["i2g"] + }, + "application/vnd.intertrust.digibox": { + "source": "iana" + }, + "application/vnd.intertrust.nncp": { + "source": "iana" + }, + "application/vnd.intu.qbo": { + "source": "iana", + "extensions": ["qbo"] + }, + "application/vnd.intu.qfx": { + "source": "iana", + "extensions": ["qfx"] + }, + "application/vnd.iptc.g2.catalogitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.conceptitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.packageitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.planningitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ipunplugged.rcprofile": { + "source": "iana", + "extensions": ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["irp"] + }, + "application/vnd.is-xpr": { + "source": "iana", + "extensions": ["xpr"] + }, + "application/vnd.isac.fcs": { + "source": "iana", + "extensions": ["fcs"] + }, + "application/vnd.iso11783-10+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.jam": { + "source": "iana", + "extensions": ["jam"] + }, + "application/vnd.japannet-directory-service": { + "source": "iana" + }, + "application/vnd.japannet-jpnstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-payment-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-registration": { + "source": "iana" + }, + "application/vnd.japannet-registration-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-setstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-verification": { + "source": "iana" + }, + "application/vnd.japannet-verification-wakeup": { + "source": "iana" + }, + "application/vnd.jcp.javame.midlet-rms": { + "source": "iana", + "extensions": ["rms"] + }, + "application/vnd.jisp": { + "source": "iana", + "extensions": ["jisp"] + }, + "application/vnd.joost.joda-archive": { + "source": "iana", + "extensions": ["joda"] + }, + "application/vnd.jsk.isdn-ngn": { + "source": "iana" + }, + "application/vnd.kahootz": { + "source": "iana", + "extensions": ["ktz","ktr"] + }, + "application/vnd.kde.karbon": { + "source": "iana", + "extensions": ["karbon"] + }, + "application/vnd.kde.kchart": { + "source": "iana", + "extensions": ["chrt"] + }, + "application/vnd.kde.kformula": { + "source": "iana", + "extensions": ["kfo"] + }, + "application/vnd.kde.kivio": { + "source": "iana", + "extensions": ["flw"] + }, + "application/vnd.kde.kontour": { + "source": "iana", + "extensions": ["kon"] + }, + "application/vnd.kde.kpresenter": { + "source": "iana", + "extensions": ["kpr","kpt"] + }, + "application/vnd.kde.kspread": { + "source": "iana", + "extensions": ["ksp"] + }, + "application/vnd.kde.kword": { + "source": "iana", + "extensions": ["kwd","kwt"] + }, + "application/vnd.kenameaapp": { + "source": "iana", + "extensions": ["htke"] + }, + "application/vnd.kidspiration": { + "source": "iana", + "extensions": ["kia"] + }, + "application/vnd.kinar": { + "source": "iana", + "extensions": ["kne","knp"] + }, + "application/vnd.koan": { + "source": "iana", + "extensions": ["skp","skd","skt","skm"] + }, + "application/vnd.kodak-descriptor": { + "source": "iana", + "extensions": ["sse"] + }, + "application/vnd.las": { + "source": "iana" + }, + "application/vnd.las.las+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.las.las+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lasxml"] + }, + "application/vnd.laszip": { + "source": "iana" + }, + "application/vnd.leap+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.liberty-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.llamagraphics.life-balance.desktop": { + "source": "iana", + "extensions": ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lbe"] + }, + "application/vnd.logipipe.circuit+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.loom": { + "source": "iana" + }, + "application/vnd.lotus-1-2-3": { + "source": "iana", + "extensions": ["123"] + }, + "application/vnd.lotus-approach": { + "source": "iana", + "extensions": ["apr"] + }, + "application/vnd.lotus-freelance": { + "source": "iana", + "extensions": ["pre"] + }, + "application/vnd.lotus-notes": { + "source": "iana", + "extensions": ["nsf"] + }, + "application/vnd.lotus-organizer": { + "source": "iana", + "extensions": ["org"] + }, + "application/vnd.lotus-screencam": { + "source": "iana", + "extensions": ["scm"] + }, + "application/vnd.lotus-wordpro": { + "source": "iana", + "extensions": ["lwp"] + }, + "application/vnd.macports.portpkg": { + "source": "iana", + "extensions": ["portpkg"] + }, + "application/vnd.mapbox-vector-tile": { + "source": "iana", + "extensions": ["mvt"] + }, + "application/vnd.marlin.drm.actiontoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.conftoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.license+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.mdcf": { + "source": "iana" + }, + "application/vnd.mason+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.maxar.archive.3tz+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.maxmind.maxmind-db": { + "source": "iana" + }, + "application/vnd.mcd": { + "source": "iana", + "extensions": ["mcd"] + }, + "application/vnd.medcalcdata": { + "source": "iana", + "extensions": ["mc1"] + }, + "application/vnd.mediastation.cdkey": { + "source": "iana", + "extensions": ["cdkey"] + }, + "application/vnd.meridian-slingshot": { + "source": "iana" + }, + "application/vnd.mfer": { + "source": "iana", + "extensions": ["mwf"] + }, + "application/vnd.mfmp": { + "source": "iana", + "extensions": ["mfm"] + }, + "application/vnd.micro+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.micrografx.flo": { + "source": "iana", + "extensions": ["flo"] + }, + "application/vnd.micrografx.igx": { + "source": "iana", + "extensions": ["igx"] + }, + "application/vnd.microsoft.portable-executable": { + "source": "iana" + }, + "application/vnd.microsoft.windows.thumbnail-cache": { + "source": "iana" + }, + "application/vnd.miele+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.mif": { + "source": "iana", + "extensions": ["mif"] + }, + "application/vnd.minisoft-hp3000-save": { + "source": "iana" + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + "source": "iana" + }, + "application/vnd.mobius.daf": { + "source": "iana", + "extensions": ["daf"] + }, + "application/vnd.mobius.dis": { + "source": "iana", + "extensions": ["dis"] + }, + "application/vnd.mobius.mbk": { + "source": "iana", + "extensions": ["mbk"] + }, + "application/vnd.mobius.mqy": { + "source": "iana", + "extensions": ["mqy"] + }, + "application/vnd.mobius.msl": { + "source": "iana", + "extensions": ["msl"] + }, + "application/vnd.mobius.plc": { + "source": "iana", + "extensions": ["plc"] + }, + "application/vnd.mobius.txf": { + "source": "iana", + "extensions": ["txf"] + }, + "application/vnd.mophun.application": { + "source": "iana", + "extensions": ["mpn"] + }, + "application/vnd.mophun.certificate": { + "source": "iana", + "extensions": ["mpc"] + }, + "application/vnd.motorola.flexsuite": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.adsi": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.fis": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.gotap": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.kmr": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.ttc": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.wem": { + "source": "iana" + }, + "application/vnd.motorola.iprm": { + "source": "iana" + }, + "application/vnd.mozilla.xul+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xul"] + }, + "application/vnd.ms-3mfdocument": { + "source": "iana" + }, + "application/vnd.ms-artgalry": { + "source": "iana", + "extensions": ["cil"] + }, + "application/vnd.ms-asf": { + "source": "iana" + }, + "application/vnd.ms-cab-compressed": { + "source": "iana", + "extensions": ["cab"] + }, + "application/vnd.ms-color.iccprofile": { + "source": "apache" + }, + "application/vnd.ms-excel": { + "source": "iana", + "compressible": false, + "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + "source": "iana", + "extensions": ["xlam"] + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + "source": "iana", + "extensions": ["xlsb"] + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + "source": "iana", + "extensions": ["xlsm"] + }, + "application/vnd.ms-excel.template.macroenabled.12": { + "source": "iana", + "extensions": ["xltm"] + }, + "application/vnd.ms-fontobject": { + "source": "iana", + "compressible": true, + "extensions": ["eot"] + }, + "application/vnd.ms-htmlhelp": { + "source": "iana", + "extensions": ["chm"] + }, + "application/vnd.ms-ims": { + "source": "iana", + "extensions": ["ims"] + }, + "application/vnd.ms-lrm": { + "source": "iana", + "extensions": ["lrm"] + }, + "application/vnd.ms-office.activex+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-officetheme": { + "source": "iana", + "extensions": ["thmx"] + }, + "application/vnd.ms-opentype": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-outlook": { + "compressible": false, + "extensions": ["msg"] + }, + "application/vnd.ms-package.obfuscated-opentype": { + "source": "apache" + }, + "application/vnd.ms-pki.seccat": { + "source": "apache", + "extensions": ["cat"] + }, + "application/vnd.ms-pki.stl": { + "source": "apache", + "extensions": ["stl"] + }, + "application/vnd.ms-playready.initiator+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-powerpoint": { + "source": "iana", + "compressible": false, + "extensions": ["ppt","pps","pot"] + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + "source": "iana", + "extensions": ["ppam"] + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + "source": "iana", + "extensions": ["pptm"] + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + "source": "iana", + "extensions": ["sldm"] + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + "source": "iana", + "extensions": ["ppsm"] + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + "source": "iana", + "extensions": ["potm"] + }, + "application/vnd.ms-printdevicecapabilities+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-printing.printticket+xml": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-printschematicket+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-project": { + "source": "iana", + "extensions": ["mpp","mpt"] + }, + "application/vnd.ms-tnef": { + "source": "iana" + }, + "application/vnd.ms-windows.devicepairing": { + "source": "iana" + }, + "application/vnd.ms-windows.nwprinting.oob": { + "source": "iana" + }, + "application/vnd.ms-windows.printerpairing": { + "source": "iana" + }, + "application/vnd.ms-windows.wsd.oob": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-resp": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-resp": { + "source": "iana" + }, + "application/vnd.ms-word.document.macroenabled.12": { + "source": "iana", + "extensions": ["docm"] + }, + "application/vnd.ms-word.template.macroenabled.12": { + "source": "iana", + "extensions": ["dotm"] + }, + "application/vnd.ms-works": { + "source": "iana", + "extensions": ["wps","wks","wcm","wdb"] + }, + "application/vnd.ms-wpl": { + "source": "iana", + "extensions": ["wpl"] + }, + "application/vnd.ms-xpsdocument": { + "source": "iana", + "compressible": false, + "extensions": ["xps"] + }, + "application/vnd.msa-disk-image": { + "source": "iana" + }, + "application/vnd.mseq": { + "source": "iana", + "extensions": ["mseq"] + }, + "application/vnd.msign": { + "source": "iana" + }, + "application/vnd.multiad.creator": { + "source": "iana" + }, + "application/vnd.multiad.creator.cif": { + "source": "iana" + }, + "application/vnd.music-niff": { + "source": "iana" + }, + "application/vnd.musician": { + "source": "iana", + "extensions": ["mus"] + }, + "application/vnd.muvee.style": { + "source": "iana", + "extensions": ["msty"] + }, + "application/vnd.mynfc": { + "source": "iana", + "extensions": ["taglet"] + }, + "application/vnd.nacamar.ybrid+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ncd.control": { + "source": "iana" + }, + "application/vnd.ncd.reference": { + "source": "iana" + }, + "application/vnd.nearst.inv+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.nebumind.line": { + "source": "iana" + }, + "application/vnd.nervana": { + "source": "iana" + }, + "application/vnd.netfpx": { + "source": "iana" + }, + "application/vnd.neurolanguage.nlu": { + "source": "iana", + "extensions": ["nlu"] + }, + "application/vnd.nimn": { + "source": "iana" + }, + "application/vnd.nintendo.nitro.rom": { + "source": "iana" + }, + "application/vnd.nintendo.snes.rom": { + "source": "iana" + }, + "application/vnd.nitf": { + "source": "iana", + "extensions": ["ntf","nitf"] + }, + "application/vnd.noblenet-directory": { + "source": "iana", + "extensions": ["nnd"] + }, + "application/vnd.noblenet-sealer": { + "source": "iana", + "extensions": ["nns"] + }, + "application/vnd.noblenet-web": { + "source": "iana", + "extensions": ["nnw"] + }, + "application/vnd.nokia.catalogs": { + "source": "iana" + }, + "application/vnd.nokia.conml+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.conml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.iptv.config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.isds-radio-presets": { + "source": "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.landmark+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.landmarkcollection+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.n-gage.ac+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ac"] + }, + "application/vnd.nokia.n-gage.data": { + "source": "iana", + "extensions": ["ngdat"] + }, + "application/vnd.nokia.n-gage.symbian.install": { + "source": "iana", + "extensions": ["n-gage"] + }, + "application/vnd.nokia.ncd": { + "source": "iana" + }, + "application/vnd.nokia.pcd+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.pcd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.radio-preset": { + "source": "iana", + "extensions": ["rpst"] + }, + "application/vnd.nokia.radio-presets": { + "source": "iana", + "extensions": ["rpss"] + }, + "application/vnd.novadigm.edm": { + "source": "iana", + "extensions": ["edm"] + }, + "application/vnd.novadigm.edx": { + "source": "iana", + "extensions": ["edx"] + }, + "application/vnd.novadigm.ext": { + "source": "iana", + "extensions": ["ext"] + }, + "application/vnd.ntt-local.content-share": { + "source": "iana" + }, + "application/vnd.ntt-local.file-transfer": { + "source": "iana" + }, + "application/vnd.ntt-local.ogw_remote-access": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_remote": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + "source": "iana" + }, + "application/vnd.oasis.opendocument.chart": { + "source": "iana", + "extensions": ["odc"] + }, + "application/vnd.oasis.opendocument.chart-template": { + "source": "iana", + "extensions": ["otc"] + }, + "application/vnd.oasis.opendocument.database": { + "source": "iana", + "extensions": ["odb"] + }, + "application/vnd.oasis.opendocument.formula": { + "source": "iana", + "extensions": ["odf"] + }, + "application/vnd.oasis.opendocument.formula-template": { + "source": "iana", + "extensions": ["odft"] + }, + "application/vnd.oasis.opendocument.graphics": { + "source": "iana", + "compressible": false, + "extensions": ["odg"] + }, + "application/vnd.oasis.opendocument.graphics-template": { + "source": "iana", + "extensions": ["otg"] + }, + "application/vnd.oasis.opendocument.image": { + "source": "iana", + "extensions": ["odi"] + }, + "application/vnd.oasis.opendocument.image-template": { + "source": "iana", + "extensions": ["oti"] + }, + "application/vnd.oasis.opendocument.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["odp"] + }, + "application/vnd.oasis.opendocument.presentation-template": { + "source": "iana", + "extensions": ["otp"] + }, + "application/vnd.oasis.opendocument.spreadsheet": { + "source": "iana", + "compressible": false, + "extensions": ["ods"] + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + "source": "iana", + "extensions": ["ots"] + }, + "application/vnd.oasis.opendocument.text": { + "source": "iana", + "compressible": false, + "extensions": ["odt"] + }, + "application/vnd.oasis.opendocument.text-master": { + "source": "iana", + "extensions": ["odm"] + }, + "application/vnd.oasis.opendocument.text-template": { + "source": "iana", + "extensions": ["ott"] + }, + "application/vnd.oasis.opendocument.text-web": { + "source": "iana", + "extensions": ["oth"] + }, + "application/vnd.obn": { + "source": "iana" + }, + "application/vnd.ocf+cbor": { + "source": "iana" + }, + "application/vnd.oci.image.manifest.v1+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oftn.l10n+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.cspg-hexbinary": { + "source": "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.dae.xhtml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.pae.gem": { + "source": "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.spdlist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.ueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.userprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.olpc-sugar": { + "source": "iana", + "extensions": ["xo"] + }, + "application/vnd.oma-scws-config": { + "source": "iana" + }, + "application/vnd.oma-scws-http-request": { + "source": "iana" + }, + "application/vnd.oma-scws-http-response": { + "source": "iana" + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.imd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.ltkm": { + "source": "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.provisioningtrigger": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgboot": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sgdu": { + "source": "iana" + }, + "application/vnd.oma.bcast.simple-symbol-container": { + "source": "iana" + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sprov+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.stkm": { + "source": "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-feature-handler+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-pcc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-subs-invite+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-user-prefs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.dcd": { + "source": "iana" + }, + "application/vnd.oma.dcdc": { + "source": "iana" + }, + "application/vnd.oma.dd2+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.group-usage-list+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+cbor": { + "source": "iana" + }, + "application/vnd.oma.lwm2m+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+tlv": { + "source": "iana" + }, + "application/vnd.oma.pal+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.final-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.groups+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.push": { + "source": "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.xcap-directory+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.omads-email+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omads-file+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omads-folder+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omaloc-supl-init": { + "source": "iana" + }, + "application/vnd.onepager": { + "source": "iana" + }, + "application/vnd.onepagertamp": { + "source": "iana" + }, + "application/vnd.onepagertamx": { + "source": "iana" + }, + "application/vnd.onepagertat": { + "source": "iana" + }, + "application/vnd.onepagertatp": { + "source": "iana" + }, + "application/vnd.onepagertatx": { + "source": "iana" + }, + "application/vnd.openblox.game+xml": { + "source": "iana", + "compressible": true, + "extensions": ["obgx"] + }, + "application/vnd.openblox.game-binary": { + "source": "iana" + }, + "application/vnd.openeye.oeb": { + "source": "iana" + }, + "application/vnd.openofficeorg.extension": { + "source": "apache", + "extensions": ["oxt"] + }, + "application/vnd.openstreetmap.data+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osm"] + }, + "application/vnd.opentimestamps.ots": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + "source": "iana", + "extensions": ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + "source": "iana", + "extensions": ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + "source": "iana", + "extensions": ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + "source": "iana", + "compressible": false, + "extensions": ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + "source": "iana", + "extensions": ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + "source": "iana", + "compressible": false, + "extensions": ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + "source": "iana", + "extensions": ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.relationships+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oracle.resource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.orange.indata": { + "source": "iana" + }, + "application/vnd.osa.netdeploy": { + "source": "iana" + }, + "application/vnd.osgeo.mapguide.package": { + "source": "iana", + "extensions": ["mgp"] + }, + "application/vnd.osgi.bundle": { + "source": "iana" + }, + "application/vnd.osgi.dp": { + "source": "iana", + "extensions": ["dp"] + }, + "application/vnd.osgi.subsystem": { + "source": "iana", + "extensions": ["esa"] + }, + "application/vnd.otps.ct-kip+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oxli.countgraph": { + "source": "iana" + }, + "application/vnd.pagerduty+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.palm": { + "source": "iana", + "extensions": ["pdb","pqa","oprc"] + }, + "application/vnd.panoply": { + "source": "iana" + }, + "application/vnd.paos.xml": { + "source": "iana" + }, + "application/vnd.patentdive": { + "source": "iana" + }, + "application/vnd.patientecommsdoc": { + "source": "iana" + }, + "application/vnd.pawaafile": { + "source": "iana", + "extensions": ["paw"] + }, + "application/vnd.pcos": { + "source": "iana" + }, + "application/vnd.pg.format": { + "source": "iana", + "extensions": ["str"] + }, + "application/vnd.pg.osasli": { + "source": "iana", + "extensions": ["ei6"] + }, + "application/vnd.piaccess.application-licence": { + "source": "iana" + }, + "application/vnd.picsel": { + "source": "iana", + "extensions": ["efif"] + }, + "application/vnd.pmi.widget": { + "source": "iana", + "extensions": ["wg"] + }, + "application/vnd.poc.group-advertisement+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.pocketlearn": { + "source": "iana", + "extensions": ["plf"] + }, + "application/vnd.powerbuilder6": { + "source": "iana", + "extensions": ["pbd"] + }, + "application/vnd.powerbuilder6-s": { + "source": "iana" + }, + "application/vnd.powerbuilder7": { + "source": "iana" + }, + "application/vnd.powerbuilder7-s": { + "source": "iana" + }, + "application/vnd.powerbuilder75": { + "source": "iana" + }, + "application/vnd.powerbuilder75-s": { + "source": "iana" + }, + "application/vnd.preminet": { + "source": "iana" + }, + "application/vnd.previewsystems.box": { + "source": "iana", + "extensions": ["box"] + }, + "application/vnd.proteus.magazine": { + "source": "iana", + "extensions": ["mgz"] + }, + "application/vnd.psfs": { + "source": "iana" + }, + "application/vnd.publishare-delta-tree": { + "source": "iana", + "extensions": ["qps"] + }, + "application/vnd.pvi.ptid1": { + "source": "iana", + "extensions": ["ptid"] + }, + "application/vnd.pwg-multiplexed": { + "source": "iana" + }, + "application/vnd.pwg-xhtml-print+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.qualcomm.brew-app-res": { + "source": "iana" + }, + "application/vnd.quarantainenet": { + "source": "iana" + }, + "application/vnd.quark.quarkxpress": { + "source": "iana", + "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] + }, + "application/vnd.quobject-quoxdocument": { + "source": "iana" + }, + "application/vnd.radisys.moml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-stream+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-base+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-group+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.rainstor.data": { + "source": "iana" + }, + "application/vnd.rapid": { + "source": "iana" + }, + "application/vnd.rar": { + "source": "iana", + "extensions": ["rar"] + }, + "application/vnd.realvnc.bed": { + "source": "iana", + "extensions": ["bed"] + }, + "application/vnd.recordare.musicxml": { + "source": "iana", + "extensions": ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musicxml"] + }, + "application/vnd.renlearn.rlprint": { + "source": "iana" + }, + "application/vnd.resilient.logic": { + "source": "iana" + }, + "application/vnd.restful+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.rig.cryptonote": { + "source": "iana", + "extensions": ["cryptonote"] + }, + "application/vnd.rim.cod": { + "source": "apache", + "extensions": ["cod"] + }, + "application/vnd.rn-realmedia": { + "source": "apache", + "extensions": ["rm"] + }, + "application/vnd.rn-realmedia-vbr": { + "source": "apache", + "extensions": ["rmvb"] + }, + "application/vnd.route66.link66+xml": { + "source": "iana", + "compressible": true, + "extensions": ["link66"] + }, + "application/vnd.rs-274x": { + "source": "iana" + }, + "application/vnd.ruckus.download": { + "source": "iana" + }, + "application/vnd.s3sms": { + "source": "iana" + }, + "application/vnd.sailingtracker.track": { + "source": "iana", + "extensions": ["st"] + }, + "application/vnd.sar": { + "source": "iana" + }, + "application/vnd.sbm.cid": { + "source": "iana" + }, + "application/vnd.sbm.mid2": { + "source": "iana" + }, + "application/vnd.scribus": { + "source": "iana" + }, + "application/vnd.sealed.3df": { + "source": "iana" + }, + "application/vnd.sealed.csf": { + "source": "iana" + }, + "application/vnd.sealed.doc": { + "source": "iana" + }, + "application/vnd.sealed.eml": { + "source": "iana" + }, + "application/vnd.sealed.mht": { + "source": "iana" + }, + "application/vnd.sealed.net": { + "source": "iana" + }, + "application/vnd.sealed.ppt": { + "source": "iana" + }, + "application/vnd.sealed.tiff": { + "source": "iana" + }, + "application/vnd.sealed.xls": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.html": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.pdf": { + "source": "iana" + }, + "application/vnd.seemail": { + "source": "iana", + "extensions": ["see"] + }, + "application/vnd.seis+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.sema": { + "source": "iana", + "extensions": ["sema"] + }, + "application/vnd.semd": { + "source": "iana", + "extensions": ["semd"] + }, + "application/vnd.semf": { + "source": "iana", + "extensions": ["semf"] + }, + "application/vnd.shade-save-file": { + "source": "iana" + }, + "application/vnd.shana.informed.formdata": { + "source": "iana", + "extensions": ["ifm"] + }, + "application/vnd.shana.informed.formtemplate": { + "source": "iana", + "extensions": ["itp"] + }, + "application/vnd.shana.informed.interchange": { + "source": "iana", + "extensions": ["iif"] + }, + "application/vnd.shana.informed.package": { + "source": "iana", + "extensions": ["ipk"] + }, + "application/vnd.shootproof+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shopkick+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shp": { + "source": "iana" + }, + "application/vnd.shx": { + "source": "iana" + }, + "application/vnd.sigrok.session": { + "source": "iana" + }, + "application/vnd.simtech-mindmapper": { + "source": "iana", + "extensions": ["twd","twds"] + }, + "application/vnd.siren+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.smaf": { + "source": "iana", + "extensions": ["mmf"] + }, + "application/vnd.smart.notebook": { + "source": "iana" + }, + "application/vnd.smart.teacher": { + "source": "iana", + "extensions": ["teacher"] + }, + "application/vnd.snesdev-page-table": { + "source": "iana" + }, + "application/vnd.software602.filler.form+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fo"] + }, + "application/vnd.software602.filler.form-xml-zip": { + "source": "iana" + }, + "application/vnd.solent.sdkm+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sdkm","sdkd"] + }, + "application/vnd.spotfire.dxp": { + "source": "iana", + "extensions": ["dxp"] + }, + "application/vnd.spotfire.sfs": { + "source": "iana", + "extensions": ["sfs"] + }, + "application/vnd.sqlite3": { + "source": "iana" + }, + "application/vnd.sss-cod": { + "source": "iana" + }, + "application/vnd.sss-dtf": { + "source": "iana" + }, + "application/vnd.sss-ntf": { + "source": "iana" + }, + "application/vnd.stardivision.calc": { + "source": "apache", + "extensions": ["sdc"] + }, + "application/vnd.stardivision.draw": { + "source": "apache", + "extensions": ["sda"] + }, + "application/vnd.stardivision.impress": { + "source": "apache", + "extensions": ["sdd"] + }, + "application/vnd.stardivision.math": { + "source": "apache", + "extensions": ["smf"] + }, + "application/vnd.stardivision.writer": { + "source": "apache", + "extensions": ["sdw","vor"] + }, + "application/vnd.stardivision.writer-global": { + "source": "apache", + "extensions": ["sgl"] + }, + "application/vnd.stepmania.package": { + "source": "iana", + "extensions": ["smzip"] + }, + "application/vnd.stepmania.stepchart": { + "source": "iana", + "extensions": ["sm"] + }, + "application/vnd.street-stream": { + "source": "iana" + }, + "application/vnd.sun.wadl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wadl"] + }, + "application/vnd.sun.xml.calc": { + "source": "apache", + "extensions": ["sxc"] + }, + "application/vnd.sun.xml.calc.template": { + "source": "apache", + "extensions": ["stc"] + }, + "application/vnd.sun.xml.draw": { + "source": "apache", + "extensions": ["sxd"] + }, + "application/vnd.sun.xml.draw.template": { + "source": "apache", + "extensions": ["std"] + }, + "application/vnd.sun.xml.impress": { + "source": "apache", + "extensions": ["sxi"] + }, + "application/vnd.sun.xml.impress.template": { + "source": "apache", + "extensions": ["sti"] + }, + "application/vnd.sun.xml.math": { + "source": "apache", + "extensions": ["sxm"] + }, + "application/vnd.sun.xml.writer": { + "source": "apache", + "extensions": ["sxw"] + }, + "application/vnd.sun.xml.writer.global": { + "source": "apache", + "extensions": ["sxg"] + }, + "application/vnd.sun.xml.writer.template": { + "source": "apache", + "extensions": ["stw"] + }, + "application/vnd.sus-calendar": { + "source": "iana", + "extensions": ["sus","susp"] + }, + "application/vnd.svd": { + "source": "iana", + "extensions": ["svd"] + }, + "application/vnd.swiftview-ics": { + "source": "iana" + }, + "application/vnd.sycle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.syft+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.symbian.install": { + "source": "apache", + "extensions": ["sis","sisx"] + }, + "application/vnd.syncml+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["ddf"] + }, + "application/vnd.syncml.dmtnds+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.syncml.ds.notification": { + "source": "iana" + }, + "application/vnd.tableschema+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tao.intent-module-archive": { + "source": "iana", + "extensions": ["tao"] + }, + "application/vnd.tcpdump.pcap": { + "source": "iana", + "extensions": ["pcap","cap","dmp"] + }, + "application/vnd.think-cell.ppttc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tmd.mediaflex.api+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.tml": { + "source": "iana" + }, + "application/vnd.tmobile-livetv": { + "source": "iana", + "extensions": ["tmo"] + }, + "application/vnd.tri.onesource": { + "source": "iana" + }, + "application/vnd.trid.tpt": { + "source": "iana", + "extensions": ["tpt"] + }, + "application/vnd.triscape.mxs": { + "source": "iana", + "extensions": ["mxs"] + }, + "application/vnd.trueapp": { + "source": "iana", + "extensions": ["tra"] + }, + "application/vnd.truedoc": { + "source": "iana" + }, + "application/vnd.ubisoft.webplayer": { + "source": "iana" + }, + "application/vnd.ufdl": { + "source": "iana", + "extensions": ["ufd","ufdl"] + }, + "application/vnd.uiq.theme": { + "source": "iana", + "extensions": ["utz"] + }, + "application/vnd.umajin": { + "source": "iana", + "extensions": ["umj"] + }, + "application/vnd.unity": { + "source": "iana", + "extensions": ["unityweb"] + }, + "application/vnd.uoml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uoml"] + }, + "application/vnd.uplanet.alert": { + "source": "iana" + }, + "application/vnd.uplanet.alert-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.channel": { + "source": "iana" + }, + "application/vnd.uplanet.channel-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.list": { + "source": "iana" + }, + "application/vnd.uplanet.list-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.signal": { + "source": "iana" + }, + "application/vnd.uri-map": { + "source": "iana" + }, + "application/vnd.valve.source.material": { + "source": "iana" + }, + "application/vnd.vcx": { + "source": "iana", + "extensions": ["vcx"] + }, + "application/vnd.vd-study": { + "source": "iana" + }, + "application/vnd.vectorworks": { + "source": "iana" + }, + "application/vnd.vel+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.verimatrix.vcas": { + "source": "iana" + }, + "application/vnd.veritone.aion+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.veryant.thin": { + "source": "iana" + }, + "application/vnd.ves.encrypted": { + "source": "iana" + }, + "application/vnd.vidsoft.vidconference": { + "source": "iana" + }, + "application/vnd.visio": { + "source": "iana", + "extensions": ["vsd","vst","vss","vsw"] + }, + "application/vnd.visionary": { + "source": "iana", + "extensions": ["vis"] + }, + "application/vnd.vividence.scriptfile": { + "source": "iana" + }, + "application/vnd.vsf": { + "source": "iana", + "extensions": ["vsf"] + }, + "application/vnd.wap.sic": { + "source": "iana" + }, + "application/vnd.wap.slc": { + "source": "iana" + }, + "application/vnd.wap.wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["wbxml"] + }, + "application/vnd.wap.wmlc": { + "source": "iana", + "extensions": ["wmlc"] + }, + "application/vnd.wap.wmlscriptc": { + "source": "iana", + "extensions": ["wmlsc"] + }, + "application/vnd.webturbo": { + "source": "iana", + "extensions": ["wtb"] + }, + "application/vnd.wfa.dpp": { + "source": "iana" + }, + "application/vnd.wfa.p2p": { + "source": "iana" + }, + "application/vnd.wfa.wsc": { + "source": "iana" + }, + "application/vnd.windows.devicepairing": { + "source": "iana" + }, + "application/vnd.wmc": { + "source": "iana" + }, + "application/vnd.wmf.bootstrap": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica.package": { + "source": "iana" + }, + "application/vnd.wolfram.player": { + "source": "iana", + "extensions": ["nbp"] + }, + "application/vnd.wordperfect": { + "source": "iana", + "extensions": ["wpd"] + }, + "application/vnd.wqd": { + "source": "iana", + "extensions": ["wqd"] + }, + "application/vnd.wrq-hp3000-labelled": { + "source": "iana" + }, + "application/vnd.wt.stf": { + "source": "iana", + "extensions": ["stf"] + }, + "application/vnd.wv.csp+wbxml": { + "source": "iana" + }, + "application/vnd.wv.csp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.wv.ssp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xacml+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.xara": { + "source": "iana", + "extensions": ["xar"] + }, + "application/vnd.xfdl": { + "source": "iana", + "extensions": ["xfdl"] + }, + "application/vnd.xfdl.webform": { + "source": "iana" + }, + "application/vnd.xmi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xmpie.cpkg": { + "source": "iana" + }, + "application/vnd.xmpie.dpkg": { + "source": "iana" + }, + "application/vnd.xmpie.plan": { + "source": "iana" + }, + "application/vnd.xmpie.ppkg": { + "source": "iana" + }, + "application/vnd.xmpie.xlim": { + "source": "iana" + }, + "application/vnd.yamaha.hv-dic": { + "source": "iana", + "extensions": ["hvd"] + }, + "application/vnd.yamaha.hv-script": { + "source": "iana", + "extensions": ["hvs"] + }, + "application/vnd.yamaha.hv-voice": { + "source": "iana", + "extensions": ["hvp"] + }, + "application/vnd.yamaha.openscoreformat": { + "source": "iana", + "extensions": ["osf"] + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osfpvg"] + }, + "application/vnd.yamaha.remote-setup": { + "source": "iana" + }, + "application/vnd.yamaha.smaf-audio": { + "source": "iana", + "extensions": ["saf"] + }, + "application/vnd.yamaha.smaf-phrase": { + "source": "iana", + "extensions": ["spf"] + }, + "application/vnd.yamaha.through-ngn": { + "source": "iana" + }, + "application/vnd.yamaha.tunnel-udpencap": { + "source": "iana" + }, + "application/vnd.yaoweme": { + "source": "iana" + }, + "application/vnd.yellowriver-custom-menu": { + "source": "iana", + "extensions": ["cmp"] + }, + "application/vnd.youtube.yt": { + "source": "iana" + }, + "application/vnd.zul": { + "source": "iana", + "extensions": ["zir","zirz"] + }, + "application/vnd.zzazz.deck+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zaz"] + }, + "application/voicexml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["vxml"] + }, + "application/voucher-cms+json": { + "source": "iana", + "compressible": true + }, + "application/vq-rtcpxr": { + "source": "iana" + }, + "application/wasm": { + "source": "iana", + "compressible": true, + "extensions": ["wasm"] + }, + "application/watcherinfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wif"] + }, + "application/webpush-options+json": { + "source": "iana", + "compressible": true + }, + "application/whoispp-query": { + "source": "iana" + }, + "application/whoispp-response": { + "source": "iana" + }, + "application/widget": { + "source": "iana", + "extensions": ["wgt"] + }, + "application/winhlp": { + "source": "apache", + "extensions": ["hlp"] + }, + "application/wita": { + "source": "iana" + }, + "application/wordperfect5.1": { + "source": "iana" + }, + "application/wsdl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wsdl"] + }, + "application/wspolicy+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wspolicy"] + }, + "application/x-7z-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["7z"] + }, + "application/x-abiword": { + "source": "apache", + "extensions": ["abw"] + }, + "application/x-ace-compressed": { + "source": "apache", + "extensions": ["ace"] + }, + "application/x-amf": { + "source": "apache" + }, + "application/x-apple-diskimage": { + "source": "apache", + "extensions": ["dmg"] + }, + "application/x-arj": { + "compressible": false, + "extensions": ["arj"] + }, + "application/x-authorware-bin": { + "source": "apache", + "extensions": ["aab","x32","u32","vox"] + }, + "application/x-authorware-map": { + "source": "apache", + "extensions": ["aam"] + }, + "application/x-authorware-seg": { + "source": "apache", + "extensions": ["aas"] + }, + "application/x-bcpio": { + "source": "apache", + "extensions": ["bcpio"] + }, + "application/x-bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/x-bittorrent": { + "source": "apache", + "extensions": ["torrent"] + }, + "application/x-blorb": { + "source": "apache", + "extensions": ["blb","blorb"] + }, + "application/x-bzip": { + "source": "apache", + "compressible": false, + "extensions": ["bz"] + }, + "application/x-bzip2": { + "source": "apache", + "compressible": false, + "extensions": ["bz2","boz"] + }, + "application/x-cbr": { + "source": "apache", + "extensions": ["cbr","cba","cbt","cbz","cb7"] + }, + "application/x-cdlink": { + "source": "apache", + "extensions": ["vcd"] + }, + "application/x-cfs-compressed": { + "source": "apache", + "extensions": ["cfs"] + }, + "application/x-chat": { + "source": "apache", + "extensions": ["chat"] + }, + "application/x-chess-pgn": { + "source": "apache", + "extensions": ["pgn"] + }, + "application/x-chrome-extension": { + "extensions": ["crx"] + }, + "application/x-cocoa": { + "source": "nginx", + "extensions": ["cco"] + }, + "application/x-compress": { + "source": "apache" + }, + "application/x-conference": { + "source": "apache", + "extensions": ["nsc"] + }, + "application/x-cpio": { + "source": "apache", + "extensions": ["cpio"] + }, + "application/x-csh": { + "source": "apache", + "extensions": ["csh"] + }, + "application/x-deb": { + "compressible": false + }, + "application/x-debian-package": { + "source": "apache", + "extensions": ["deb","udeb"] + }, + "application/x-dgc-compressed": { + "source": "apache", + "extensions": ["dgc"] + }, + "application/x-director": { + "source": "apache", + "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] + }, + "application/x-doom": { + "source": "apache", + "extensions": ["wad"] + }, + "application/x-dtbncx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ncx"] + }, + "application/x-dtbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dtb"] + }, + "application/x-dtbresource+xml": { + "source": "apache", + "compressible": true, + "extensions": ["res"] + }, + "application/x-dvi": { + "source": "apache", + "compressible": false, + "extensions": ["dvi"] + }, + "application/x-envoy": { + "source": "apache", + "extensions": ["evy"] + }, + "application/x-eva": { + "source": "apache", + "extensions": ["eva"] + }, + "application/x-font-bdf": { + "source": "apache", + "extensions": ["bdf"] + }, + "application/x-font-dos": { + "source": "apache" + }, + "application/x-font-framemaker": { + "source": "apache" + }, + "application/x-font-ghostscript": { + "source": "apache", + "extensions": ["gsf"] + }, + "application/x-font-libgrx": { + "source": "apache" + }, + "application/x-font-linux-psf": { + "source": "apache", + "extensions": ["psf"] + }, + "application/x-font-pcf": { + "source": "apache", + "extensions": ["pcf"] + }, + "application/x-font-snf": { + "source": "apache", + "extensions": ["snf"] + }, + "application/x-font-speedo": { + "source": "apache" + }, + "application/x-font-sunos-news": { + "source": "apache" + }, + "application/x-font-type1": { + "source": "apache", + "extensions": ["pfa","pfb","pfm","afm"] + }, + "application/x-font-vfont": { + "source": "apache" + }, + "application/x-freearc": { + "source": "apache", + "extensions": ["arc"] + }, + "application/x-futuresplash": { + "source": "apache", + "extensions": ["spl"] + }, + "application/x-gca-compressed": { + "source": "apache", + "extensions": ["gca"] + }, + "application/x-glulx": { + "source": "apache", + "extensions": ["ulx"] + }, + "application/x-gnumeric": { + "source": "apache", + "extensions": ["gnumeric"] + }, + "application/x-gramps-xml": { + "source": "apache", + "extensions": ["gramps"] + }, + "application/x-gtar": { + "source": "apache", + "extensions": ["gtar"] + }, + "application/x-gzip": { + "source": "apache" + }, + "application/x-hdf": { + "source": "apache", + "extensions": ["hdf"] + }, + "application/x-httpd-php": { + "compressible": true, + "extensions": ["php"] + }, + "application/x-install-instructions": { + "source": "apache", + "extensions": ["install"] + }, + "application/x-iso9660-image": { + "source": "apache", + "extensions": ["iso"] + }, + "application/x-iwork-keynote-sffkey": { + "extensions": ["key"] + }, + "application/x-iwork-numbers-sffnumbers": { + "extensions": ["numbers"] + }, + "application/x-iwork-pages-sffpages": { + "extensions": ["pages"] + }, + "application/x-java-archive-diff": { + "source": "nginx", + "extensions": ["jardiff"] + }, + "application/x-java-jnlp-file": { + "source": "apache", + "compressible": false, + "extensions": ["jnlp"] + }, + "application/x-javascript": { + "compressible": true + }, + "application/x-keepass2": { + "extensions": ["kdbx"] + }, + "application/x-latex": { + "source": "apache", + "compressible": false, + "extensions": ["latex"] + }, + "application/x-lua-bytecode": { + "extensions": ["luac"] + }, + "application/x-lzh-compressed": { + "source": "apache", + "extensions": ["lzh","lha"] + }, + "application/x-makeself": { + "source": "nginx", + "extensions": ["run"] + }, + "application/x-mie": { + "source": "apache", + "extensions": ["mie"] + }, + "application/x-mobipocket-ebook": { + "source": "apache", + "extensions": ["prc","mobi"] + }, + "application/x-mpegurl": { + "compressible": false + }, + "application/x-ms-application": { + "source": "apache", + "extensions": ["application"] + }, + "application/x-ms-shortcut": { + "source": "apache", + "extensions": ["lnk"] + }, + "application/x-ms-wmd": { + "source": "apache", + "extensions": ["wmd"] + }, + "application/x-ms-wmz": { + "source": "apache", + "extensions": ["wmz"] + }, + "application/x-ms-xbap": { + "source": "apache", + "extensions": ["xbap"] + }, + "application/x-msaccess": { + "source": "apache", + "extensions": ["mdb"] + }, + "application/x-msbinder": { + "source": "apache", + "extensions": ["obd"] + }, + "application/x-mscardfile": { + "source": "apache", + "extensions": ["crd"] + }, + "application/x-msclip": { + "source": "apache", + "extensions": ["clp"] + }, + "application/x-msdos-program": { + "extensions": ["exe"] + }, + "application/x-msdownload": { + "source": "apache", + "extensions": ["exe","dll","com","bat","msi"] + }, + "application/x-msmediaview": { + "source": "apache", + "extensions": ["mvb","m13","m14"] + }, + "application/x-msmetafile": { + "source": "apache", + "extensions": ["wmf","wmz","emf","emz"] + }, + "application/x-msmoney": { + "source": "apache", + "extensions": ["mny"] + }, + "application/x-mspublisher": { + "source": "apache", + "extensions": ["pub"] + }, + "application/x-msschedule": { + "source": "apache", + "extensions": ["scd"] + }, + "application/x-msterminal": { + "source": "apache", + "extensions": ["trm"] + }, + "application/x-mswrite": { + "source": "apache", + "extensions": ["wri"] + }, + "application/x-netcdf": { + "source": "apache", + "extensions": ["nc","cdf"] + }, + "application/x-ns-proxy-autoconfig": { + "compressible": true, + "extensions": ["pac"] + }, + "application/x-nzb": { + "source": "apache", + "extensions": ["nzb"] + }, + "application/x-perl": { + "source": "nginx", + "extensions": ["pl","pm"] + }, + "application/x-pilot": { + "source": "nginx", + "extensions": ["prc","pdb"] + }, + "application/x-pkcs12": { + "source": "apache", + "compressible": false, + "extensions": ["p12","pfx"] + }, + "application/x-pkcs7-certificates": { + "source": "apache", + "extensions": ["p7b","spc"] + }, + "application/x-pkcs7-certreqresp": { + "source": "apache", + "extensions": ["p7r"] + }, + "application/x-pki-message": { + "source": "iana" + }, + "application/x-rar-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["rar"] + }, + "application/x-redhat-package-manager": { + "source": "nginx", + "extensions": ["rpm"] + }, + "application/x-research-info-systems": { + "source": "apache", + "extensions": ["ris"] + }, + "application/x-sea": { + "source": "nginx", + "extensions": ["sea"] + }, + "application/x-sh": { + "source": "apache", + "compressible": true, + "extensions": ["sh"] + }, + "application/x-shar": { + "source": "apache", + "extensions": ["shar"] + }, + "application/x-shockwave-flash": { + "source": "apache", + "compressible": false, + "extensions": ["swf"] + }, + "application/x-silverlight-app": { + "source": "apache", + "extensions": ["xap"] + }, + "application/x-sql": { + "source": "apache", + "extensions": ["sql"] + }, + "application/x-stuffit": { + "source": "apache", + "compressible": false, + "extensions": ["sit"] + }, + "application/x-stuffitx": { + "source": "apache", + "extensions": ["sitx"] + }, + "application/x-subrip": { + "source": "apache", + "extensions": ["srt"] + }, + "application/x-sv4cpio": { + "source": "apache", + "extensions": ["sv4cpio"] + }, + "application/x-sv4crc": { + "source": "apache", + "extensions": ["sv4crc"] + }, + "application/x-t3vm-image": { + "source": "apache", + "extensions": ["t3"] + }, + "application/x-tads": { + "source": "apache", + "extensions": ["gam"] + }, + "application/x-tar": { + "source": "apache", + "compressible": true, + "extensions": ["tar"] + }, + "application/x-tcl": { + "source": "apache", + "extensions": ["tcl","tk"] + }, + "application/x-tex": { + "source": "apache", + "extensions": ["tex"] + }, + "application/x-tex-tfm": { + "source": "apache", + "extensions": ["tfm"] + }, + "application/x-texinfo": { + "source": "apache", + "extensions": ["texinfo","texi"] + }, + "application/x-tgif": { + "source": "apache", + "extensions": ["obj"] + }, + "application/x-ustar": { + "source": "apache", + "extensions": ["ustar"] + }, + "application/x-virtualbox-hdd": { + "compressible": true, + "extensions": ["hdd"] + }, + "application/x-virtualbox-ova": { + "compressible": true, + "extensions": ["ova"] + }, + "application/x-virtualbox-ovf": { + "compressible": true, + "extensions": ["ovf"] + }, + "application/x-virtualbox-vbox": { + "compressible": true, + "extensions": ["vbox"] + }, + "application/x-virtualbox-vbox-extpack": { + "compressible": false, + "extensions": ["vbox-extpack"] + }, + "application/x-virtualbox-vdi": { + "compressible": true, + "extensions": ["vdi"] + }, + "application/x-virtualbox-vhd": { + "compressible": true, + "extensions": ["vhd"] + }, + "application/x-virtualbox-vmdk": { + "compressible": true, + "extensions": ["vmdk"] + }, + "application/x-wais-source": { + "source": "apache", + "extensions": ["src"] + }, + "application/x-web-app-manifest+json": { + "compressible": true, + "extensions": ["webapp"] + }, + "application/x-www-form-urlencoded": { + "source": "iana", + "compressible": true + }, + "application/x-x509-ca-cert": { + "source": "iana", + "extensions": ["der","crt","pem"] + }, + "application/x-x509-ca-ra-cert": { + "source": "iana" + }, + "application/x-x509-next-ca-cert": { + "source": "iana" + }, + "application/x-xfig": { + "source": "apache", + "extensions": ["fig"] + }, + "application/x-xliff+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xlf"] + }, + "application/x-xpinstall": { + "source": "apache", + "compressible": false, + "extensions": ["xpi"] + }, + "application/x-xz": { + "source": "apache", + "extensions": ["xz"] + }, + "application/x-zmachine": { + "source": "apache", + "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] + }, + "application/x400-bp": { + "source": "iana" + }, + "application/xacml+xml": { + "source": "iana", + "compressible": true + }, + "application/xaml+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xaml"] + }, + "application/xcap-att+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xav"] + }, + "application/xcap-caps+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xca"] + }, + "application/xcap-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdf"] + }, + "application/xcap-el+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xel"] + }, + "application/xcap-error+xml": { + "source": "iana", + "compressible": true + }, + "application/xcap-ns+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xns"] + }, + "application/xcon-conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/xcon-conference-info-diff+xml": { + "source": "iana", + "compressible": true + }, + "application/xenc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xenc"] + }, + "application/xhtml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xhtml","xht"] + }, + "application/xhtml-voice+xml": { + "source": "apache", + "compressible": true + }, + "application/xliff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xlf"] + }, + "application/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml","xsl","xsd","rng"] + }, + "application/xml-dtd": { + "source": "iana", + "compressible": true, + "extensions": ["dtd"] + }, + "application/xml-external-parsed-entity": { + "source": "iana" + }, + "application/xml-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/xmpp+xml": { + "source": "iana", + "compressible": true + }, + "application/xop+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xop"] + }, + "application/xproc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xpl"] + }, + "application/xslt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xsl","xslt"] + }, + "application/xspf+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xspf"] + }, + "application/xv+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mxml","xhvml","xvml","xvm"] + }, + "application/yang": { + "source": "iana", + "extensions": ["yang"] + }, + "application/yang-data+json": { + "source": "iana", + "compressible": true + }, + "application/yang-data+xml": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+json": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/yin+xml": { + "source": "iana", + "compressible": true, + "extensions": ["yin"] + }, + "application/zip": { + "source": "iana", + "compressible": false, + "extensions": ["zip"] + }, + "application/zlib": { + "source": "iana" + }, + "application/zstd": { + "source": "iana" + }, + "audio/1d-interleaved-parityfec": { + "source": "iana" + }, + "audio/32kadpcm": { + "source": "iana" + }, + "audio/3gpp": { + "source": "iana", + "compressible": false, + "extensions": ["3gpp"] + }, + "audio/3gpp2": { + "source": "iana" + }, + "audio/aac": { + "source": "iana" + }, + "audio/ac3": { + "source": "iana" + }, + "audio/adpcm": { + "source": "apache", + "extensions": ["adp"] + }, + "audio/amr": { + "source": "iana", + "extensions": ["amr"] + }, + "audio/amr-wb": { + "source": "iana" + }, + "audio/amr-wb+": { + "source": "iana" + }, + "audio/aptx": { + "source": "iana" + }, + "audio/asc": { + "source": "iana" + }, + "audio/atrac-advanced-lossless": { + "source": "iana" + }, + "audio/atrac-x": { + "source": "iana" + }, + "audio/atrac3": { + "source": "iana" + }, + "audio/basic": { + "source": "iana", + "compressible": false, + "extensions": ["au","snd"] + }, + "audio/bv16": { + "source": "iana" + }, + "audio/bv32": { + "source": "iana" + }, + "audio/clearmode": { + "source": "iana" + }, + "audio/cn": { + "source": "iana" + }, + "audio/dat12": { + "source": "iana" + }, + "audio/dls": { + "source": "iana" + }, + "audio/dsr-es201108": { + "source": "iana" + }, + "audio/dsr-es202050": { + "source": "iana" + }, + "audio/dsr-es202211": { + "source": "iana" + }, + "audio/dsr-es202212": { + "source": "iana" + }, + "audio/dv": { + "source": "iana" + }, + "audio/dvi4": { + "source": "iana" + }, + "audio/eac3": { + "source": "iana" + }, + "audio/encaprtp": { + "source": "iana" + }, + "audio/evrc": { + "source": "iana" + }, + "audio/evrc-qcp": { + "source": "iana" + }, + "audio/evrc0": { + "source": "iana" + }, + "audio/evrc1": { + "source": "iana" + }, + "audio/evrcb": { + "source": "iana" + }, + "audio/evrcb0": { + "source": "iana" + }, + "audio/evrcb1": { + "source": "iana" + }, + "audio/evrcnw": { + "source": "iana" + }, + "audio/evrcnw0": { + "source": "iana" + }, + "audio/evrcnw1": { + "source": "iana" + }, + "audio/evrcwb": { + "source": "iana" + }, + "audio/evrcwb0": { + "source": "iana" + }, + "audio/evrcwb1": { + "source": "iana" + }, + "audio/evs": { + "source": "iana" + }, + "audio/flexfec": { + "source": "iana" + }, + "audio/fwdred": { + "source": "iana" + }, + "audio/g711-0": { + "source": "iana" + }, + "audio/g719": { + "source": "iana" + }, + "audio/g722": { + "source": "iana" + }, + "audio/g7221": { + "source": "iana" + }, + "audio/g723": { + "source": "iana" + }, + "audio/g726-16": { + "source": "iana" + }, + "audio/g726-24": { + "source": "iana" + }, + "audio/g726-32": { + "source": "iana" + }, + "audio/g726-40": { + "source": "iana" + }, + "audio/g728": { + "source": "iana" + }, + "audio/g729": { + "source": "iana" + }, + "audio/g7291": { + "source": "iana" + }, + "audio/g729d": { + "source": "iana" + }, + "audio/g729e": { + "source": "iana" + }, + "audio/gsm": { + "source": "iana" + }, + "audio/gsm-efr": { + "source": "iana" + }, + "audio/gsm-hr-08": { + "source": "iana" + }, + "audio/ilbc": { + "source": "iana" + }, + "audio/ip-mr_v2.5": { + "source": "iana" + }, + "audio/isac": { + "source": "apache" + }, + "audio/l16": { + "source": "iana" + }, + "audio/l20": { + "source": "iana" + }, + "audio/l24": { + "source": "iana", + "compressible": false + }, + "audio/l8": { + "source": "iana" + }, + "audio/lpc": { + "source": "iana" + }, + "audio/melp": { + "source": "iana" + }, + "audio/melp1200": { + "source": "iana" + }, + "audio/melp2400": { + "source": "iana" + }, + "audio/melp600": { + "source": "iana" + }, + "audio/mhas": { + "source": "iana" + }, + "audio/midi": { + "source": "apache", + "extensions": ["mid","midi","kar","rmi"] + }, + "audio/mobile-xmf": { + "source": "iana", + "extensions": ["mxmf"] + }, + "audio/mp3": { + "compressible": false, + "extensions": ["mp3"] + }, + "audio/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["m4a","mp4a"] + }, + "audio/mp4a-latm": { + "source": "iana" + }, + "audio/mpa": { + "source": "iana" + }, + "audio/mpa-robust": { + "source": "iana" + }, + "audio/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] + }, + "audio/mpeg4-generic": { + "source": "iana" + }, + "audio/musepack": { + "source": "apache" + }, + "audio/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["oga","ogg","spx","opus"] + }, + "audio/opus": { + "source": "iana" + }, + "audio/parityfec": { + "source": "iana" + }, + "audio/pcma": { + "source": "iana" + }, + "audio/pcma-wb": { + "source": "iana" + }, + "audio/pcmu": { + "source": "iana" + }, + "audio/pcmu-wb": { + "source": "iana" + }, + "audio/prs.sid": { + "source": "iana" + }, + "audio/qcelp": { + "source": "iana" + }, + "audio/raptorfec": { + "source": "iana" + }, + "audio/red": { + "source": "iana" + }, + "audio/rtp-enc-aescm128": { + "source": "iana" + }, + "audio/rtp-midi": { + "source": "iana" + }, + "audio/rtploopback": { + "source": "iana" + }, + "audio/rtx": { + "source": "iana" + }, + "audio/s3m": { + "source": "apache", + "extensions": ["s3m"] + }, + "audio/scip": { + "source": "iana" + }, + "audio/silk": { + "source": "apache", + "extensions": ["sil"] + }, + "audio/smv": { + "source": "iana" + }, + "audio/smv-qcp": { + "source": "iana" + }, + "audio/smv0": { + "source": "iana" + }, + "audio/sofa": { + "source": "iana" + }, + "audio/sp-midi": { + "source": "iana" + }, + "audio/speex": { + "source": "iana" + }, + "audio/t140c": { + "source": "iana" + }, + "audio/t38": { + "source": "iana" + }, + "audio/telephone-event": { + "source": "iana" + }, + "audio/tetra_acelp": { + "source": "iana" + }, + "audio/tetra_acelp_bb": { + "source": "iana" + }, + "audio/tone": { + "source": "iana" + }, + "audio/tsvcis": { + "source": "iana" + }, + "audio/uemclip": { + "source": "iana" + }, + "audio/ulpfec": { + "source": "iana" + }, + "audio/usac": { + "source": "iana" + }, + "audio/vdvi": { + "source": "iana" + }, + "audio/vmr-wb": { + "source": "iana" + }, + "audio/vnd.3gpp.iufp": { + "source": "iana" + }, + "audio/vnd.4sb": { + "source": "iana" + }, + "audio/vnd.audiokoz": { + "source": "iana" + }, + "audio/vnd.celp": { + "source": "iana" + }, + "audio/vnd.cisco.nse": { + "source": "iana" + }, + "audio/vnd.cmles.radio-events": { + "source": "iana" + }, + "audio/vnd.cns.anp1": { + "source": "iana" + }, + "audio/vnd.cns.inf1": { + "source": "iana" + }, + "audio/vnd.dece.audio": { + "source": "iana", + "extensions": ["uva","uvva"] + }, + "audio/vnd.digital-winds": { + "source": "iana", + "extensions": ["eol"] + }, + "audio/vnd.dlna.adts": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.1": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.2": { + "source": "iana" + }, + "audio/vnd.dolby.mlp": { + "source": "iana" + }, + "audio/vnd.dolby.mps": { + "source": "iana" + }, + "audio/vnd.dolby.pl2": { + "source": "iana" + }, + "audio/vnd.dolby.pl2x": { + "source": "iana" + }, + "audio/vnd.dolby.pl2z": { + "source": "iana" + }, + "audio/vnd.dolby.pulse.1": { + "source": "iana" + }, + "audio/vnd.dra": { + "source": "iana", + "extensions": ["dra"] + }, + "audio/vnd.dts": { + "source": "iana", + "extensions": ["dts"] + }, + "audio/vnd.dts.hd": { + "source": "iana", + "extensions": ["dtshd"] + }, + "audio/vnd.dts.uhd": { + "source": "iana" + }, + "audio/vnd.dvb.file": { + "source": "iana" + }, + "audio/vnd.everad.plj": { + "source": "iana" + }, + "audio/vnd.hns.audio": { + "source": "iana" + }, + "audio/vnd.lucent.voice": { + "source": "iana", + "extensions": ["lvp"] + }, + "audio/vnd.ms-playready.media.pya": { + "source": "iana", + "extensions": ["pya"] + }, + "audio/vnd.nokia.mobile-xmf": { + "source": "iana" + }, + "audio/vnd.nortel.vbk": { + "source": "iana" + }, + "audio/vnd.nuera.ecelp4800": { + "source": "iana", + "extensions": ["ecelp4800"] + }, + "audio/vnd.nuera.ecelp7470": { + "source": "iana", + "extensions": ["ecelp7470"] + }, + "audio/vnd.nuera.ecelp9600": { + "source": "iana", + "extensions": ["ecelp9600"] + }, + "audio/vnd.octel.sbc": { + "source": "iana" + }, + "audio/vnd.presonus.multitrack": { + "source": "iana" + }, + "audio/vnd.qcelp": { + "source": "iana" + }, + "audio/vnd.rhetorex.32kadpcm": { + "source": "iana" + }, + "audio/vnd.rip": { + "source": "iana", + "extensions": ["rip"] + }, + "audio/vnd.rn-realaudio": { + "compressible": false + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + "source": "iana" + }, + "audio/vnd.vmx.cvsd": { + "source": "iana" + }, + "audio/vnd.wave": { + "compressible": false + }, + "audio/vorbis": { + "source": "iana", + "compressible": false + }, + "audio/vorbis-config": { + "source": "iana" + }, + "audio/wav": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/wave": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/webm": { + "source": "apache", + "compressible": false, + "extensions": ["weba"] + }, + "audio/x-aac": { + "source": "apache", + "compressible": false, + "extensions": ["aac"] + }, + "audio/x-aiff": { + "source": "apache", + "extensions": ["aif","aiff","aifc"] + }, + "audio/x-caf": { + "source": "apache", + "compressible": false, + "extensions": ["caf"] + }, + "audio/x-flac": { + "source": "apache", + "extensions": ["flac"] + }, + "audio/x-m4a": { + "source": "nginx", + "extensions": ["m4a"] + }, + "audio/x-matroska": { + "source": "apache", + "extensions": ["mka"] + }, + "audio/x-mpegurl": { + "source": "apache", + "extensions": ["m3u"] + }, + "audio/x-ms-wax": { + "source": "apache", + "extensions": ["wax"] + }, + "audio/x-ms-wma": { + "source": "apache", + "extensions": ["wma"] + }, + "audio/x-pn-realaudio": { + "source": "apache", + "extensions": ["ram","ra"] + }, + "audio/x-pn-realaudio-plugin": { + "source": "apache", + "extensions": ["rmp"] + }, + "audio/x-realaudio": { + "source": "nginx", + "extensions": ["ra"] + }, + "audio/x-tta": { + "source": "apache" + }, + "audio/x-wav": { + "source": "apache", + "extensions": ["wav"] + }, + "audio/xm": { + "source": "apache", + "extensions": ["xm"] + }, + "chemical/x-cdx": { + "source": "apache", + "extensions": ["cdx"] + }, + "chemical/x-cif": { + "source": "apache", + "extensions": ["cif"] + }, + "chemical/x-cmdf": { + "source": "apache", + "extensions": ["cmdf"] + }, + "chemical/x-cml": { + "source": "apache", + "extensions": ["cml"] + }, + "chemical/x-csml": { + "source": "apache", + "extensions": ["csml"] + }, + "chemical/x-pdb": { + "source": "apache" + }, + "chemical/x-xyz": { + "source": "apache", + "extensions": ["xyz"] + }, + "font/collection": { + "source": "iana", + "extensions": ["ttc"] + }, + "font/otf": { + "source": "iana", + "compressible": true, + "extensions": ["otf"] + }, + "font/sfnt": { + "source": "iana" + }, + "font/ttf": { + "source": "iana", + "compressible": true, + "extensions": ["ttf"] + }, + "font/woff": { + "source": "iana", + "extensions": ["woff"] + }, + "font/woff2": { + "source": "iana", + "extensions": ["woff2"] + }, + "image/aces": { + "source": "iana", + "extensions": ["exr"] + }, + "image/apng": { + "compressible": false, + "extensions": ["apng"] + }, + "image/avci": { + "source": "iana", + "extensions": ["avci"] + }, + "image/avcs": { + "source": "iana", + "extensions": ["avcs"] + }, + "image/avif": { + "source": "iana", + "compressible": false, + "extensions": ["avif"] + }, + "image/bmp": { + "source": "iana", + "compressible": true, + "extensions": ["bmp"] + }, + "image/cgm": { + "source": "iana", + "extensions": ["cgm"] + }, + "image/dicom-rle": { + "source": "iana", + "extensions": ["drle"] + }, + "image/emf": { + "source": "iana", + "extensions": ["emf"] + }, + "image/fits": { + "source": "iana", + "extensions": ["fits"] + }, + "image/g3fax": { + "source": "iana", + "extensions": ["g3"] + }, + "image/gif": { + "source": "iana", + "compressible": false, + "extensions": ["gif"] + }, + "image/heic": { + "source": "iana", + "extensions": ["heic"] + }, + "image/heic-sequence": { + "source": "iana", + "extensions": ["heics"] + }, + "image/heif": { + "source": "iana", + "extensions": ["heif"] + }, + "image/heif-sequence": { + "source": "iana", + "extensions": ["heifs"] + }, + "image/hej2k": { + "source": "iana", + "extensions": ["hej2"] + }, + "image/hsj2": { + "source": "iana", + "extensions": ["hsj2"] + }, + "image/ief": { + "source": "iana", + "extensions": ["ief"] + }, + "image/jls": { + "source": "iana", + "extensions": ["jls"] + }, + "image/jp2": { + "source": "iana", + "compressible": false, + "extensions": ["jp2","jpg2"] + }, + "image/jpeg": { + "source": "iana", + "compressible": false, + "extensions": ["jpeg","jpg","jpe"] + }, + "image/jph": { + "source": "iana", + "extensions": ["jph"] + }, + "image/jphc": { + "source": "iana", + "extensions": ["jhc"] + }, + "image/jpm": { + "source": "iana", + "compressible": false, + "extensions": ["jpm"] + }, + "image/jpx": { + "source": "iana", + "compressible": false, + "extensions": ["jpx","jpf"] + }, + "image/jxr": { + "source": "iana", + "extensions": ["jxr"] + }, + "image/jxra": { + "source": "iana", + "extensions": ["jxra"] + }, + "image/jxrs": { + "source": "iana", + "extensions": ["jxrs"] + }, + "image/jxs": { + "source": "iana", + "extensions": ["jxs"] + }, + "image/jxsc": { + "source": "iana", + "extensions": ["jxsc"] + }, + "image/jxsi": { + "source": "iana", + "extensions": ["jxsi"] + }, + "image/jxss": { + "source": "iana", + "extensions": ["jxss"] + }, + "image/ktx": { + "source": "iana", + "extensions": ["ktx"] + }, + "image/ktx2": { + "source": "iana", + "extensions": ["ktx2"] + }, + "image/naplps": { + "source": "iana" + }, + "image/pjpeg": { + "compressible": false + }, + "image/png": { + "source": "iana", + "compressible": false, + "extensions": ["png"] + }, + "image/prs.btif": { + "source": "iana", + "extensions": ["btif"] + }, + "image/prs.pti": { + "source": "iana", + "extensions": ["pti"] + }, + "image/pwg-raster": { + "source": "iana" + }, + "image/sgi": { + "source": "apache", + "extensions": ["sgi"] + }, + "image/svg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["svg","svgz"] + }, + "image/t38": { + "source": "iana", + "extensions": ["t38"] + }, + "image/tiff": { + "source": "iana", + "compressible": false, + "extensions": ["tif","tiff"] + }, + "image/tiff-fx": { + "source": "iana", + "extensions": ["tfx"] + }, + "image/vnd.adobe.photoshop": { + "source": "iana", + "compressible": true, + "extensions": ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + "source": "iana", + "extensions": ["azv"] + }, + "image/vnd.cns.inf2": { + "source": "iana" + }, + "image/vnd.dece.graphic": { + "source": "iana", + "extensions": ["uvi","uvvi","uvg","uvvg"] + }, + "image/vnd.djvu": { + "source": "iana", + "extensions": ["djvu","djv"] + }, + "image/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "image/vnd.dwg": { + "source": "iana", + "extensions": ["dwg"] + }, + "image/vnd.dxf": { + "source": "iana", + "extensions": ["dxf"] + }, + "image/vnd.fastbidsheet": { + "source": "iana", + "extensions": ["fbs"] + }, + "image/vnd.fpx": { + "source": "iana", + "extensions": ["fpx"] + }, + "image/vnd.fst": { + "source": "iana", + "extensions": ["fst"] + }, + "image/vnd.fujixerox.edmics-mmr": { + "source": "iana", + "extensions": ["mmr"] + }, + "image/vnd.fujixerox.edmics-rlc": { + "source": "iana", + "extensions": ["rlc"] + }, + "image/vnd.globalgraphics.pgb": { + "source": "iana" + }, + "image/vnd.microsoft.icon": { + "source": "iana", + "compressible": true, + "extensions": ["ico"] + }, + "image/vnd.mix": { + "source": "iana" + }, + "image/vnd.mozilla.apng": { + "source": "iana" + }, + "image/vnd.ms-dds": { + "compressible": true, + "extensions": ["dds"] + }, + "image/vnd.ms-modi": { + "source": "iana", + "extensions": ["mdi"] + }, + "image/vnd.ms-photo": { + "source": "apache", + "extensions": ["wdp"] + }, + "image/vnd.net-fpx": { + "source": "iana", + "extensions": ["npx"] + }, + "image/vnd.pco.b16": { + "source": "iana", + "extensions": ["b16"] + }, + "image/vnd.radiance": { + "source": "iana" + }, + "image/vnd.sealed.png": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.gif": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.jpg": { + "source": "iana" + }, + "image/vnd.svf": { + "source": "iana" + }, + "image/vnd.tencent.tap": { + "source": "iana", + "extensions": ["tap"] + }, + "image/vnd.valve.source.texture": { + "source": "iana", + "extensions": ["vtf"] + }, + "image/vnd.wap.wbmp": { + "source": "iana", + "extensions": ["wbmp"] + }, + "image/vnd.xiff": { + "source": "iana", + "extensions": ["xif"] + }, + "image/vnd.zbrush.pcx": { + "source": "iana", + "extensions": ["pcx"] + }, + "image/webp": { + "source": "apache", + "extensions": ["webp"] + }, + "image/wmf": { + "source": "iana", + "extensions": ["wmf"] + }, + "image/x-3ds": { + "source": "apache", + "extensions": ["3ds"] + }, + "image/x-cmu-raster": { + "source": "apache", + "extensions": ["ras"] + }, + "image/x-cmx": { + "source": "apache", + "extensions": ["cmx"] + }, + "image/x-freehand": { + "source": "apache", + "extensions": ["fh","fhc","fh4","fh5","fh7"] + }, + "image/x-icon": { + "source": "apache", + "compressible": true, + "extensions": ["ico"] + }, + "image/x-jng": { + "source": "nginx", + "extensions": ["jng"] + }, + "image/x-mrsid-image": { + "source": "apache", + "extensions": ["sid"] + }, + "image/x-ms-bmp": { + "source": "nginx", + "compressible": true, + "extensions": ["bmp"] + }, + "image/x-pcx": { + "source": "apache", + "extensions": ["pcx"] + }, + "image/x-pict": { + "source": "apache", + "extensions": ["pic","pct"] + }, + "image/x-portable-anymap": { + "source": "apache", + "extensions": ["pnm"] + }, + "image/x-portable-bitmap": { + "source": "apache", + "extensions": ["pbm"] + }, + "image/x-portable-graymap": { + "source": "apache", + "extensions": ["pgm"] + }, + "image/x-portable-pixmap": { + "source": "apache", + "extensions": ["ppm"] + }, + "image/x-rgb": { + "source": "apache", + "extensions": ["rgb"] + }, + "image/x-tga": { + "source": "apache", + "extensions": ["tga"] + }, + "image/x-xbitmap": { + "source": "apache", + "extensions": ["xbm"] + }, + "image/x-xcf": { + "compressible": false + }, + "image/x-xpixmap": { + "source": "apache", + "extensions": ["xpm"] + }, + "image/x-xwindowdump": { + "source": "apache", + "extensions": ["xwd"] + }, + "message/cpim": { + "source": "iana" + }, + "message/delivery-status": { + "source": "iana" + }, + "message/disposition-notification": { + "source": "iana", + "extensions": [ + "disposition-notification" + ] + }, + "message/external-body": { + "source": "iana" + }, + "message/feedback-report": { + "source": "iana" + }, + "message/global": { + "source": "iana", + "extensions": ["u8msg"] + }, + "message/global-delivery-status": { + "source": "iana", + "extensions": ["u8dsn"] + }, + "message/global-disposition-notification": { + "source": "iana", + "extensions": ["u8mdn"] + }, + "message/global-headers": { + "source": "iana", + "extensions": ["u8hdr"] + }, + "message/http": { + "source": "iana", + "compressible": false + }, + "message/imdn+xml": { + "source": "iana", + "compressible": true + }, + "message/news": { + "source": "iana" + }, + "message/partial": { + "source": "iana", + "compressible": false + }, + "message/rfc822": { + "source": "iana", + "compressible": true, + "extensions": ["eml","mime"] + }, + "message/s-http": { + "source": "iana" + }, + "message/sip": { + "source": "iana" + }, + "message/sipfrag": { + "source": "iana" + }, + "message/tracking-status": { + "source": "iana" + }, + "message/vnd.si.simp": { + "source": "iana" + }, + "message/vnd.wfa.wsc": { + "source": "iana", + "extensions": ["wsc"] + }, + "model/3mf": { + "source": "iana", + "extensions": ["3mf"] + }, + "model/e57": { + "source": "iana" + }, + "model/gltf+json": { + "source": "iana", + "compressible": true, + "extensions": ["gltf"] + }, + "model/gltf-binary": { + "source": "iana", + "compressible": true, + "extensions": ["glb"] + }, + "model/iges": { + "source": "iana", + "compressible": false, + "extensions": ["igs","iges"] + }, + "model/mesh": { + "source": "iana", + "compressible": false, + "extensions": ["msh","mesh","silo"] + }, + "model/mtl": { + "source": "iana", + "extensions": ["mtl"] + }, + "model/obj": { + "source": "iana", + "extensions": ["obj"] + }, + "model/step": { + "source": "iana" + }, + "model/step+xml": { + "source": "iana", + "compressible": true, + "extensions": ["stpx"] + }, + "model/step+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpz"] + }, + "model/step-xml+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpxz"] + }, + "model/stl": { + "source": "iana", + "extensions": ["stl"] + }, + "model/vnd.collada+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dae"] + }, + "model/vnd.dwf": { + "source": "iana", + "extensions": ["dwf"] + }, + "model/vnd.flatland.3dml": { + "source": "iana" + }, + "model/vnd.gdl": { + "source": "iana", + "extensions": ["gdl"] + }, + "model/vnd.gs-gdl": { + "source": "apache" + }, + "model/vnd.gs.gdl": { + "source": "iana" + }, + "model/vnd.gtw": { + "source": "iana", + "extensions": ["gtw"] + }, + "model/vnd.moml+xml": { + "source": "iana", + "compressible": true + }, + "model/vnd.mts": { + "source": "iana", + "extensions": ["mts"] + }, + "model/vnd.opengex": { + "source": "iana", + "extensions": ["ogex"] + }, + "model/vnd.parasolid.transmit.binary": { + "source": "iana", + "extensions": ["x_b"] + }, + "model/vnd.parasolid.transmit.text": { + "source": "iana", + "extensions": ["x_t"] + }, + "model/vnd.pytha.pyox": { + "source": "iana" + }, + "model/vnd.rosette.annotated-data-model": { + "source": "iana" + }, + "model/vnd.sap.vds": { + "source": "iana", + "extensions": ["vds"] + }, + "model/vnd.usdz+zip": { + "source": "iana", + "compressible": false, + "extensions": ["usdz"] + }, + "model/vnd.valve.source.compiled-map": { + "source": "iana", + "extensions": ["bsp"] + }, + "model/vnd.vtu": { + "source": "iana", + "extensions": ["vtu"] + }, + "model/vrml": { + "source": "iana", + "compressible": false, + "extensions": ["wrl","vrml"] + }, + "model/x3d+binary": { + "source": "apache", + "compressible": false, + "extensions": ["x3db","x3dbz"] + }, + "model/x3d+fastinfoset": { + "source": "iana", + "extensions": ["x3db"] + }, + "model/x3d+vrml": { + "source": "apache", + "compressible": false, + "extensions": ["x3dv","x3dvz"] + }, + "model/x3d+xml": { + "source": "iana", + "compressible": true, + "extensions": ["x3d","x3dz"] + }, + "model/x3d-vrml": { + "source": "iana", + "extensions": ["x3dv"] + }, + "multipart/alternative": { + "source": "iana", + "compressible": false + }, + "multipart/appledouble": { + "source": "iana" + }, + "multipart/byteranges": { + "source": "iana" + }, + "multipart/digest": { + "source": "iana" + }, + "multipart/encrypted": { + "source": "iana", + "compressible": false + }, + "multipart/form-data": { + "source": "iana", + "compressible": false + }, + "multipart/header-set": { + "source": "iana" + }, + "multipart/mixed": { + "source": "iana" + }, + "multipart/multilingual": { + "source": "iana" + }, + "multipart/parallel": { + "source": "iana" + }, + "multipart/related": { + "source": "iana", + "compressible": false + }, + "multipart/report": { + "source": "iana" + }, + "multipart/signed": { + "source": "iana", + "compressible": false + }, + "multipart/vnd.bint.med-plus": { + "source": "iana" + }, + "multipart/voice-message": { + "source": "iana" + }, + "multipart/x-mixed-replace": { + "source": "iana" + }, + "text/1d-interleaved-parityfec": { + "source": "iana" + }, + "text/cache-manifest": { + "source": "iana", + "compressible": true, + "extensions": ["appcache","manifest"] + }, + "text/calendar": { + "source": "iana", + "extensions": ["ics","ifb"] + }, + "text/calender": { + "compressible": true + }, + "text/cmd": { + "compressible": true + }, + "text/coffeescript": { + "extensions": ["coffee","litcoffee"] + }, + "text/cql": { + "source": "iana" + }, + "text/cql-expression": { + "source": "iana" + }, + "text/cql-identifier": { + "source": "iana" + }, + "text/css": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["css"] + }, + "text/csv": { + "source": "iana", + "compressible": true, + "extensions": ["csv"] + }, + "text/csv-schema": { + "source": "iana" + }, + "text/directory": { + "source": "iana" + }, + "text/dns": { + "source": "iana" + }, + "text/ecmascript": { + "source": "iana" + }, + "text/encaprtp": { + "source": "iana" + }, + "text/enriched": { + "source": "iana" + }, + "text/fhirpath": { + "source": "iana" + }, + "text/flexfec": { + "source": "iana" + }, + "text/fwdred": { + "source": "iana" + }, + "text/gff3": { + "source": "iana" + }, + "text/grammar-ref-list": { + "source": "iana" + }, + "text/html": { + "source": "iana", + "compressible": true, + "extensions": ["html","htm","shtml"] + }, + "text/jade": { + "extensions": ["jade"] + }, + "text/javascript": { + "source": "iana", + "compressible": true + }, + "text/jcr-cnd": { + "source": "iana" + }, + "text/jsx": { + "compressible": true, + "extensions": ["jsx"] + }, + "text/less": { + "compressible": true, + "extensions": ["less"] + }, + "text/markdown": { + "source": "iana", + "compressible": true, + "extensions": ["markdown","md"] + }, + "text/mathml": { + "source": "nginx", + "extensions": ["mml"] + }, + "text/mdx": { + "compressible": true, + "extensions": ["mdx"] + }, + "text/mizar": { + "source": "iana" + }, + "text/n3": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["n3"] + }, + "text/parameters": { + "source": "iana", + "charset": "UTF-8" + }, + "text/parityfec": { + "source": "iana" + }, + "text/plain": { + "source": "iana", + "compressible": true, + "extensions": ["txt","text","conf","def","list","log","in","ini"] + }, + "text/provenance-notation": { + "source": "iana", + "charset": "UTF-8" + }, + "text/prs.fallenstein.rst": { + "source": "iana" + }, + "text/prs.lines.tag": { + "source": "iana", + "extensions": ["dsc"] + }, + "text/prs.prop.logic": { + "source": "iana" + }, + "text/raptorfec": { + "source": "iana" + }, + "text/red": { + "source": "iana" + }, + "text/rfc822-headers": { + "source": "iana" + }, + "text/richtext": { + "source": "iana", + "compressible": true, + "extensions": ["rtx"] + }, + "text/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "text/rtp-enc-aescm128": { + "source": "iana" + }, + "text/rtploopback": { + "source": "iana" + }, + "text/rtx": { + "source": "iana" + }, + "text/sgml": { + "source": "iana", + "extensions": ["sgml","sgm"] + }, + "text/shaclc": { + "source": "iana" + }, + "text/shex": { + "source": "iana", + "extensions": ["shex"] + }, + "text/slim": { + "extensions": ["slim","slm"] + }, + "text/spdx": { + "source": "iana", + "extensions": ["spdx"] + }, + "text/strings": { + "source": "iana" + }, + "text/stylus": { + "extensions": ["stylus","styl"] + }, + "text/t140": { + "source": "iana" + }, + "text/tab-separated-values": { + "source": "iana", + "compressible": true, + "extensions": ["tsv"] + }, + "text/troff": { + "source": "iana", + "extensions": ["t","tr","roff","man","me","ms"] + }, + "text/turtle": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["ttl"] + }, + "text/ulpfec": { + "source": "iana" + }, + "text/uri-list": { + "source": "iana", + "compressible": true, + "extensions": ["uri","uris","urls"] + }, + "text/vcard": { + "source": "iana", + "compressible": true, + "extensions": ["vcard"] + }, + "text/vnd.a": { + "source": "iana" + }, + "text/vnd.abc": { + "source": "iana" + }, + "text/vnd.ascii-art": { + "source": "iana" + }, + "text/vnd.curl": { + "source": "iana", + "extensions": ["curl"] + }, + "text/vnd.curl.dcurl": { + "source": "apache", + "extensions": ["dcurl"] + }, + "text/vnd.curl.mcurl": { + "source": "apache", + "extensions": ["mcurl"] + }, + "text/vnd.curl.scurl": { + "source": "apache", + "extensions": ["scurl"] + }, + "text/vnd.debian.copyright": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.dmclientscript": { + "source": "iana" + }, + "text/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.familysearch.gedcom": { + "source": "iana", + "extensions": ["ged"] + }, + "text/vnd.ficlab.flt": { + "source": "iana" + }, + "text/vnd.fly": { + "source": "iana", + "extensions": ["fly"] + }, + "text/vnd.fmi.flexstor": { + "source": "iana", + "extensions": ["flx"] + }, + "text/vnd.gml": { + "source": "iana" + }, + "text/vnd.graphviz": { + "source": "iana", + "extensions": ["gv"] + }, + "text/vnd.hans": { + "source": "iana" + }, + "text/vnd.hgl": { + "source": "iana" + }, + "text/vnd.in3d.3dml": { + "source": "iana", + "extensions": ["3dml"] + }, + "text/vnd.in3d.spot": { + "source": "iana", + "extensions": ["spot"] + }, + "text/vnd.iptc.newsml": { + "source": "iana" + }, + "text/vnd.iptc.nitf": { + "source": "iana" + }, + "text/vnd.latex-z": { + "source": "iana" + }, + "text/vnd.motorola.reflex": { + "source": "iana" + }, + "text/vnd.ms-mediapackage": { + "source": "iana" + }, + "text/vnd.net2phone.commcenter.command": { + "source": "iana" + }, + "text/vnd.radisys.msml-basic-layout": { + "source": "iana" + }, + "text/vnd.senx.warpscript": { + "source": "iana" + }, + "text/vnd.si.uricatalogue": { + "source": "iana" + }, + "text/vnd.sosi": { + "source": "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["jad"] + }, + "text/vnd.trolltech.linguist": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.wap.si": { + "source": "iana" + }, + "text/vnd.wap.sl": { + "source": "iana" + }, + "text/vnd.wap.wml": { + "source": "iana", + "extensions": ["wml"] + }, + "text/vnd.wap.wmlscript": { + "source": "iana", + "extensions": ["wmls"] + }, + "text/vtt": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["vtt"] + }, + "text/x-asm": { + "source": "apache", + "extensions": ["s","asm"] + }, + "text/x-c": { + "source": "apache", + "extensions": ["c","cc","cxx","cpp","h","hh","dic"] + }, + "text/x-component": { + "source": "nginx", + "extensions": ["htc"] + }, + "text/x-fortran": { + "source": "apache", + "extensions": ["f","for","f77","f90"] + }, + "text/x-gwt-rpc": { + "compressible": true + }, + "text/x-handlebars-template": { + "extensions": ["hbs"] + }, + "text/x-java-source": { + "source": "apache", + "extensions": ["java"] + }, + "text/x-jquery-tmpl": { + "compressible": true + }, + "text/x-lua": { + "extensions": ["lua"] + }, + "text/x-markdown": { + "compressible": true, + "extensions": ["mkd"] + }, + "text/x-nfo": { + "source": "apache", + "extensions": ["nfo"] + }, + "text/x-opml": { + "source": "apache", + "extensions": ["opml"] + }, + "text/x-org": { + "compressible": true, + "extensions": ["org"] + }, + "text/x-pascal": { + "source": "apache", + "extensions": ["p","pas"] + }, + "text/x-processing": { + "compressible": true, + "extensions": ["pde"] + }, + "text/x-sass": { + "extensions": ["sass"] + }, + "text/x-scss": { + "extensions": ["scss"] + }, + "text/x-setext": { + "source": "apache", + "extensions": ["etx"] + }, + "text/x-sfv": { + "source": "apache", + "extensions": ["sfv"] + }, + "text/x-suse-ymp": { + "compressible": true, + "extensions": ["ymp"] + }, + "text/x-uuencode": { + "source": "apache", + "extensions": ["uu"] + }, + "text/x-vcalendar": { + "source": "apache", + "extensions": ["vcs"] + }, + "text/x-vcard": { + "source": "apache", + "extensions": ["vcf"] + }, + "text/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml"] + }, + "text/xml-external-parsed-entity": { + "source": "iana" + }, + "text/yaml": { + "compressible": true, + "extensions": ["yaml","yml"] + }, + "video/1d-interleaved-parityfec": { + "source": "iana" + }, + "video/3gpp": { + "source": "iana", + "extensions": ["3gp","3gpp"] + }, + "video/3gpp-tt": { + "source": "iana" + }, + "video/3gpp2": { + "source": "iana", + "extensions": ["3g2"] + }, + "video/av1": { + "source": "iana" + }, + "video/bmpeg": { + "source": "iana" + }, + "video/bt656": { + "source": "iana" + }, + "video/celb": { + "source": "iana" + }, + "video/dv": { + "source": "iana" + }, + "video/encaprtp": { + "source": "iana" + }, + "video/ffv1": { + "source": "iana" + }, + "video/flexfec": { + "source": "iana" + }, + "video/h261": { + "source": "iana", + "extensions": ["h261"] + }, + "video/h263": { + "source": "iana", + "extensions": ["h263"] + }, + "video/h263-1998": { + "source": "iana" + }, + "video/h263-2000": { + "source": "iana" + }, + "video/h264": { + "source": "iana", + "extensions": ["h264"] + }, + "video/h264-rcdo": { + "source": "iana" + }, + "video/h264-svc": { + "source": "iana" + }, + "video/h265": { + "source": "iana" + }, + "video/iso.segment": { + "source": "iana", + "extensions": ["m4s"] + }, + "video/jpeg": { + "source": "iana", + "extensions": ["jpgv"] + }, + "video/jpeg2000": { + "source": "iana" + }, + "video/jpm": { + "source": "apache", + "extensions": ["jpm","jpgm"] + }, + "video/jxsv": { + "source": "iana" + }, + "video/mj2": { + "source": "iana", + "extensions": ["mj2","mjp2"] + }, + "video/mp1s": { + "source": "iana" + }, + "video/mp2p": { + "source": "iana" + }, + "video/mp2t": { + "source": "iana", + "extensions": ["ts"] + }, + "video/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["mp4","mp4v","mpg4"] + }, + "video/mp4v-es": { + "source": "iana" + }, + "video/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpeg","mpg","mpe","m1v","m2v"] + }, + "video/mpeg4-generic": { + "source": "iana" + }, + "video/mpv": { + "source": "iana" + }, + "video/nv": { + "source": "iana" + }, + "video/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogv"] + }, + "video/parityfec": { + "source": "iana" + }, + "video/pointer": { + "source": "iana" + }, + "video/quicktime": { + "source": "iana", + "compressible": false, + "extensions": ["qt","mov"] + }, + "video/raptorfec": { + "source": "iana" + }, + "video/raw": { + "source": "iana" + }, + "video/rtp-enc-aescm128": { + "source": "iana" + }, + "video/rtploopback": { + "source": "iana" + }, + "video/rtx": { + "source": "iana" + }, + "video/scip": { + "source": "iana" + }, + "video/smpte291": { + "source": "iana" + }, + "video/smpte292m": { + "source": "iana" + }, + "video/ulpfec": { + "source": "iana" + }, + "video/vc1": { + "source": "iana" + }, + "video/vc2": { + "source": "iana" + }, + "video/vnd.cctv": { + "source": "iana" + }, + "video/vnd.dece.hd": { + "source": "iana", + "extensions": ["uvh","uvvh"] + }, + "video/vnd.dece.mobile": { + "source": "iana", + "extensions": ["uvm","uvvm"] + }, + "video/vnd.dece.mp4": { + "source": "iana" + }, + "video/vnd.dece.pd": { + "source": "iana", + "extensions": ["uvp","uvvp"] + }, + "video/vnd.dece.sd": { + "source": "iana", + "extensions": ["uvs","uvvs"] + }, + "video/vnd.dece.video": { + "source": "iana", + "extensions": ["uvv","uvvv"] + }, + "video/vnd.directv.mpeg": { + "source": "iana" + }, + "video/vnd.directv.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dlna.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dvb.file": { + "source": "iana", + "extensions": ["dvb"] + }, + "video/vnd.fvt": { + "source": "iana", + "extensions": ["fvt"] + }, + "video/vnd.hns.video": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsavc": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsmpeg2": { + "source": "iana" + }, + "video/vnd.motorola.video": { + "source": "iana" + }, + "video/vnd.motorola.videop": { + "source": "iana" + }, + "video/vnd.mpegurl": { + "source": "iana", + "extensions": ["mxu","m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + "source": "iana", + "extensions": ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + "source": "iana" + }, + "video/vnd.nokia.mp4vr": { + "source": "iana" + }, + "video/vnd.nokia.videovoip": { + "source": "iana" + }, + "video/vnd.objectvideo": { + "source": "iana" + }, + "video/vnd.radgamettools.bink": { + "source": "iana" + }, + "video/vnd.radgamettools.smacker": { + "source": "iana" + }, + "video/vnd.sealed.mpeg1": { + "source": "iana" + }, + "video/vnd.sealed.mpeg4": { + "source": "iana" + }, + "video/vnd.sealed.swf": { + "source": "iana" + }, + "video/vnd.sealedmedia.softseal.mov": { + "source": "iana" + }, + "video/vnd.uvvu.mp4": { + "source": "iana", + "extensions": ["uvu","uvvu"] + }, + "video/vnd.vivo": { + "source": "iana", + "extensions": ["viv"] + }, + "video/vnd.youtube.yt": { + "source": "iana" + }, + "video/vp8": { + "source": "iana" + }, + "video/vp9": { + "source": "iana" + }, + "video/webm": { + "source": "apache", + "compressible": false, + "extensions": ["webm"] + }, + "video/x-f4v": { + "source": "apache", + "extensions": ["f4v"] + }, + "video/x-fli": { + "source": "apache", + "extensions": ["fli"] + }, + "video/x-flv": { + "source": "apache", + "compressible": false, + "extensions": ["flv"] + }, + "video/x-m4v": { + "source": "apache", + "extensions": ["m4v"] + }, + "video/x-matroska": { + "source": "apache", + "compressible": false, + "extensions": ["mkv","mk3d","mks"] + }, + "video/x-mng": { + "source": "apache", + "extensions": ["mng"] + }, + "video/x-ms-asf": { + "source": "apache", + "extensions": ["asf","asx"] + }, + "video/x-ms-vob": { + "source": "apache", + "extensions": ["vob"] + }, + "video/x-ms-wm": { + "source": "apache", + "extensions": ["wm"] + }, + "video/x-ms-wmv": { + "source": "apache", + "compressible": false, + "extensions": ["wmv"] + }, + "video/x-ms-wmx": { + "source": "apache", + "extensions": ["wmx"] + }, + "video/x-ms-wvx": { + "source": "apache", + "extensions": ["wvx"] + }, + "video/x-msvideo": { + "source": "apache", + "extensions": ["avi"] + }, + "video/x-sgi-movie": { + "source": "apache", + "extensions": ["movie"] + }, + "video/x-smv": { + "source": "apache", + "extensions": ["smv"] + }, + "x-conference/x-cooltalk": { + "source": "apache", + "extensions": ["ice"] + }, + "x-shader/x-fragment": { + "compressible": true + }, + "x-shader/x-vertex": { + "compressible": true + } +} diff --git a/node_modules/mime-db/index.js b/node_modules/mime-db/index.js new file mode 100644 index 0000000..ec2be30 --- /dev/null +++ b/node_modules/mime-db/index.js @@ -0,0 +1,12 @@ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = require('./db.json') diff --git a/node_modules/mime-db/package.json b/node_modules/mime-db/package.json new file mode 100644 index 0000000..32c14b8 --- /dev/null +++ b/node_modules/mime-db/package.json @@ -0,0 +1,60 @@ +{ + "name": "mime-db", + "description": "Media Type Database", + "version": "1.52.0", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)", + "Robert Kieffer (http://github.com/broofa)" + ], + "license": "MIT", + "keywords": [ + "mime", + "db", + "type", + "types", + "database", + "charset", + "charsets" + ], + "repository": "jshttp/mime-db", + "devDependencies": { + "bluebird": "3.7.2", + "co": "4.6.0", + "cogent": "1.0.1", + "csv-parse": "4.16.3", + "eslint": "7.32.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.1.1", + "eslint-plugin-standard": "4.1.0", + "gnode": "0.1.2", + "media-typer": "1.1.0", + "mocha": "9.2.1", + "nyc": "15.1.0", + "raw-body": "2.5.0", + "stream-to-array": "2.3.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "db.json", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "build": "node scripts/build", + "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx", + "lint": "eslint .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "update": "npm run fetch && npm run build", + "version": "node scripts/version-history.js && git add HISTORY.md" + } +} diff --git a/node_modules/mime-types/HISTORY.md b/node_modules/mime-types/HISTORY.md new file mode 100644 index 0000000..c5043b7 --- /dev/null +++ b/node_modules/mime-types/HISTORY.md @@ -0,0 +1,397 @@ +2.1.35 / 2022-03-12 +=================== + + * deps: mime-db@1.52.0 + - Add extensions from IANA for more `image/*` types + - Add extension `.asc` to `application/pgp-keys` + - Add extensions to various XML types + - Add new upstream MIME types + +2.1.34 / 2021-11-08 +=================== + + * deps: mime-db@1.51.0 + - Add new upstream MIME types + +2.1.33 / 2021-10-01 +=================== + + * deps: mime-db@1.50.0 + - Add deprecated iWorks mime types and extensions + - Add new upstream MIME types + +2.1.32 / 2021-07-27 +=================== + + * deps: mime-db@1.49.0 + - Add extension `.trig` to `application/trig` + - Add new upstream MIME types + +2.1.31 / 2021-06-01 +=================== + + * deps: mime-db@1.48.0 + - Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + - Add new upstream MIME types + +2.1.30 / 2021-04-02 +=================== + + * deps: mime-db@1.47.0 + - Add extension `.amr` to `audio/amr` + - Remove ambigious extensions from IANA for `application/*+xml` types + - Update primary extension to `.es` for `application/ecmascript` + +2.1.29 / 2021-02-17 +=================== + + * deps: mime-db@1.46.0 + - Add extension `.amr` to `audio/amr` + - Add extension `.m4s` to `video/iso.segment` + - Add extension `.opus` to `audio/ogg` + - Add new upstream MIME types + +2.1.28 / 2021-01-01 +=================== + + * deps: mime-db@1.45.0 + - Add `application/ubjson` with extension `.ubj` + - Add `image/avif` with extension `.avif` + - Add `image/ktx2` with extension `.ktx2` + - Add extension `.dbf` to `application/vnd.dbf` + - Add extension `.rar` to `application/vnd.rar` + - Add extension `.td` to `application/urc-targetdesc+xml` + - Add new upstream MIME types + - Fix extension of `application/vnd.apple.keynote` to be `.key` + +2.1.27 / 2020-04-23 +=================== + + * deps: mime-db@1.44.0 + - Add charsets from IANA + - Add extension `.cjs` to `application/node` + - Add new upstream MIME types + +2.1.26 / 2020-01-05 +=================== + + * deps: mime-db@1.43.0 + - Add `application/x-keepass2` with extension `.kdbx` + - Add extension `.mxmf` to `audio/mobile-xmf` + - Add extensions from IANA for `application/*+xml` types + - Add new upstream MIME types + +2.1.25 / 2019-11-12 +=================== + + * deps: mime-db@1.42.0 + - Add new upstream MIME types + - Add `application/toml` with extension `.toml` + - Add `image/vnd.ms-dds` with extension `.dds` + +2.1.24 / 2019-04-20 +=================== + + * deps: mime-db@1.40.0 + - Add extensions from IANA for `model/*` types + - Add `text/mdx` with extension `.mdx` + +2.1.23 / 2019-04-17 +=================== + + * deps: mime-db@~1.39.0 + - Add extensions `.siv` and `.sieve` to `application/sieve` + - Add new upstream MIME types + +2.1.22 / 2019-02-14 +=================== + + * deps: mime-db@~1.38.0 + - Add extension `.nq` to `application/n-quads` + - Add extension `.nt` to `application/n-triples` + - Add new upstream MIME types + +2.1.21 / 2018-10-19 +=================== + + * deps: mime-db@~1.37.0 + - Add extensions to HEIC image types + - Add new upstream MIME types + +2.1.20 / 2018-08-26 +=================== + + * deps: mime-db@~1.36.0 + - Add Apple file extensions from IANA + - Add extensions from IANA for `image/*` types + - Add new upstream MIME types + +2.1.19 / 2018-07-17 +=================== + + * deps: mime-db@~1.35.0 + - Add extension `.csl` to `application/vnd.citationstyles.style+xml` + - Add extension `.es` to `application/ecmascript` + - Add extension `.owl` to `application/rdf+xml` + - Add new upstream MIME types + - Add UTF-8 as default charset for `text/turtle` + +2.1.18 / 2018-02-16 +=================== + + * deps: mime-db@~1.33.0 + - Add `application/raml+yaml` with extension `.raml` + - Add `application/wasm` with extension `.wasm` + - Add `text/shex` with extension `.shex` + - Add extensions for JPEG-2000 images + - Add extensions from IANA for `message/*` types + - Add new upstream MIME types + - Update font MIME types + - Update `text/hjson` to registered `application/hjson` + +2.1.17 / 2017-09-01 +=================== + + * deps: mime-db@~1.30.0 + - Add `application/vnd.ms-outlook` + - Add `application/x-arj` + - Add extension `.mjs` to `application/javascript` + - Add glTF types and extensions + - Add new upstream MIME types + - Add `text/x-org` + - Add VirtualBox MIME types + - Fix `source` records for `video/*` types that are IANA + - Update `font/opentype` to registered `font/otf` + +2.1.16 / 2017-07-24 +=================== + + * deps: mime-db@~1.29.0 + - Add `application/fido.trusted-apps+json` + - Add extension `.wadl` to `application/vnd.sun.wadl+xml` + - Add extension `.gz` to `application/gzip` + - Add new upstream MIME types + - Update extensions `.md` and `.markdown` to be `text/markdown` + +2.1.15 / 2017-03-23 +=================== + + * deps: mime-db@~1.27.0 + - Add new mime types + - Add `image/apng` + +2.1.14 / 2017-01-14 +=================== + + * deps: mime-db@~1.26.0 + - Add new mime types + +2.1.13 / 2016-11-18 +=================== + + * deps: mime-db@~1.25.0 + - Add new mime types + +2.1.12 / 2016-09-18 +=================== + + * deps: mime-db@~1.24.0 + - Add new mime types + - Add `audio/mp3` + +2.1.11 / 2016-05-01 +=================== + + * deps: mime-db@~1.23.0 + - Add new mime types + +2.1.10 / 2016-02-15 +=================== + + * deps: mime-db@~1.22.0 + - Add new mime types + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + +2.1.9 / 2016-01-06 +================== + + * deps: mime-db@~1.21.0 + - Add new mime types + +2.1.8 / 2015-11-30 +================== + + * deps: mime-db@~1.20.0 + - Add new mime types + +2.1.7 / 2015-09-20 +================== + + * deps: mime-db@~1.19.0 + - Add new mime types + +2.1.6 / 2015-09-03 +================== + + * deps: mime-db@~1.18.0 + - Add new mime types + +2.1.5 / 2015-08-20 +================== + + * deps: mime-db@~1.17.0 + - Add new mime types + +2.1.4 / 2015-07-30 +================== + + * deps: mime-db@~1.16.0 + - Add new mime types + +2.1.3 / 2015-07-13 +================== + + * deps: mime-db@~1.15.0 + - Add new mime types + +2.1.2 / 2015-06-25 +================== + + * deps: mime-db@~1.14.0 + - Add new mime types + +2.1.1 / 2015-06-08 +================== + + * perf: fix deopt during mapping + +2.1.0 / 2015-06-07 +================== + + * Fix incorrectly treating extension-less file name as extension + - i.e. `'path/to/json'` will no longer return `application/json` + * Fix `.charset(type)` to accept parameters + * Fix `.charset(type)` to match case-insensitive + * Improve generation of extension to MIME mapping + * Refactor internals for readability and no argument reassignment + * Prefer `application/*` MIME types from the same source + * Prefer any type over `application/octet-stream` + * deps: mime-db@~1.13.0 + - Add nginx as a source + - Add new mime types + +2.0.14 / 2015-06-06 +=================== + + * deps: mime-db@~1.12.0 + - Add new mime types + +2.0.13 / 2015-05-31 +=================== + + * deps: mime-db@~1.11.0 + - Add new mime types + +2.0.12 / 2015-05-19 +=================== + + * deps: mime-db@~1.10.0 + - Add new mime types + +2.0.11 / 2015-05-05 +=================== + + * deps: mime-db@~1.9.1 + - Add new mime types + +2.0.10 / 2015-03-13 +=================== + + * deps: mime-db@~1.8.0 + - Add new mime types + +2.0.9 / 2015-02-09 +================== + + * deps: mime-db@~1.7.0 + - Add new mime types + - Community extensions ownership transferred from `node-mime` + +2.0.8 / 2015-01-29 +================== + + * deps: mime-db@~1.6.0 + - Add new mime types + +2.0.7 / 2014-12-30 +================== + + * deps: mime-db@~1.5.0 + - Add new mime types + - Fix various invalid MIME type entries + +2.0.6 / 2014-12-30 +================== + + * deps: mime-db@~1.4.0 + - Add new mime types + - Fix various invalid MIME type entries + - Remove example template MIME types + +2.0.5 / 2014-12-29 +================== + + * deps: mime-db@~1.3.1 + - Fix missing extensions + +2.0.4 / 2014-12-10 +================== + + * deps: mime-db@~1.3.0 + - Add new mime types + +2.0.3 / 2014-11-09 +================== + + * deps: mime-db@~1.2.0 + - Add new mime types + +2.0.2 / 2014-09-28 +================== + + * deps: mime-db@~1.1.0 + - Add new mime types + - Update charsets + +2.0.1 / 2014-09-07 +================== + + * Support Node.js 0.6 + +2.0.0 / 2014-09-02 +================== + + * Use `mime-db` + * Remove `.define()` + +1.0.2 / 2014-08-04 +================== + + * Set charset=utf-8 for `text/javascript` + +1.0.1 / 2014-06-24 +================== + + * Add `text/jsx` type + +1.0.0 / 2014-05-12 +================== + + * Return `false` for unknown types + * Set charset=utf-8 for `application/json` + +0.1.0 / 2014-05-02 +================== + + * Initial release diff --git a/node_modules/mime-types/LICENSE b/node_modules/mime-types/LICENSE new file mode 100644 index 0000000..0616607 --- /dev/null +++ b/node_modules/mime-types/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mime-types/README.md b/node_modules/mime-types/README.md new file mode 100644 index 0000000..48d2fb4 --- /dev/null +++ b/node_modules/mime-types/README.md @@ -0,0 +1,113 @@ +# mime-types + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +The ultimate javascript content-type utility. + +Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, + `mime-types` simply returns `false`, so do + `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- No `.define()` functionality +- Bug fixes for `.lookup(path)` + +Otherwise, the API is compatible with `mime` 1.x. + +## Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install mime-types +``` + +## Adding Types + +All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db), +so open a PR there if you'd like to add mime types. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' +mime.lookup('folder/.htaccess') // false + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. +When given an extension, `mime.lookup` is used to get the matching +content-type, otherwise the given content-type is used. Then if the +content-type does not already have a `charset` parameter, `mime.charset` +is used to get the default charset and add to the returned content-type. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +mime.contentType('text/html') // 'text/html; charset=utf-8' +mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1' + +// from a full path +mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/markdown') // 'UTF-8' +``` + +### var type = mime.types[extension] + +A map of content-types by extension. + +### [extensions...] = mime.extensions[type] + +A map of extensions by content-type. + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci +[ci-url]: https://github.com/jshttp/mime-types/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master +[node-version-image]: https://badgen.net/npm/node/mime-types +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-types +[npm-url]: https://npmjs.org/package/mime-types +[npm-version-image]: https://badgen.net/npm/v/mime-types diff --git a/node_modules/mime-types/index.js b/node_modules/mime-types/index.js new file mode 100644 index 0000000..b9f34d5 --- /dev/null +++ b/node_modules/mime-types/index.js @@ -0,0 +1,188 @@ +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var db = require('mime-db') +var extname = require('path').extname + +/** + * Module variables. + * @private + */ + +var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/ +var TEXT_TYPE_REGEXP = /^text\//i + +/** + * Module exports. + * @public + */ + +exports.charset = charset +exports.charsets = { lookup: charset } +exports.contentType = contentType +exports.extension = extension +exports.extensions = Object.create(null) +exports.lookup = lookup +exports.types = Object.create(null) + +// Populate the extensions/types maps +populateMaps(exports.extensions, exports.types) + +/** + * Get the default charset for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function charset (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + var mime = match && db[match[1].toLowerCase()] + + if (mime && mime.charset) { + return mime.charset + } + + // default text/* to utf-8 + if (match && TEXT_TYPE_REGEXP.test(match[1])) { + return 'UTF-8' + } + + return false +} + +/** + * Create a full Content-Type header given a MIME type or extension. + * + * @param {string} str + * @return {boolean|string} + */ + +function contentType (str) { + // TODO: should this even be in this module? + if (!str || typeof str !== 'string') { + return false + } + + var mime = str.indexOf('/') === -1 + ? exports.lookup(str) + : str + + if (!mime) { + return false + } + + // TODO: use content-type or other module + if (mime.indexOf('charset') === -1) { + var charset = exports.charset(mime) + if (charset) mime += '; charset=' + charset.toLowerCase() + } + + return mime +} + +/** + * Get the default extension for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function extension (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + + // get extensions + var exts = match && exports.extensions[match[1].toLowerCase()] + + if (!exts || !exts.length) { + return false + } + + return exts[0] +} + +/** + * Lookup the MIME type for a file path/extension. + * + * @param {string} path + * @return {boolean|string} + */ + +function lookup (path) { + if (!path || typeof path !== 'string') { + return false + } + + // get the extension ("ext" or ".ext" or full path) + var extension = extname('x.' + path) + .toLowerCase() + .substr(1) + + if (!extension) { + return false + } + + return exports.types[extension] || false +} + +/** + * Populate the extensions and types maps. + * @private + */ + +function populateMaps (extensions, types) { + // source preference (least -> most) + var preference = ['nginx', 'apache', undefined, 'iana'] + + Object.keys(db).forEach(function forEachMimeType (type) { + var mime = db[type] + var exts = mime.extensions + + if (!exts || !exts.length) { + return + } + + // mime -> extensions + extensions[type] = exts + + // extension -> mime + for (var i = 0; i < exts.length; i++) { + var extension = exts[i] + + if (types[extension]) { + var from = preference.indexOf(db[types[extension]].source) + var to = preference.indexOf(mime.source) + + if (types[extension] !== 'application/octet-stream' && + (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) { + // skip the remapping + continue + } + } + + // set the extension -> mime + types[extension] = type + } + }) +} diff --git a/node_modules/mime-types/package.json b/node_modules/mime-types/package.json new file mode 100644 index 0000000..bbef696 --- /dev/null +++ b/node_modules/mime-types/package.json @@ -0,0 +1,44 @@ +{ + "name": "mime-types", + "description": "The ultimate javascript content-type utility.", + "version": "2.1.35", + "contributors": [ + "Douglas Christopher Wilson ", + "Jeremiah Senkpiel (https://searchbeam.jit.su)", + "Jonathan Ong (http://jongleberry.com)" + ], + "license": "MIT", + "keywords": [ + "mime", + "types" + ], + "repository": "jshttp/mime-types", + "dependencies": { + "mime-db": "1.52.0" + }, + "devDependencies": { + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.2.0", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.2.2", + "nyc": "15.1.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec test/test.js", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/node_modules/node-fetch/LICENSE.md b/node_modules/node-fetch/LICENSE.md new file mode 100644 index 0000000..660ffec --- /dev/null +++ b/node_modules/node-fetch/LICENSE.md @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2016 David Frank + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_modules/node-fetch/README.md b/node_modules/node-fetch/README.md new file mode 100644 index 0000000..2dde742 --- /dev/null +++ b/node_modules/node-fetch/README.md @@ -0,0 +1,590 @@ +node-fetch +========== + +[![npm version][npm-image]][npm-url] +[![build status][travis-image]][travis-url] +[![coverage status][codecov-image]][codecov-url] +[![install size][install-size-image]][install-size-url] +[![Discord][discord-image]][discord-url] + +A light-weight module that brings `window.fetch` to Node.js + +(We are looking for [v2 maintainers and collaborators](https://github.com/bitinn/node-fetch/issues/567)) + +[![Backers][opencollective-image]][opencollective-url] + + + +- [Motivation](#motivation) +- [Features](#features) +- [Difference from client-side fetch](#difference-from-client-side-fetch) +- [Installation](#installation) +- [Loading and configuring the module](#loading-and-configuring-the-module) +- [Common Usage](#common-usage) + - [Plain text or HTML](#plain-text-or-html) + - [JSON](#json) + - [Simple Post](#simple-post) + - [Post with JSON](#post-with-json) + - [Post with form parameters](#post-with-form-parameters) + - [Handling exceptions](#handling-exceptions) + - [Handling client and server errors](#handling-client-and-server-errors) +- [Advanced Usage](#advanced-usage) + - [Streams](#streams) + - [Buffer](#buffer) + - [Accessing Headers and other Meta data](#accessing-headers-and-other-meta-data) + - [Extract Set-Cookie Header](#extract-set-cookie-header) + - [Post data using a file stream](#post-data-using-a-file-stream) + - [Post with form-data (detect multipart)](#post-with-form-data-detect-multipart) + - [Request cancellation with AbortSignal](#request-cancellation-with-abortsignal) +- [API](#api) + - [fetch(url[, options])](#fetchurl-options) + - [Options](#options) + - [Class: Request](#class-request) + - [Class: Response](#class-response) + - [Class: Headers](#class-headers) + - [Interface: Body](#interface-body) + - [Class: FetchError](#class-fetcherror) +- [License](#license) +- [Acknowledgement](#acknowledgement) + + + +## Motivation + +Instead of implementing `XMLHttpRequest` in Node.js to run browser-specific [Fetch polyfill](https://github.com/github/fetch), why not go from native `http` to `fetch` API directly? Hence, `node-fetch`, minimal code for a `window.fetch` compatible API on Node.js runtime. + +See Matt Andrews' [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch) or Leonardo Quixada's [cross-fetch](https://github.com/lquixada/cross-fetch) for isomorphic usage (exports `node-fetch` for server-side, `whatwg-fetch` for client-side). + +## Features + +- Stay consistent with `window.fetch` API. +- Make conscious trade-off when following [WHATWG fetch spec][whatwg-fetch] and [stream spec](https://streams.spec.whatwg.org/) implementation details, document known differences. +- Use native promise but allow substituting it with [insert your favorite promise library]. +- Use native Node streams for body on both request and response. +- Decode content encoding (gzip/deflate) properly and convert string output (such as `res.text()` and `res.json()`) to UTF-8 automatically. +- Useful extensions such as timeout, redirect limit, response size limit, [explicit errors](ERROR-HANDLING.md) for troubleshooting. + +## Difference from client-side fetch + +- See [Known Differences](LIMITS.md) for details. +- If you happen to use a missing feature that `window.fetch` offers, feel free to open an issue. +- Pull requests are welcomed too! + +## Installation + +Current stable release (`2.x`) + +```sh +$ npm install node-fetch +``` + +## Loading and configuring the module +We suggest you load the module via `require` until the stabilization of ES modules in node: +```js +const fetch = require('node-fetch'); +``` + +If you are using a Promise library other than native, set it through `fetch.Promise`: +```js +const Bluebird = require('bluebird'); + +fetch.Promise = Bluebird; +``` + +## Common Usage + +NOTE: The documentation below is up-to-date with `2.x` releases; see the [`1.x` readme](https://github.com/bitinn/node-fetch/blob/1.x/README.md), [changelog](https://github.com/bitinn/node-fetch/blob/1.x/CHANGELOG.md) and [2.x upgrade guide](UPGRADE-GUIDE.md) for the differences. + +#### Plain text or HTML +```js +fetch('https://github.com/') + .then(res => res.text()) + .then(body => console.log(body)); +``` + +#### JSON + +```js + +fetch('https://api.github.com/users/github') + .then(res => res.json()) + .then(json => console.log(json)); +``` + +#### Simple Post +```js +fetch('https://httpbin.org/post', { method: 'POST', body: 'a=1' }) + .then(res => res.json()) // expecting a json response + .then(json => console.log(json)); +``` + +#### Post with JSON + +```js +const body = { a: 1 }; + +fetch('https://httpbin.org/post', { + method: 'post', + body: JSON.stringify(body), + headers: { 'Content-Type': 'application/json' }, + }) + .then(res => res.json()) + .then(json => console.log(json)); +``` + +#### Post with form parameters +`URLSearchParams` is available in Node.js as of v7.5.0. See [official documentation](https://nodejs.org/api/url.html#url_class_urlsearchparams) for more usage methods. + +NOTE: The `Content-Type` header is only set automatically to `x-www-form-urlencoded` when an instance of `URLSearchParams` is given as such: + +```js +const { URLSearchParams } = require('url'); + +const params = new URLSearchParams(); +params.append('a', 1); + +fetch('https://httpbin.org/post', { method: 'POST', body: params }) + .then(res => res.json()) + .then(json => console.log(json)); +``` + +#### Handling exceptions +NOTE: 3xx-5xx responses are *NOT* exceptions and should be handled in `then()`; see the next section for more information. + +Adding a catch to the fetch promise chain will catch *all* exceptions, such as errors originating from node core libraries, network errors and operational errors, which are instances of FetchError. See the [error handling document](ERROR-HANDLING.md) for more details. + +```js +fetch('https://domain.invalid/') + .catch(err => console.error(err)); +``` + +#### Handling client and server errors +It is common to create a helper function to check that the response contains no client (4xx) or server (5xx) error responses: + +```js +function checkStatus(res) { + if (res.ok) { // res.status >= 200 && res.status < 300 + return res; + } else { + throw MyCustomError(res.statusText); + } +} + +fetch('https://httpbin.org/status/400') + .then(checkStatus) + .then(res => console.log('will not get here...')) +``` + +## Advanced Usage + +#### Streams +The "Node.js way" is to use streams when possible: + +```js +fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png') + .then(res => { + const dest = fs.createWriteStream('./octocat.png'); + res.body.pipe(dest); + }); +``` + +#### Buffer +If you prefer to cache binary data in full, use buffer(). (NOTE: `buffer()` is a `node-fetch`-only API) + +```js +const fileType = require('file-type'); + +fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png') + .then(res => res.buffer()) + .then(buffer => fileType(buffer)) + .then(type => { /* ... */ }); +``` + +#### Accessing Headers and other Meta data +```js +fetch('https://github.com/') + .then(res => { + console.log(res.ok); + console.log(res.status); + console.log(res.statusText); + console.log(res.headers.raw()); + console.log(res.headers.get('content-type')); + }); +``` + +#### Extract Set-Cookie Header + +Unlike browsers, you can access raw `Set-Cookie` headers manually using `Headers.raw()`. This is a `node-fetch` only API. + +```js +fetch(url).then(res => { + // returns an array of values, instead of a string of comma-separated values + console.log(res.headers.raw()['set-cookie']); +}); +``` + +#### Post data using a file stream + +```js +const { createReadStream } = require('fs'); + +const stream = createReadStream('input.txt'); + +fetch('https://httpbin.org/post', { method: 'POST', body: stream }) + .then(res => res.json()) + .then(json => console.log(json)); +``` + +#### Post with form-data (detect multipart) + +```js +const FormData = require('form-data'); + +const form = new FormData(); +form.append('a', 1); + +fetch('https://httpbin.org/post', { method: 'POST', body: form }) + .then(res => res.json()) + .then(json => console.log(json)); + +// OR, using custom headers +// NOTE: getHeaders() is non-standard API + +const form = new FormData(); +form.append('a', 1); + +const options = { + method: 'POST', + body: form, + headers: form.getHeaders() +} + +fetch('https://httpbin.org/post', options) + .then(res => res.json()) + .then(json => console.log(json)); +``` + +#### Request cancellation with AbortSignal + +> NOTE: You may cancel streamed requests only on Node >= v8.0.0 + +You may cancel requests with `AbortController`. A suggested implementation is [`abort-controller`](https://www.npmjs.com/package/abort-controller). + +An example of timing out a request after 150ms could be achieved as the following: + +```js +import AbortController from 'abort-controller'; + +const controller = new AbortController(); +const timeout = setTimeout( + () => { controller.abort(); }, + 150, +); + +fetch(url, { signal: controller.signal }) + .then(res => res.json()) + .then( + data => { + useData(data) + }, + err => { + if (err.name === 'AbortError') { + // request was aborted + } + }, + ) + .finally(() => { + clearTimeout(timeout); + }); +``` + +See [test cases](https://github.com/bitinn/node-fetch/blob/master/test/test.js) for more examples. + + +## API + +### fetch(url[, options]) + +- `url` A string representing the URL for fetching +- `options` [Options](#fetch-options) for the HTTP(S) request +- Returns: Promise<[Response](#class-response)> + +Perform an HTTP(S) fetch. + +`url` should be an absolute url, such as `https://example.com/`. A path-relative URL (`/file/under/root`) or protocol-relative URL (`//can-be-http-or-https.com/`) will result in a rejected `Promise`. + + +### Options + +The default values are shown after each option key. + +```js +{ + // These properties are part of the Fetch Standard + method: 'GET', + headers: {}, // request headers. format is the identical to that accepted by the Headers constructor (see below) + body: null, // request body. can be null, a string, a Buffer, a Blob, or a Node.js Readable stream + redirect: 'follow', // set to `manual` to extract redirect headers, `error` to reject redirect + signal: null, // pass an instance of AbortSignal to optionally abort requests + + // The following properties are node-fetch extensions + follow: 20, // maximum redirect count. 0 to not follow redirect + timeout: 0, // req/res timeout in ms, it resets on redirect. 0 to disable (OS limit applies). Signal is recommended instead. + compress: true, // support gzip/deflate content encoding. false to disable + size: 0, // maximum response body size in bytes. 0 to disable + agent: null // http(s).Agent instance or function that returns an instance (see below) +} +``` + +##### Default Headers + +If no values are set, the following request headers will be sent automatically: + +Header | Value +------------------- | -------------------------------------------------------- +`Accept-Encoding` | `gzip,deflate` _(when `options.compress === true`)_ +`Accept` | `*/*` +`Connection` | `close` _(when no `options.agent` is present)_ +`Content-Length` | _(automatically calculated, if possible)_ +`Transfer-Encoding` | `chunked` _(when `req.body` is a stream)_ +`User-Agent` | `node-fetch/1.0 (+https://github.com/bitinn/node-fetch)` + +Note: when `body` is a `Stream`, `Content-Length` is not set automatically. + +##### Custom Agent + +The `agent` option allows you to specify networking related options which are out of the scope of Fetch, including and not limited to the following: + +- Support self-signed certificate +- Use only IPv4 or IPv6 +- Custom DNS Lookup + +See [`http.Agent`](https://nodejs.org/api/http.html#http_new_agent_options) for more information. + +In addition, the `agent` option accepts a function that returns `http`(s)`.Agent` instance given current [URL](https://nodejs.org/api/url.html), this is useful during a redirection chain across HTTP and HTTPS protocol. + +```js +const httpAgent = new http.Agent({ + keepAlive: true +}); +const httpsAgent = new https.Agent({ + keepAlive: true +}); + +const options = { + agent: function (_parsedURL) { + if (_parsedURL.protocol == 'http:') { + return httpAgent; + } else { + return httpsAgent; + } + } +} +``` + + +### Class: Request + +An HTTP(S) request containing information about URL, method, headers, and the body. This class implements the [Body](#iface-body) interface. + +Due to the nature of Node.js, the following properties are not implemented at this moment: + +- `type` +- `destination` +- `referrer` +- `referrerPolicy` +- `mode` +- `credentials` +- `cache` +- `integrity` +- `keepalive` + +The following node-fetch extension properties are provided: + +- `follow` +- `compress` +- `counter` +- `agent` + +See [options](#fetch-options) for exact meaning of these extensions. + +#### new Request(input[, options]) + +*(spec-compliant)* + +- `input` A string representing a URL, or another `Request` (which will be cloned) +- `options` [Options][#fetch-options] for the HTTP(S) request + +Constructs a new `Request` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request). + +In most cases, directly `fetch(url, options)` is simpler than creating a `Request` object. + + +### Class: Response + +An HTTP(S) response. This class implements the [Body](#iface-body) interface. + +The following properties are not implemented in node-fetch at this moment: + +- `Response.error()` +- `Response.redirect()` +- `type` +- `trailer` + +#### new Response([body[, options]]) + +*(spec-compliant)* + +- `body` A `String` or [`Readable` stream][node-readable] +- `options` A [`ResponseInit`][response-init] options dictionary + +Constructs a new `Response` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Response/Response). + +Because Node.js does not implement service workers (for which this class was designed), one rarely has to construct a `Response` directly. + +#### response.ok + +*(spec-compliant)* + +Convenience property representing if the request ended normally. Will evaluate to true if the response status was greater than or equal to 200 but smaller than 300. + +#### response.redirected + +*(spec-compliant)* + +Convenience property representing if the request has been redirected at least once. Will evaluate to true if the internal redirect counter is greater than 0. + + +### Class: Headers + +This class allows manipulating and iterating over a set of HTTP headers. All methods specified in the [Fetch Standard][whatwg-fetch] are implemented. + +#### new Headers([init]) + +*(spec-compliant)* + +- `init` Optional argument to pre-fill the `Headers` object + +Construct a new `Headers` object. `init` can be either `null`, a `Headers` object, an key-value map object or any iterable object. + +```js +// Example adapted from https://fetch.spec.whatwg.org/#example-headers-class + +const meta = { + 'Content-Type': 'text/xml', + 'Breaking-Bad': '<3' +}; +const headers = new Headers(meta); + +// The above is equivalent to +const meta = [ + [ 'Content-Type', 'text/xml' ], + [ 'Breaking-Bad', '<3' ] +]; +const headers = new Headers(meta); + +// You can in fact use any iterable objects, like a Map or even another Headers +const meta = new Map(); +meta.set('Content-Type', 'text/xml'); +meta.set('Breaking-Bad', '<3'); +const headers = new Headers(meta); +const copyOfHeaders = new Headers(headers); +``` + + +### Interface: Body + +`Body` is an abstract interface with methods that are applicable to both `Request` and `Response` classes. + +The following methods are not yet implemented in node-fetch at this moment: + +- `formData()` + +#### body.body + +*(deviation from spec)* + +* Node.js [`Readable` stream][node-readable] + +Data are encapsulated in the `Body` object. Note that while the [Fetch Standard][whatwg-fetch] requires the property to always be a WHATWG `ReadableStream`, in node-fetch it is a Node.js [`Readable` stream][node-readable]. + +#### body.bodyUsed + +*(spec-compliant)* + +* `Boolean` + +A boolean property for if this body has been consumed. Per the specs, a consumed body cannot be used again. + +#### body.arrayBuffer() +#### body.blob() +#### body.json() +#### body.text() + +*(spec-compliant)* + +* Returns: Promise + +Consume the body and return a promise that will resolve to one of these formats. + +#### body.buffer() + +*(node-fetch extension)* + +* Returns: Promise<Buffer> + +Consume the body and return a promise that will resolve to a Buffer. + +#### body.textConverted() + +*(node-fetch extension)* + +* Returns: Promise<String> + +Identical to `body.text()`, except instead of always converting to UTF-8, encoding sniffing will be performed and text converted to UTF-8 if possible. + +(This API requires an optional dependency of the npm package [encoding](https://www.npmjs.com/package/encoding), which you need to install manually. `webpack` users may see [a warning message](https://github.com/bitinn/node-fetch/issues/412#issuecomment-379007792) due to this optional dependency.) + + +### Class: FetchError + +*(node-fetch extension)* + +An operational error in the fetching process. See [ERROR-HANDLING.md][] for more info. + + +### Class: AbortError + +*(node-fetch extension)* + +An Error thrown when the request is aborted in response to an `AbortSignal`'s `abort` event. It has a `name` property of `AbortError`. See [ERROR-HANDLING.MD][] for more info. + +## Acknowledgement + +Thanks to [github/fetch](https://github.com/github/fetch) for providing a solid implementation reference. + +`node-fetch` v1 was maintained by [@bitinn](https://github.com/bitinn); v2 was maintained by [@TimothyGu](https://github.com/timothygu), [@bitinn](https://github.com/bitinn) and [@jimmywarting](https://github.com/jimmywarting); v2 readme is written by [@jkantr](https://github.com/jkantr). + +## License + +MIT + +[npm-image]: https://flat.badgen.net/npm/v/node-fetch +[npm-url]: https://www.npmjs.com/package/node-fetch +[travis-image]: https://flat.badgen.net/travis/bitinn/node-fetch +[travis-url]: https://travis-ci.org/bitinn/node-fetch +[codecov-image]: https://flat.badgen.net/codecov/c/github/bitinn/node-fetch/master +[codecov-url]: https://codecov.io/gh/bitinn/node-fetch +[install-size-image]: https://flat.badgen.net/packagephobia/install/node-fetch +[install-size-url]: https://packagephobia.now.sh/result?p=node-fetch +[discord-image]: https://img.shields.io/discord/619915844268326952?color=%237289DA&label=Discord&style=flat-square +[discord-url]: https://discord.gg/Zxbndcm +[opencollective-image]: https://opencollective.com/node-fetch/backers.svg +[opencollective-url]: https://opencollective.com/node-fetch +[whatwg-fetch]: https://fetch.spec.whatwg.org/ +[response-init]: https://fetch.spec.whatwg.org/#responseinit +[node-readable]: https://nodejs.org/api/stream.html#stream_readable_streams +[mdn-headers]: https://developer.mozilla.org/en-US/docs/Web/API/Headers +[LIMITS.md]: https://github.com/bitinn/node-fetch/blob/master/LIMITS.md +[ERROR-HANDLING.md]: https://github.com/bitinn/node-fetch/blob/master/ERROR-HANDLING.md +[UPGRADE-GUIDE.md]: https://github.com/bitinn/node-fetch/blob/master/UPGRADE-GUIDE.md diff --git a/node_modules/node-fetch/browser.js b/node_modules/node-fetch/browser.js new file mode 100644 index 0000000..83c54c5 --- /dev/null +++ b/node_modules/node-fetch/browser.js @@ -0,0 +1,25 @@ +"use strict"; + +// ref: https://github.com/tc39/proposal-global +var getGlobal = function () { + // the only reliable means to get the global object is + // `Function('return this')()` + // However, this causes CSP violations in Chrome apps. + if (typeof self !== 'undefined') { return self; } + if (typeof window !== 'undefined') { return window; } + if (typeof global !== 'undefined') { return global; } + throw new Error('unable to locate global object'); +} + +var global = getGlobal(); + +module.exports = exports = global.fetch; + +// Needed for TypeScript and Webpack. +if (global.fetch) { + exports.default = global.fetch.bind(global); +} + +exports.Headers = global.Headers; +exports.Request = global.Request; +exports.Response = global.Response; \ No newline at end of file diff --git a/node_modules/node-fetch/lib/index.es.js b/node_modules/node-fetch/lib/index.es.js new file mode 100644 index 0000000..4852f7c --- /dev/null +++ b/node_modules/node-fetch/lib/index.es.js @@ -0,0 +1,1688 @@ +process.emitWarning("The .es.js file is deprecated. Use .mjs instead."); + +import Stream from 'stream'; +import http from 'http'; +import Url from 'url'; +import whatwgUrl from 'whatwg-url'; +import https from 'https'; +import zlib from 'zlib'; + +// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js + +// fix for "Readable" isn't a named export issue +const Readable = Stream.Readable; + +const BUFFER = Symbol('buffer'); +const TYPE = Symbol('type'); + +class Blob { + constructor() { + this[TYPE] = ''; + + const blobParts = arguments[0]; + const options = arguments[1]; + + const buffers = []; + let size = 0; + + if (blobParts) { + const a = blobParts; + const length = Number(a.length); + for (let i = 0; i < length; i++) { + const element = a[i]; + let buffer; + if (element instanceof Buffer) { + buffer = element; + } else if (ArrayBuffer.isView(element)) { + buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); + } else if (element instanceof ArrayBuffer) { + buffer = Buffer.from(element); + } else if (element instanceof Blob) { + buffer = element[BUFFER]; + } else { + buffer = Buffer.from(typeof element === 'string' ? element : String(element)); + } + size += buffer.length; + buffers.push(buffer); + } + } + + this[BUFFER] = Buffer.concat(buffers); + + let type = options && options.type !== undefined && String(options.type).toLowerCase(); + if (type && !/[^\u0020-\u007E]/.test(type)) { + this[TYPE] = type; + } + } + get size() { + return this[BUFFER].length; + } + get type() { + return this[TYPE]; + } + text() { + return Promise.resolve(this[BUFFER].toString()); + } + arrayBuffer() { + const buf = this[BUFFER]; + const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + return Promise.resolve(ab); + } + stream() { + const readable = new Readable(); + readable._read = function () {}; + readable.push(this[BUFFER]); + readable.push(null); + return readable; + } + toString() { + return '[object Blob]'; + } + slice() { + const size = this.size; + + const start = arguments[0]; + const end = arguments[1]; + let relativeStart, relativeEnd; + if (start === undefined) { + relativeStart = 0; + } else if (start < 0) { + relativeStart = Math.max(size + start, 0); + } else { + relativeStart = Math.min(start, size); + } + if (end === undefined) { + relativeEnd = size; + } else if (end < 0) { + relativeEnd = Math.max(size + end, 0); + } else { + relativeEnd = Math.min(end, size); + } + const span = Math.max(relativeEnd - relativeStart, 0); + + const buffer = this[BUFFER]; + const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); + const blob = new Blob([], { type: arguments[2] }); + blob[BUFFER] = slicedBuffer; + return blob; + } +} + +Object.defineProperties(Blob.prototype, { + size: { enumerable: true }, + type: { enumerable: true }, + slice: { enumerable: true } +}); + +Object.defineProperty(Blob.prototype, Symbol.toStringTag, { + value: 'Blob', + writable: false, + enumerable: false, + configurable: true +}); + +/** + * fetch-error.js + * + * FetchError interface for operational errors + */ + +/** + * Create FetchError instance + * + * @param String message Error message for human + * @param String type Error type for machine + * @param String systemError For Node.js system error + * @return FetchError + */ +function FetchError(message, type, systemError) { + Error.call(this, message); + + this.message = message; + this.type = type; + + // when err.type is `system`, err.code contains system error code + if (systemError) { + this.code = this.errno = systemError.code; + } + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); +} + +FetchError.prototype = Object.create(Error.prototype); +FetchError.prototype.constructor = FetchError; +FetchError.prototype.name = 'FetchError'; + +let convert; +try { + convert = require('encoding').convert; +} catch (e) {} + +const INTERNALS = Symbol('Body internals'); + +// fix an issue where "PassThrough" isn't a named export for node <10 +const PassThrough = Stream.PassThrough; + +/** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +function Body(body) { + var _this = this; + + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$size = _ref.size; + + let size = _ref$size === undefined ? 0 : _ref$size; + var _ref$timeout = _ref.timeout; + let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; + + if (body == null) { + // body is undefined or null + body = null; + } else if (isURLSearchParams(body)) { + // body is a URLSearchParams + body = Buffer.from(body.toString()); + } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { + // body is ArrayBuffer + body = Buffer.from(body); + } else if (ArrayBuffer.isView(body)) { + // body is ArrayBufferView + body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); + } else if (body instanceof Stream) ; else { + // none of the above + // coerce to string then buffer + body = Buffer.from(String(body)); + } + this[INTERNALS] = { + body, + disturbed: false, + error: null + }; + this.size = size; + this.timeout = timeout; + + if (body instanceof Stream) { + body.on('error', function (err) { + const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); + _this[INTERNALS].error = error; + }); + } +} + +Body.prototype = { + get body() { + return this[INTERNALS].body; + }, + + get bodyUsed() { + return this[INTERNALS].disturbed; + }, + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + arrayBuffer() { + return consumeBody.call(this).then(function (buf) { + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + }); + }, + + /** + * Return raw response as Blob + * + * @return Promise + */ + blob() { + let ct = this.headers && this.headers.get('content-type') || ''; + return consumeBody.call(this).then(function (buf) { + return Object.assign( + // Prevent copying + new Blob([], { + type: ct.toLowerCase() + }), { + [BUFFER]: buf + }); + }); + }, + + /** + * Decode response as json + * + * @return Promise + */ + json() { + var _this2 = this; + + return consumeBody.call(this).then(function (buffer) { + try { + return JSON.parse(buffer.toString()); + } catch (err) { + return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); + } + }); + }, + + /** + * Decode response as text + * + * @return Promise + */ + text() { + return consumeBody.call(this).then(function (buffer) { + return buffer.toString(); + }); + }, + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ + buffer() { + return consumeBody.call(this); + }, + + /** + * Decode response as text, while automatically detecting the encoding and + * trying to decode to UTF-8 (non-spec api) + * + * @return Promise + */ + textConverted() { + var _this3 = this; + + return consumeBody.call(this).then(function (buffer) { + return convertBody(buffer, _this3.headers); + }); + } +}; + +// In browsers, all properties are enumerable. +Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true } +}); + +Body.mixIn = function (proto) { + for (const name of Object.getOwnPropertyNames(Body.prototype)) { + // istanbul ignore else: future proof + if (!(name in proto)) { + const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); + Object.defineProperty(proto, name, desc); + } + } +}; + +/** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ +function consumeBody() { + var _this4 = this; + + if (this[INTERNALS].disturbed) { + return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); + } + + this[INTERNALS].disturbed = true; + + if (this[INTERNALS].error) { + return Body.Promise.reject(this[INTERNALS].error); + } + + let body = this.body; + + // body is null + if (body === null) { + return Body.Promise.resolve(Buffer.alloc(0)); + } + + // body is blob + if (isBlob(body)) { + body = body.stream(); + } + + // body is buffer + if (Buffer.isBuffer(body)) { + return Body.Promise.resolve(body); + } + + // istanbul ignore if: should never happen + if (!(body instanceof Stream)) { + return Body.Promise.resolve(Buffer.alloc(0)); + } + + // body is stream + // get ready to actually consume the body + let accum = []; + let accumBytes = 0; + let abort = false; + + return new Body.Promise(function (resolve, reject) { + let resTimeout; + + // allow timeout on slow response body + if (_this4.timeout) { + resTimeout = setTimeout(function () { + abort = true; + reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); + }, _this4.timeout); + } + + // handle stream errors + body.on('error', function (err) { + if (err.name === 'AbortError') { + // if the request was aborted, reject with this Error + abort = true; + reject(err); + } else { + // other errors, such as incorrect content-encoding + reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + + body.on('data', function (chunk) { + if (abort || chunk === null) { + return; + } + + if (_this4.size && accumBytes + chunk.length > _this4.size) { + abort = true; + reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); + return; + } + + accumBytes += chunk.length; + accum.push(chunk); + }); + + body.on('end', function () { + if (abort) { + return; + } + + clearTimeout(resTimeout); + + try { + resolve(Buffer.concat(accum, accumBytes)); + } catch (err) { + // handle streams that have accumulated too much data (issue #414) + reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + }); +} + +/** + * Detect buffer encoding and convert to target encoding + * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding + * + * @param Buffer buffer Incoming buffer + * @param String encoding Target encoding + * @return String + */ +function convertBody(buffer, headers) { + if (typeof convert !== 'function') { + throw new Error('The package `encoding` must be installed to use the textConverted() function'); + } + + const ct = headers.get('content-type'); + let charset = 'utf-8'; + let res, str; + + // header + if (ct) { + res = /charset=([^;]*)/i.exec(ct); + } + + // no charset in content type, peek at response body for at most 1024 bytes + str = buffer.slice(0, 1024).toString(); + + // html5 + if (!res && str) { + res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; + + this[MAP] = Object.create(null); + + if (init instanceof Headers) { + const rawHeaders = init.raw(); + const headerNames = Object.keys(rawHeaders); + + for (const headerName of headerNames) { + for (const value of rawHeaders[headerName]) { + this.append(headerName, value); + } + } + + return; + } + + // We don't worry about converting prop to ByteString here as append() + // will handle it. + if (init == null) ; else if (typeof init === 'object') { + const method = init[Symbol.iterator]; + if (method != null) { + if (typeof method !== 'function') { + throw new TypeError('Header pairs must be iterable'); + } + + // sequence> + // Note: per spec we have to first exhaust the lists then process them + const pairs = []; + for (const pair of init) { + if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { + throw new TypeError('Each header pair must be iterable'); + } + pairs.push(Array.from(pair)); + } + + for (const pair of pairs) { + if (pair.length !== 2) { + throw new TypeError('Each header pair must be a name/value tuple'); + } + this.append(pair[0], pair[1]); + } + } else { + // record + for (const key of Object.keys(init)) { + const value = init[key]; + this.append(key, value); + } + } + } else { + throw new TypeError('Provided initializer must be an object'); + } + } + + /** + * Return combined header value given name + * + * @param String name Header name + * @return Mixed + */ + get(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key === undefined) { + return null; + } + + return this[MAP][key].join(', '); + } + + /** + * Iterate over all headers + * + * @param Function callback Executed for each item with parameters (value, name, thisArg) + * @param Boolean thisArg `this` context for callback function + * @return Void + */ + forEach(callback) { + let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; + + let pairs = getHeaders(this); + let i = 0; + while (i < pairs.length) { + var _pairs$i = pairs[i]; + const name = _pairs$i[0], + value = _pairs$i[1]; + + callback.call(thisArg, value, name, this); + pairs = getHeaders(this); + i++; + } + } + + /** + * Overwrite header values given name + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + set(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + this[MAP][key !== undefined ? key : name] = [value]; + } + + /** + * Append a value onto existing header + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + append(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + if (key !== undefined) { + this[MAP][key].push(value); + } else { + this[MAP][name] = [value]; + } + } + + /** + * Check for header name existence + * + * @param String name Header name + * @return Boolean + */ + has(name) { + name = `${name}`; + validateName(name); + return find(this[MAP], name) !== undefined; + } + + /** + * Delete all header values given name + * + * @param String name Header name + * @return Void + */ + delete(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key !== undefined) { + delete this[MAP][key]; + } + } + + /** + * Return raw headers (non-spec api) + * + * @return Object + */ + raw() { + return this[MAP]; + } + + /** + * Get an iterator on keys. + * + * @return Iterator + */ + keys() { + return createHeadersIterator(this, 'key'); + } + + /** + * Get an iterator on values. + * + * @return Iterator + */ + values() { + return createHeadersIterator(this, 'value'); + } + + /** + * Get an iterator on entries. + * + * This is the default iterator of the Headers object. + * + * @return Iterator + */ + [Symbol.iterator]() { + return createHeadersIterator(this, 'key+value'); + } +} +Headers.prototype.entries = Headers.prototype[Symbol.iterator]; + +Object.defineProperty(Headers.prototype, Symbol.toStringTag, { + value: 'Headers', + writable: false, + enumerable: false, + configurable: true +}); + +Object.defineProperties(Headers.prototype, { + get: { enumerable: true }, + forEach: { enumerable: true }, + set: { enumerable: true }, + append: { enumerable: true }, + has: { enumerable: true }, + delete: { enumerable: true }, + keys: { enumerable: true }, + values: { enumerable: true }, + entries: { enumerable: true } +}); + +function getHeaders(headers) { + let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; + + const keys = Object.keys(headers[MAP]).sort(); + return keys.map(kind === 'key' ? function (k) { + return k.toLowerCase(); + } : kind === 'value' ? function (k) { + return headers[MAP][k].join(', '); + } : function (k) { + return [k.toLowerCase(), headers[MAP][k].join(', ')]; + }); +} + +const INTERNAL = Symbol('internal'); + +function createHeadersIterator(target, kind) { + const iterator = Object.create(HeadersIteratorPrototype); + iterator[INTERNAL] = { + target, + kind, + index: 0 + }; + return iterator; +} + +const HeadersIteratorPrototype = Object.setPrototypeOf({ + next() { + // istanbul ignore if + if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { + throw new TypeError('Value of `this` is not a HeadersIterator'); + } + + var _INTERNAL = this[INTERNAL]; + const target = _INTERNAL.target, + kind = _INTERNAL.kind, + index = _INTERNAL.index; + + const values = getHeaders(target, kind); + const len = values.length; + if (index >= len) { + return { + value: undefined, + done: true + }; + } + + this[INTERNAL].index = index + 1; + + return { + value: values[index], + done: false + }; + } +}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); + +Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { + value: 'HeadersIterator', + writable: false, + enumerable: false, + configurable: true +}); + +/** + * Export the Headers object in a form that Node.js can consume. + * + * @param Headers headers + * @return Object + */ +function exportNodeCompatibleHeaders(headers) { + const obj = Object.assign({ __proto__: null }, headers[MAP]); + + // http.request() only supports string as Host header. This hack makes + // specifying custom Host header possible. + const hostHeaderKey = find(headers[MAP], 'Host'); + if (hostHeaderKey !== undefined) { + obj[hostHeaderKey] = obj[hostHeaderKey][0]; + } + + return obj; +} + +/** + * Create a Headers object from an object of headers, ignoring those that do + * not conform to HTTP grammar productions. + * + * @param Object obj Object of headers + * @return Headers + */ +function createHeadersLenient(obj) { + const headers = new Headers(); + for (const name of Object.keys(obj)) { + if (invalidTokenRegex.test(name)) { + continue; + } + if (Array.isArray(obj[name])) { + for (const val of obj[name]) { + if (invalidHeaderCharRegex.test(val)) { + continue; + } + if (headers[MAP][name] === undefined) { + headers[MAP][name] = [val]; + } else { + headers[MAP][name].push(val); + } + } + } else if (!invalidHeaderCharRegex.test(obj[name])) { + headers[MAP][name] = [obj[name]]; + } + } + return headers; +} + +const INTERNALS$1 = Symbol('Response internals'); + +// fix an issue where "STATUS_CODES" aren't a named export for node <10 +const STATUS_CODES = http.STATUS_CODES; + +/** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class Response { + constructor() { + let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + Body.call(this, body, opts); + + const status = opts.status || 200; + const headers = new Headers(opts.headers); + + if (body != null && !headers.has('Content-Type')) { + const contentType = extractContentType(body); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + + this[INTERNALS$1] = { + url: opts.url, + status, + statusText: opts.statusText || STATUS_CODES[status], + headers, + counter: opts.counter + }; + } + + get url() { + return this[INTERNALS$1].url || ''; + } + + get status() { + return this[INTERNALS$1].status; + } + + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; + } + + get redirected() { + return this[INTERNALS$1].counter > 0; + } + + get statusText() { + return this[INTERNALS$1].statusText; + } + + get headers() { + return this[INTERNALS$1].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + return new Response(clone(this), { + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected + }); + } +} + +Body.mixIn(Response.prototype); + +Object.defineProperties(Response.prototype, { + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true } +}); + +Object.defineProperty(Response.prototype, Symbol.toStringTag, { + value: 'Response', + writable: false, + enumerable: false, + configurable: true +}); + +const INTERNALS$2 = Symbol('Request internals'); +const URL = Url.URL || whatwgUrl.URL; + +// fix an issue where "format", "parse" aren't a named export for node <10 +const parse_url = Url.parse; +const format_url = Url.format; + +/** + * Wrapper around `new URL` to handle arbitrary URLs + * + * @param {string} urlStr + * @return {void} + */ +function parseURL(urlStr) { + /* + Check whether the URL is absolute or not + Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 + Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 + */ + if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { + urlStr = new URL(urlStr).toString(); + } + + // Fallback to old implementation for arbitrary URLs + return parse_url(urlStr); +} + +const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; + +/** + * Check if a value is an instance of Request. + * + * @param Mixed input + * @return Boolean + */ +function isRequest(input) { + return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; +} + +function isAbortSignal(signal) { + const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); + return !!(proto && proto.constructor.name === 'AbortSignal'); +} + +/** + * Request class + * + * @param Mixed input Url or Request instance + * @param Object init Custom options + * @return Void + */ +class Request { + constructor(input) { + let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + let parsedURL; + + // normalize input + if (!isRequest(input)) { + if (input && input.href) { + // in order to support Node.js' Url objects; though WHATWG's URL objects + // will fall into this branch also (since their `toString()` will return + // `href` property anyway) + parsedURL = parseURL(input.href); + } else { + // coerce input to a string before attempting to parse + parsedURL = parseURL(`${input}`); + } + input = {}; + } else { + parsedURL = parseURL(input.url); + } + + let method = init.method || input.method || 'GET'; + method = method.toUpperCase(); + + if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { + throw new TypeError('Request with GET/HEAD method cannot have body'); + } + + let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; + + Body.call(this, inputBody, { + timeout: init.timeout || input.timeout || 0, + size: init.size || input.size || 0 + }); + + const headers = new Headers(init.headers || input.headers || {}); + + if (inputBody != null && !headers.has('Content-Type')) { + const contentType = extractContentType(inputBody); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + + let signal = isRequest(input) ? input.signal : null; + if ('signal' in init) signal = init.signal; + + if (signal != null && !isAbortSignal(signal)) { + throw new TypeError('Expected signal to be an instanceof AbortSignal'); + } + + this[INTERNALS$2] = { + method, + redirect: init.redirect || input.redirect || 'follow', + headers, + parsedURL, + signal + }; + + // node-fetch-only options + this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; + this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; + this.counter = init.counter || input.counter || 0; + this.agent = init.agent || input.agent; + } + + get method() { + return this[INTERNALS$2].method; + } + + get url() { + return format_url(this[INTERNALS$2].parsedURL); + } + + get headers() { + return this[INTERNALS$2].headers; + } + + get redirect() { + return this[INTERNALS$2].redirect; + } + + get signal() { + return this[INTERNALS$2].signal; + } + + /** + * Clone this request + * + * @return Request + */ + clone() { + return new Request(this); + } +} + +Body.mixIn(Request.prototype); + +Object.defineProperty(Request.prototype, Symbol.toStringTag, { + value: 'Request', + writable: false, + enumerable: false, + configurable: true +}); + +Object.defineProperties(Request.prototype, { + method: { enumerable: true }, + url: { enumerable: true }, + headers: { enumerable: true }, + redirect: { enumerable: true }, + clone: { enumerable: true }, + signal: { enumerable: true } +}); + +/** + * Convert a Request to Node.js http request options. + * + * @param Request A Request instance + * @return Object The options object to be passed to http.request + */ +function getNodeRequestOptions(request) { + const parsedURL = request[INTERNALS$2].parsedURL; + const headers = new Headers(request[INTERNALS$2].headers); + + // fetch step 1.3 + if (!headers.has('Accept')) { + headers.set('Accept', '*/*'); + } + + // Basic fetch + if (!parsedURL.protocol || !parsedURL.hostname) { + throw new TypeError('Only absolute URLs are supported'); + } + + if (!/^https?:$/.test(parsedURL.protocol)) { + throw new TypeError('Only HTTP(S) protocols are supported'); + } + + if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { + throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); + } + + // HTTP-network-or-cache fetch steps 2.4-2.7 + let contentLengthValue = null; + if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { + contentLengthValue = '0'; + } + if (request.body != null) { + const totalBytes = getTotalBytes(request); + if (typeof totalBytes === 'number') { + contentLengthValue = String(totalBytes); + } + } + if (contentLengthValue) { + headers.set('Content-Length', contentLengthValue); + } + + // HTTP-network-or-cache fetch step 2.11 + if (!headers.has('User-Agent')) { + headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); + } + + // HTTP-network-or-cache fetch step 2.15 + if (request.compress && !headers.has('Accept-Encoding')) { + headers.set('Accept-Encoding', 'gzip,deflate'); + } + + let agent = request.agent; + if (typeof agent === 'function') { + agent = agent(parsedURL); + } + + if (!headers.has('Connection') && !agent) { + headers.set('Connection', 'close'); + } + + // HTTP-network fetch step 4.2 + // chunked encoding is handled by Node.js + + return Object.assign({}, parsedURL, { + method: request.method, + headers: exportNodeCompatibleHeaders(headers), + agent + }); +} + +/** + * abort-error.js + * + * AbortError interface for cancelled requests + */ + +/** + * Create AbortError instance + * + * @param String message Error message for human + * @return AbortError + */ +function AbortError(message) { + Error.call(this, message); + + this.type = 'aborted'; + this.message = message; + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); +} + +AbortError.prototype = Object.create(Error.prototype); +AbortError.prototype.constructor = AbortError; +AbortError.prototype.name = 'AbortError'; + +const URL$1 = Url.URL || whatwgUrl.URL; + +// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 +const PassThrough$1 = Stream.PassThrough; + +const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { + const orig = new URL$1(original).hostname; + const dest = new URL$1(destination).hostname; + + return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); +}; + +/** + * Fetch function + * + * @param Mixed url Absolute url or Request instance + * @param Object opts Fetch options + * @return Promise + */ +function fetch(url, opts) { + + // allow custom promise + if (!fetch.Promise) { + throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); + } + + Body.Promise = fetch.Promise; + + // wrap http.request into fetch + return new fetch.Promise(function (resolve, reject) { + // build request object + const request = new Request(url, opts); + const options = getNodeRequestOptions(request); + + const send = (options.protocol === 'https:' ? https : http).request; + const signal = request.signal; + + let response = null; + + const abort = function abort() { + let error = new AbortError('The user aborted a request.'); + reject(error); + if (request.body && request.body instanceof Stream.Readable) { + request.body.destroy(error); + } + if (!response || !response.body) return; + response.body.emit('error', error); + }; + + if (signal && signal.aborted) { + abort(); + return; + } + + const abortAndFinalize = function abortAndFinalize() { + abort(); + finalize(); + }; + + // send request + const req = send(options); + let reqTimeout; + + if (signal) { + signal.addEventListener('abort', abortAndFinalize); + } + + function finalize() { + req.abort(); + if (signal) signal.removeEventListener('abort', abortAndFinalize); + clearTimeout(reqTimeout); + } + + if (request.timeout) { + req.once('socket', function (socket) { + reqTimeout = setTimeout(function () { + reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); + finalize(); + }, request.timeout); + }); + } + + req.on('error', function (err) { + reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); + finalize(); + }); + + req.on('response', function (res) { + clearTimeout(reqTimeout); + + const headers = createHeadersLenient(res.headers); + + // HTTP fetch step 5 + if (fetch.isRedirect(res.statusCode)) { + // HTTP fetch step 5.2 + const location = headers.get('Location'); + + // HTTP fetch step 5.3 + let locationURL = null; + try { + locationURL = location === null ? null : new URL$1(location, request.url).toString(); + } catch (err) { + // error here can only be invalid URL in Location: header + // do not throw when options.redirect == manual + // let the user extract the errorneous redirect URL + if (request.redirect !== 'manual') { + reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); + finalize(); + return; + } + } + + // HTTP fetch step 5.5 + switch (request.redirect) { + case 'error': + reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); + finalize(); + return; + case 'manual': + // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. + if (locationURL !== null) { + // handle corrupted header + try { + headers.set('Location', locationURL); + } catch (err) { + // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request + reject(err); + } + } + break; + case 'follow': + // HTTP-redirect fetch step 2 + if (locationURL === null) { + break; + } + + // HTTP-redirect fetch step 5 + if (request.counter >= request.follow) { + reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 6 (counter increment) + // Create a new Request object. + const requestOpts = { + headers: new Headers(request.headers), + follow: request.follow, + counter: request.counter + 1, + agent: request.agent, + compress: request.compress, + method: request.method, + body: request.body, + signal: request.signal, + timeout: request.timeout, + size: request.size + }; + + if (!isDomainOrSubdomain(request.url, locationURL)) { + for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { + requestOpts.headers.delete(name); + } + } + + // HTTP-redirect fetch step 9 + if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { + reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 11 + if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { + requestOpts.method = 'GET'; + requestOpts.body = undefined; + requestOpts.headers.delete('content-length'); + } + + // HTTP-redirect fetch step 15 + resolve(fetch(new Request(locationURL, requestOpts))); + finalize(); + return; + } + } + + // prepare response + res.once('end', function () { + if (signal) signal.removeEventListener('abort', abortAndFinalize); + }); + let body = res.pipe(new PassThrough$1()); + + const response_options = { + url: request.url, + status: res.statusCode, + statusText: res.statusMessage, + headers: headers, + size: request.size, + timeout: request.timeout, + counter: request.counter + }; + + // HTTP-network fetch step 12.1.1.3 + const codings = headers.get('Content-Encoding'); + + // HTTP-network fetch step 12.1.1.4: handle content codings + + // in following scenarios we ignore compression support + // 1. compression support is disabled + // 2. HEAD request + // 3. no Content-Encoding header + // 4. no content response (204) + // 5. content not modified response (304) + if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { + response = new Response(body, response_options); + resolve(response); + return; + } + + // For Node v6+ + // Be less strict when decoding compressed responses, since sometimes + // servers send slightly invalid responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + const zlibOptions = { + flush: zlib.Z_SYNC_FLUSH, + finishFlush: zlib.Z_SYNC_FLUSH + }; + + // for gzip + if (codings == 'gzip' || codings == 'x-gzip') { + body = body.pipe(zlib.createGunzip(zlibOptions)); + response = new Response(body, response_options); + resolve(response); + return; + } + + // for deflate + if (codings == 'deflate' || codings == 'x-deflate') { + // handle the infamous raw deflate response from old servers + // a hack for old IIS and Apache servers + const raw = res.pipe(new PassThrough$1()); + raw.once('data', function (chunk) { + // see http://stackoverflow.com/questions/37519828 + if ((chunk[0] & 0x0F) === 0x08) { + body = body.pipe(zlib.createInflate()); + } else { + body = body.pipe(zlib.createInflateRaw()); + } + response = new Response(body, response_options); + resolve(response); + }); + return; + } + + // for br + if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { + body = body.pipe(zlib.createBrotliDecompress()); + response = new Response(body, response_options); + resolve(response); + return; + } + + // otherwise, use response as-is + response = new Response(body, response_options); + resolve(response); + }); + + writeToStream(req, request); + }); +} +/** + * Redirect code matching + * + * @param Number code Status code + * @return Boolean + */ +fetch.isRedirect = function (code) { + return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; +}; + +// expose Promise +fetch.Promise = global.Promise; + +export default fetch; +export { Headers, Request, Response, FetchError }; diff --git a/node_modules/node-fetch/lib/index.js b/node_modules/node-fetch/lib/index.js new file mode 100644 index 0000000..e5b04f1 --- /dev/null +++ b/node_modules/node-fetch/lib/index.js @@ -0,0 +1,1697 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var Stream = _interopDefault(require('stream')); +var http = _interopDefault(require('http')); +var Url = _interopDefault(require('url')); +var whatwgUrl = _interopDefault(require('whatwg-url')); +var https = _interopDefault(require('https')); +var zlib = _interopDefault(require('zlib')); + +// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js + +// fix for "Readable" isn't a named export issue +const Readable = Stream.Readable; + +const BUFFER = Symbol('buffer'); +const TYPE = Symbol('type'); + +class Blob { + constructor() { + this[TYPE] = ''; + + const blobParts = arguments[0]; + const options = arguments[1]; + + const buffers = []; + let size = 0; + + if (blobParts) { + const a = blobParts; + const length = Number(a.length); + for (let i = 0; i < length; i++) { + const element = a[i]; + let buffer; + if (element instanceof Buffer) { + buffer = element; + } else if (ArrayBuffer.isView(element)) { + buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); + } else if (element instanceof ArrayBuffer) { + buffer = Buffer.from(element); + } else if (element instanceof Blob) { + buffer = element[BUFFER]; + } else { + buffer = Buffer.from(typeof element === 'string' ? element : String(element)); + } + size += buffer.length; + buffers.push(buffer); + } + } + + this[BUFFER] = Buffer.concat(buffers); + + let type = options && options.type !== undefined && String(options.type).toLowerCase(); + if (type && !/[^\u0020-\u007E]/.test(type)) { + this[TYPE] = type; + } + } + get size() { + return this[BUFFER].length; + } + get type() { + return this[TYPE]; + } + text() { + return Promise.resolve(this[BUFFER].toString()); + } + arrayBuffer() { + const buf = this[BUFFER]; + const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + return Promise.resolve(ab); + } + stream() { + const readable = new Readable(); + readable._read = function () {}; + readable.push(this[BUFFER]); + readable.push(null); + return readable; + } + toString() { + return '[object Blob]'; + } + slice() { + const size = this.size; + + const start = arguments[0]; + const end = arguments[1]; + let relativeStart, relativeEnd; + if (start === undefined) { + relativeStart = 0; + } else if (start < 0) { + relativeStart = Math.max(size + start, 0); + } else { + relativeStart = Math.min(start, size); + } + if (end === undefined) { + relativeEnd = size; + } else if (end < 0) { + relativeEnd = Math.max(size + end, 0); + } else { + relativeEnd = Math.min(end, size); + } + const span = Math.max(relativeEnd - relativeStart, 0); + + const buffer = this[BUFFER]; + const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); + const blob = new Blob([], { type: arguments[2] }); + blob[BUFFER] = slicedBuffer; + return blob; + } +} + +Object.defineProperties(Blob.prototype, { + size: { enumerable: true }, + type: { enumerable: true }, + slice: { enumerable: true } +}); + +Object.defineProperty(Blob.prototype, Symbol.toStringTag, { + value: 'Blob', + writable: false, + enumerable: false, + configurable: true +}); + +/** + * fetch-error.js + * + * FetchError interface for operational errors + */ + +/** + * Create FetchError instance + * + * @param String message Error message for human + * @param String type Error type for machine + * @param String systemError For Node.js system error + * @return FetchError + */ +function FetchError(message, type, systemError) { + Error.call(this, message); + + this.message = message; + this.type = type; + + // when err.type is `system`, err.code contains system error code + if (systemError) { + this.code = this.errno = systemError.code; + } + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); +} + +FetchError.prototype = Object.create(Error.prototype); +FetchError.prototype.constructor = FetchError; +FetchError.prototype.name = 'FetchError'; + +let convert; +try { + convert = require('encoding').convert; +} catch (e) {} + +const INTERNALS = Symbol('Body internals'); + +// fix an issue where "PassThrough" isn't a named export for node <10 +const PassThrough = Stream.PassThrough; + +/** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +function Body(body) { + var _this = this; + + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$size = _ref.size; + + let size = _ref$size === undefined ? 0 : _ref$size; + var _ref$timeout = _ref.timeout; + let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; + + if (body == null) { + // body is undefined or null + body = null; + } else if (isURLSearchParams(body)) { + // body is a URLSearchParams + body = Buffer.from(body.toString()); + } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { + // body is ArrayBuffer + body = Buffer.from(body); + } else if (ArrayBuffer.isView(body)) { + // body is ArrayBufferView + body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); + } else if (body instanceof Stream) ; else { + // none of the above + // coerce to string then buffer + body = Buffer.from(String(body)); + } + this[INTERNALS] = { + body, + disturbed: false, + error: null + }; + this.size = size; + this.timeout = timeout; + + if (body instanceof Stream) { + body.on('error', function (err) { + const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); + _this[INTERNALS].error = error; + }); + } +} + +Body.prototype = { + get body() { + return this[INTERNALS].body; + }, + + get bodyUsed() { + return this[INTERNALS].disturbed; + }, + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + arrayBuffer() { + return consumeBody.call(this).then(function (buf) { + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + }); + }, + + /** + * Return raw response as Blob + * + * @return Promise + */ + blob() { + let ct = this.headers && this.headers.get('content-type') || ''; + return consumeBody.call(this).then(function (buf) { + return Object.assign( + // Prevent copying + new Blob([], { + type: ct.toLowerCase() + }), { + [BUFFER]: buf + }); + }); + }, + + /** + * Decode response as json + * + * @return Promise + */ + json() { + var _this2 = this; + + return consumeBody.call(this).then(function (buffer) { + try { + return JSON.parse(buffer.toString()); + } catch (err) { + return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); + } + }); + }, + + /** + * Decode response as text + * + * @return Promise + */ + text() { + return consumeBody.call(this).then(function (buffer) { + return buffer.toString(); + }); + }, + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ + buffer() { + return consumeBody.call(this); + }, + + /** + * Decode response as text, while automatically detecting the encoding and + * trying to decode to UTF-8 (non-spec api) + * + * @return Promise + */ + textConverted() { + var _this3 = this; + + return consumeBody.call(this).then(function (buffer) { + return convertBody(buffer, _this3.headers); + }); + } +}; + +// In browsers, all properties are enumerable. +Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true } +}); + +Body.mixIn = function (proto) { + for (const name of Object.getOwnPropertyNames(Body.prototype)) { + // istanbul ignore else: future proof + if (!(name in proto)) { + const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); + Object.defineProperty(proto, name, desc); + } + } +}; + +/** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ +function consumeBody() { + var _this4 = this; + + if (this[INTERNALS].disturbed) { + return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); + } + + this[INTERNALS].disturbed = true; + + if (this[INTERNALS].error) { + return Body.Promise.reject(this[INTERNALS].error); + } + + let body = this.body; + + // body is null + if (body === null) { + return Body.Promise.resolve(Buffer.alloc(0)); + } + + // body is blob + if (isBlob(body)) { + body = body.stream(); + } + + // body is buffer + if (Buffer.isBuffer(body)) { + return Body.Promise.resolve(body); + } + + // istanbul ignore if: should never happen + if (!(body instanceof Stream)) { + return Body.Promise.resolve(Buffer.alloc(0)); + } + + // body is stream + // get ready to actually consume the body + let accum = []; + let accumBytes = 0; + let abort = false; + + return new Body.Promise(function (resolve, reject) { + let resTimeout; + + // allow timeout on slow response body + if (_this4.timeout) { + resTimeout = setTimeout(function () { + abort = true; + reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); + }, _this4.timeout); + } + + // handle stream errors + body.on('error', function (err) { + if (err.name === 'AbortError') { + // if the request was aborted, reject with this Error + abort = true; + reject(err); + } else { + // other errors, such as incorrect content-encoding + reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + + body.on('data', function (chunk) { + if (abort || chunk === null) { + return; + } + + if (_this4.size && accumBytes + chunk.length > _this4.size) { + abort = true; + reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); + return; + } + + accumBytes += chunk.length; + accum.push(chunk); + }); + + body.on('end', function () { + if (abort) { + return; + } + + clearTimeout(resTimeout); + + try { + resolve(Buffer.concat(accum, accumBytes)); + } catch (err) { + // handle streams that have accumulated too much data (issue #414) + reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + }); +} + +/** + * Detect buffer encoding and convert to target encoding + * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding + * + * @param Buffer buffer Incoming buffer + * @param String encoding Target encoding + * @return String + */ +function convertBody(buffer, headers) { + if (typeof convert !== 'function') { + throw new Error('The package `encoding` must be installed to use the textConverted() function'); + } + + const ct = headers.get('content-type'); + let charset = 'utf-8'; + let res, str; + + // header + if (ct) { + res = /charset=([^;]*)/i.exec(ct); + } + + // no charset in content type, peek at response body for at most 1024 bytes + str = buffer.slice(0, 1024).toString(); + + // html5 + if (!res && str) { + res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; + + this[MAP] = Object.create(null); + + if (init instanceof Headers) { + const rawHeaders = init.raw(); + const headerNames = Object.keys(rawHeaders); + + for (const headerName of headerNames) { + for (const value of rawHeaders[headerName]) { + this.append(headerName, value); + } + } + + return; + } + + // We don't worry about converting prop to ByteString here as append() + // will handle it. + if (init == null) ; else if (typeof init === 'object') { + const method = init[Symbol.iterator]; + if (method != null) { + if (typeof method !== 'function') { + throw new TypeError('Header pairs must be iterable'); + } + + // sequence> + // Note: per spec we have to first exhaust the lists then process them + const pairs = []; + for (const pair of init) { + if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { + throw new TypeError('Each header pair must be iterable'); + } + pairs.push(Array.from(pair)); + } + + for (const pair of pairs) { + if (pair.length !== 2) { + throw new TypeError('Each header pair must be a name/value tuple'); + } + this.append(pair[0], pair[1]); + } + } else { + // record + for (const key of Object.keys(init)) { + const value = init[key]; + this.append(key, value); + } + } + } else { + throw new TypeError('Provided initializer must be an object'); + } + } + + /** + * Return combined header value given name + * + * @param String name Header name + * @return Mixed + */ + get(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key === undefined) { + return null; + } + + return this[MAP][key].join(', '); + } + + /** + * Iterate over all headers + * + * @param Function callback Executed for each item with parameters (value, name, thisArg) + * @param Boolean thisArg `this` context for callback function + * @return Void + */ + forEach(callback) { + let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; + + let pairs = getHeaders(this); + let i = 0; + while (i < pairs.length) { + var _pairs$i = pairs[i]; + const name = _pairs$i[0], + value = _pairs$i[1]; + + callback.call(thisArg, value, name, this); + pairs = getHeaders(this); + i++; + } + } + + /** + * Overwrite header values given name + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + set(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + this[MAP][key !== undefined ? key : name] = [value]; + } + + /** + * Append a value onto existing header + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + append(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + if (key !== undefined) { + this[MAP][key].push(value); + } else { + this[MAP][name] = [value]; + } + } + + /** + * Check for header name existence + * + * @param String name Header name + * @return Boolean + */ + has(name) { + name = `${name}`; + validateName(name); + return find(this[MAP], name) !== undefined; + } + + /** + * Delete all header values given name + * + * @param String name Header name + * @return Void + */ + delete(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key !== undefined) { + delete this[MAP][key]; + } + } + + /** + * Return raw headers (non-spec api) + * + * @return Object + */ + raw() { + return this[MAP]; + } + + /** + * Get an iterator on keys. + * + * @return Iterator + */ + keys() { + return createHeadersIterator(this, 'key'); + } + + /** + * Get an iterator on values. + * + * @return Iterator + */ + values() { + return createHeadersIterator(this, 'value'); + } + + /** + * Get an iterator on entries. + * + * This is the default iterator of the Headers object. + * + * @return Iterator + */ + [Symbol.iterator]() { + return createHeadersIterator(this, 'key+value'); + } +} +Headers.prototype.entries = Headers.prototype[Symbol.iterator]; + +Object.defineProperty(Headers.prototype, Symbol.toStringTag, { + value: 'Headers', + writable: false, + enumerable: false, + configurable: true +}); + +Object.defineProperties(Headers.prototype, { + get: { enumerable: true }, + forEach: { enumerable: true }, + set: { enumerable: true }, + append: { enumerable: true }, + has: { enumerable: true }, + delete: { enumerable: true }, + keys: { enumerable: true }, + values: { enumerable: true }, + entries: { enumerable: true } +}); + +function getHeaders(headers) { + let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; + + const keys = Object.keys(headers[MAP]).sort(); + return keys.map(kind === 'key' ? function (k) { + return k.toLowerCase(); + } : kind === 'value' ? function (k) { + return headers[MAP][k].join(', '); + } : function (k) { + return [k.toLowerCase(), headers[MAP][k].join(', ')]; + }); +} + +const INTERNAL = Symbol('internal'); + +function createHeadersIterator(target, kind) { + const iterator = Object.create(HeadersIteratorPrototype); + iterator[INTERNAL] = { + target, + kind, + index: 0 + }; + return iterator; +} + +const HeadersIteratorPrototype = Object.setPrototypeOf({ + next() { + // istanbul ignore if + if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { + throw new TypeError('Value of `this` is not a HeadersIterator'); + } + + var _INTERNAL = this[INTERNAL]; + const target = _INTERNAL.target, + kind = _INTERNAL.kind, + index = _INTERNAL.index; + + const values = getHeaders(target, kind); + const len = values.length; + if (index >= len) { + return { + value: undefined, + done: true + }; + } + + this[INTERNAL].index = index + 1; + + return { + value: values[index], + done: false + }; + } +}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); + +Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { + value: 'HeadersIterator', + writable: false, + enumerable: false, + configurable: true +}); + +/** + * Export the Headers object in a form that Node.js can consume. + * + * @param Headers headers + * @return Object + */ +function exportNodeCompatibleHeaders(headers) { + const obj = Object.assign({ __proto__: null }, headers[MAP]); + + // http.request() only supports string as Host header. This hack makes + // specifying custom Host header possible. + const hostHeaderKey = find(headers[MAP], 'Host'); + if (hostHeaderKey !== undefined) { + obj[hostHeaderKey] = obj[hostHeaderKey][0]; + } + + return obj; +} + +/** + * Create a Headers object from an object of headers, ignoring those that do + * not conform to HTTP grammar productions. + * + * @param Object obj Object of headers + * @return Headers + */ +function createHeadersLenient(obj) { + const headers = new Headers(); + for (const name of Object.keys(obj)) { + if (invalidTokenRegex.test(name)) { + continue; + } + if (Array.isArray(obj[name])) { + for (const val of obj[name]) { + if (invalidHeaderCharRegex.test(val)) { + continue; + } + if (headers[MAP][name] === undefined) { + headers[MAP][name] = [val]; + } else { + headers[MAP][name].push(val); + } + } + } else if (!invalidHeaderCharRegex.test(obj[name])) { + headers[MAP][name] = [obj[name]]; + } + } + return headers; +} + +const INTERNALS$1 = Symbol('Response internals'); + +// fix an issue where "STATUS_CODES" aren't a named export for node <10 +const STATUS_CODES = http.STATUS_CODES; + +/** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class Response { + constructor() { + let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + Body.call(this, body, opts); + + const status = opts.status || 200; + const headers = new Headers(opts.headers); + + if (body != null && !headers.has('Content-Type')) { + const contentType = extractContentType(body); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + + this[INTERNALS$1] = { + url: opts.url, + status, + statusText: opts.statusText || STATUS_CODES[status], + headers, + counter: opts.counter + }; + } + + get url() { + return this[INTERNALS$1].url || ''; + } + + get status() { + return this[INTERNALS$1].status; + } + + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; + } + + get redirected() { + return this[INTERNALS$1].counter > 0; + } + + get statusText() { + return this[INTERNALS$1].statusText; + } + + get headers() { + return this[INTERNALS$1].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + return new Response(clone(this), { + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected + }); + } +} + +Body.mixIn(Response.prototype); + +Object.defineProperties(Response.prototype, { + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true } +}); + +Object.defineProperty(Response.prototype, Symbol.toStringTag, { + value: 'Response', + writable: false, + enumerable: false, + configurable: true +}); + +const INTERNALS$2 = Symbol('Request internals'); +const URL = Url.URL || whatwgUrl.URL; + +// fix an issue where "format", "parse" aren't a named export for node <10 +const parse_url = Url.parse; +const format_url = Url.format; + +/** + * Wrapper around `new URL` to handle arbitrary URLs + * + * @param {string} urlStr + * @return {void} + */ +function parseURL(urlStr) { + /* + Check whether the URL is absolute or not + Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 + Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 + */ + if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { + urlStr = new URL(urlStr).toString(); + } + + // Fallback to old implementation for arbitrary URLs + return parse_url(urlStr); +} + +const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; + +/** + * Check if a value is an instance of Request. + * + * @param Mixed input + * @return Boolean + */ +function isRequest(input) { + return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; +} + +function isAbortSignal(signal) { + const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); + return !!(proto && proto.constructor.name === 'AbortSignal'); +} + +/** + * Request class + * + * @param Mixed input Url or Request instance + * @param Object init Custom options + * @return Void + */ +class Request { + constructor(input) { + let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + let parsedURL; + + // normalize input + if (!isRequest(input)) { + if (input && input.href) { + // in order to support Node.js' Url objects; though WHATWG's URL objects + // will fall into this branch also (since their `toString()` will return + // `href` property anyway) + parsedURL = parseURL(input.href); + } else { + // coerce input to a string before attempting to parse + parsedURL = parseURL(`${input}`); + } + input = {}; + } else { + parsedURL = parseURL(input.url); + } + + let method = init.method || input.method || 'GET'; + method = method.toUpperCase(); + + if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { + throw new TypeError('Request with GET/HEAD method cannot have body'); + } + + let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; + + Body.call(this, inputBody, { + timeout: init.timeout || input.timeout || 0, + size: init.size || input.size || 0 + }); + + const headers = new Headers(init.headers || input.headers || {}); + + if (inputBody != null && !headers.has('Content-Type')) { + const contentType = extractContentType(inputBody); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + + let signal = isRequest(input) ? input.signal : null; + if ('signal' in init) signal = init.signal; + + if (signal != null && !isAbortSignal(signal)) { + throw new TypeError('Expected signal to be an instanceof AbortSignal'); + } + + this[INTERNALS$2] = { + method, + redirect: init.redirect || input.redirect || 'follow', + headers, + parsedURL, + signal + }; + + // node-fetch-only options + this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; + this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; + this.counter = init.counter || input.counter || 0; + this.agent = init.agent || input.agent; + } + + get method() { + return this[INTERNALS$2].method; + } + + get url() { + return format_url(this[INTERNALS$2].parsedURL); + } + + get headers() { + return this[INTERNALS$2].headers; + } + + get redirect() { + return this[INTERNALS$2].redirect; + } + + get signal() { + return this[INTERNALS$2].signal; + } + + /** + * Clone this request + * + * @return Request + */ + clone() { + return new Request(this); + } +} + +Body.mixIn(Request.prototype); + +Object.defineProperty(Request.prototype, Symbol.toStringTag, { + value: 'Request', + writable: false, + enumerable: false, + configurable: true +}); + +Object.defineProperties(Request.prototype, { + method: { enumerable: true }, + url: { enumerable: true }, + headers: { enumerable: true }, + redirect: { enumerable: true }, + clone: { enumerable: true }, + signal: { enumerable: true } +}); + +/** + * Convert a Request to Node.js http request options. + * + * @param Request A Request instance + * @return Object The options object to be passed to http.request + */ +function getNodeRequestOptions(request) { + const parsedURL = request[INTERNALS$2].parsedURL; + const headers = new Headers(request[INTERNALS$2].headers); + + // fetch step 1.3 + if (!headers.has('Accept')) { + headers.set('Accept', '*/*'); + } + + // Basic fetch + if (!parsedURL.protocol || !parsedURL.hostname) { + throw new TypeError('Only absolute URLs are supported'); + } + + if (!/^https?:$/.test(parsedURL.protocol)) { + throw new TypeError('Only HTTP(S) protocols are supported'); + } + + if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { + throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); + } + + // HTTP-network-or-cache fetch steps 2.4-2.7 + let contentLengthValue = null; + if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { + contentLengthValue = '0'; + } + if (request.body != null) { + const totalBytes = getTotalBytes(request); + if (typeof totalBytes === 'number') { + contentLengthValue = String(totalBytes); + } + } + if (contentLengthValue) { + headers.set('Content-Length', contentLengthValue); + } + + // HTTP-network-or-cache fetch step 2.11 + if (!headers.has('User-Agent')) { + headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); + } + + // HTTP-network-or-cache fetch step 2.15 + if (request.compress && !headers.has('Accept-Encoding')) { + headers.set('Accept-Encoding', 'gzip,deflate'); + } + + let agent = request.agent; + if (typeof agent === 'function') { + agent = agent(parsedURL); + } + + if (!headers.has('Connection') && !agent) { + headers.set('Connection', 'close'); + } + + // HTTP-network fetch step 4.2 + // chunked encoding is handled by Node.js + + return Object.assign({}, parsedURL, { + method: request.method, + headers: exportNodeCompatibleHeaders(headers), + agent + }); +} + +/** + * abort-error.js + * + * AbortError interface for cancelled requests + */ + +/** + * Create AbortError instance + * + * @param String message Error message for human + * @return AbortError + */ +function AbortError(message) { + Error.call(this, message); + + this.type = 'aborted'; + this.message = message; + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); +} + +AbortError.prototype = Object.create(Error.prototype); +AbortError.prototype.constructor = AbortError; +AbortError.prototype.name = 'AbortError'; + +const URL$1 = Url.URL || whatwgUrl.URL; + +// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 +const PassThrough$1 = Stream.PassThrough; + +const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { + const orig = new URL$1(original).hostname; + const dest = new URL$1(destination).hostname; + + return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); +}; + +/** + * Fetch function + * + * @param Mixed url Absolute url or Request instance + * @param Object opts Fetch options + * @return Promise + */ +function fetch(url, opts) { + + // allow custom promise + if (!fetch.Promise) { + throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); + } + + Body.Promise = fetch.Promise; + + // wrap http.request into fetch + return new fetch.Promise(function (resolve, reject) { + // build request object + const request = new Request(url, opts); + const options = getNodeRequestOptions(request); + + const send = (options.protocol === 'https:' ? https : http).request; + const signal = request.signal; + + let response = null; + + const abort = function abort() { + let error = new AbortError('The user aborted a request.'); + reject(error); + if (request.body && request.body instanceof Stream.Readable) { + request.body.destroy(error); + } + if (!response || !response.body) return; + response.body.emit('error', error); + }; + + if (signal && signal.aborted) { + abort(); + return; + } + + const abortAndFinalize = function abortAndFinalize() { + abort(); + finalize(); + }; + + // send request + const req = send(options); + let reqTimeout; + + if (signal) { + signal.addEventListener('abort', abortAndFinalize); + } + + function finalize() { + req.abort(); + if (signal) signal.removeEventListener('abort', abortAndFinalize); + clearTimeout(reqTimeout); + } + + if (request.timeout) { + req.once('socket', function (socket) { + reqTimeout = setTimeout(function () { + reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); + finalize(); + }, request.timeout); + }); + } + + req.on('error', function (err) { + reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); + finalize(); + }); + + req.on('response', function (res) { + clearTimeout(reqTimeout); + + const headers = createHeadersLenient(res.headers); + + // HTTP fetch step 5 + if (fetch.isRedirect(res.statusCode)) { + // HTTP fetch step 5.2 + const location = headers.get('Location'); + + // HTTP fetch step 5.3 + let locationURL = null; + try { + locationURL = location === null ? null : new URL$1(location, request.url).toString(); + } catch (err) { + // error here can only be invalid URL in Location: header + // do not throw when options.redirect == manual + // let the user extract the errorneous redirect URL + if (request.redirect !== 'manual') { + reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); + finalize(); + return; + } + } + + // HTTP fetch step 5.5 + switch (request.redirect) { + case 'error': + reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); + finalize(); + return; + case 'manual': + // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. + if (locationURL !== null) { + // handle corrupted header + try { + headers.set('Location', locationURL); + } catch (err) { + // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request + reject(err); + } + } + break; + case 'follow': + // HTTP-redirect fetch step 2 + if (locationURL === null) { + break; + } + + // HTTP-redirect fetch step 5 + if (request.counter >= request.follow) { + reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 6 (counter increment) + // Create a new Request object. + const requestOpts = { + headers: new Headers(request.headers), + follow: request.follow, + counter: request.counter + 1, + agent: request.agent, + compress: request.compress, + method: request.method, + body: request.body, + signal: request.signal, + timeout: request.timeout, + size: request.size + }; + + if (!isDomainOrSubdomain(request.url, locationURL)) { + for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { + requestOpts.headers.delete(name); + } + } + + // HTTP-redirect fetch step 9 + if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { + reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 11 + if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { + requestOpts.method = 'GET'; + requestOpts.body = undefined; + requestOpts.headers.delete('content-length'); + } + + // HTTP-redirect fetch step 15 + resolve(fetch(new Request(locationURL, requestOpts))); + finalize(); + return; + } + } + + // prepare response + res.once('end', function () { + if (signal) signal.removeEventListener('abort', abortAndFinalize); + }); + let body = res.pipe(new PassThrough$1()); + + const response_options = { + url: request.url, + status: res.statusCode, + statusText: res.statusMessage, + headers: headers, + size: request.size, + timeout: request.timeout, + counter: request.counter + }; + + // HTTP-network fetch step 12.1.1.3 + const codings = headers.get('Content-Encoding'); + + // HTTP-network fetch step 12.1.1.4: handle content codings + + // in following scenarios we ignore compression support + // 1. compression support is disabled + // 2. HEAD request + // 3. no Content-Encoding header + // 4. no content response (204) + // 5. content not modified response (304) + if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { + response = new Response(body, response_options); + resolve(response); + return; + } + + // For Node v6+ + // Be less strict when decoding compressed responses, since sometimes + // servers send slightly invalid responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + const zlibOptions = { + flush: zlib.Z_SYNC_FLUSH, + finishFlush: zlib.Z_SYNC_FLUSH + }; + + // for gzip + if (codings == 'gzip' || codings == 'x-gzip') { + body = body.pipe(zlib.createGunzip(zlibOptions)); + response = new Response(body, response_options); + resolve(response); + return; + } + + // for deflate + if (codings == 'deflate' || codings == 'x-deflate') { + // handle the infamous raw deflate response from old servers + // a hack for old IIS and Apache servers + const raw = res.pipe(new PassThrough$1()); + raw.once('data', function (chunk) { + // see http://stackoverflow.com/questions/37519828 + if ((chunk[0] & 0x0F) === 0x08) { + body = body.pipe(zlib.createInflate()); + } else { + body = body.pipe(zlib.createInflateRaw()); + } + response = new Response(body, response_options); + resolve(response); + }); + return; + } + + // for br + if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { + body = body.pipe(zlib.createBrotliDecompress()); + response = new Response(body, response_options); + resolve(response); + return; + } + + // otherwise, use response as-is + response = new Response(body, response_options); + resolve(response); + }); + + writeToStream(req, request); + }); +} +/** + * Redirect code matching + * + * @param Number code Status code + * @return Boolean + */ +fetch.isRedirect = function (code) { + return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; +}; + +// expose Promise +fetch.Promise = global.Promise; + +module.exports = exports = fetch; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = exports; +exports.Headers = Headers; +exports.Request = Request; +exports.Response = Response; +exports.FetchError = FetchError; diff --git a/node_modules/node-fetch/lib/index.mjs b/node_modules/node-fetch/lib/index.mjs new file mode 100644 index 0000000..49ee05e --- /dev/null +++ b/node_modules/node-fetch/lib/index.mjs @@ -0,0 +1,1686 @@ +import Stream from 'stream'; +import http from 'http'; +import Url from 'url'; +import whatwgUrl from 'whatwg-url'; +import https from 'https'; +import zlib from 'zlib'; + +// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js + +// fix for "Readable" isn't a named export issue +const Readable = Stream.Readable; + +const BUFFER = Symbol('buffer'); +const TYPE = Symbol('type'); + +class Blob { + constructor() { + this[TYPE] = ''; + + const blobParts = arguments[0]; + const options = arguments[1]; + + const buffers = []; + let size = 0; + + if (blobParts) { + const a = blobParts; + const length = Number(a.length); + for (let i = 0; i < length; i++) { + const element = a[i]; + let buffer; + if (element instanceof Buffer) { + buffer = element; + } else if (ArrayBuffer.isView(element)) { + buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); + } else if (element instanceof ArrayBuffer) { + buffer = Buffer.from(element); + } else if (element instanceof Blob) { + buffer = element[BUFFER]; + } else { + buffer = Buffer.from(typeof element === 'string' ? element : String(element)); + } + size += buffer.length; + buffers.push(buffer); + } + } + + this[BUFFER] = Buffer.concat(buffers); + + let type = options && options.type !== undefined && String(options.type).toLowerCase(); + if (type && !/[^\u0020-\u007E]/.test(type)) { + this[TYPE] = type; + } + } + get size() { + return this[BUFFER].length; + } + get type() { + return this[TYPE]; + } + text() { + return Promise.resolve(this[BUFFER].toString()); + } + arrayBuffer() { + const buf = this[BUFFER]; + const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + return Promise.resolve(ab); + } + stream() { + const readable = new Readable(); + readable._read = function () {}; + readable.push(this[BUFFER]); + readable.push(null); + return readable; + } + toString() { + return '[object Blob]'; + } + slice() { + const size = this.size; + + const start = arguments[0]; + const end = arguments[1]; + let relativeStart, relativeEnd; + if (start === undefined) { + relativeStart = 0; + } else if (start < 0) { + relativeStart = Math.max(size + start, 0); + } else { + relativeStart = Math.min(start, size); + } + if (end === undefined) { + relativeEnd = size; + } else if (end < 0) { + relativeEnd = Math.max(size + end, 0); + } else { + relativeEnd = Math.min(end, size); + } + const span = Math.max(relativeEnd - relativeStart, 0); + + const buffer = this[BUFFER]; + const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); + const blob = new Blob([], { type: arguments[2] }); + blob[BUFFER] = slicedBuffer; + return blob; + } +} + +Object.defineProperties(Blob.prototype, { + size: { enumerable: true }, + type: { enumerable: true }, + slice: { enumerable: true } +}); + +Object.defineProperty(Blob.prototype, Symbol.toStringTag, { + value: 'Blob', + writable: false, + enumerable: false, + configurable: true +}); + +/** + * fetch-error.js + * + * FetchError interface for operational errors + */ + +/** + * Create FetchError instance + * + * @param String message Error message for human + * @param String type Error type for machine + * @param String systemError For Node.js system error + * @return FetchError + */ +function FetchError(message, type, systemError) { + Error.call(this, message); + + this.message = message; + this.type = type; + + // when err.type is `system`, err.code contains system error code + if (systemError) { + this.code = this.errno = systemError.code; + } + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); +} + +FetchError.prototype = Object.create(Error.prototype); +FetchError.prototype.constructor = FetchError; +FetchError.prototype.name = 'FetchError'; + +let convert; +try { + convert = require('encoding').convert; +} catch (e) {} + +const INTERNALS = Symbol('Body internals'); + +// fix an issue where "PassThrough" isn't a named export for node <10 +const PassThrough = Stream.PassThrough; + +/** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +function Body(body) { + var _this = this; + + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$size = _ref.size; + + let size = _ref$size === undefined ? 0 : _ref$size; + var _ref$timeout = _ref.timeout; + let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; + + if (body == null) { + // body is undefined or null + body = null; + } else if (isURLSearchParams(body)) { + // body is a URLSearchParams + body = Buffer.from(body.toString()); + } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { + // body is ArrayBuffer + body = Buffer.from(body); + } else if (ArrayBuffer.isView(body)) { + // body is ArrayBufferView + body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); + } else if (body instanceof Stream) ; else { + // none of the above + // coerce to string then buffer + body = Buffer.from(String(body)); + } + this[INTERNALS] = { + body, + disturbed: false, + error: null + }; + this.size = size; + this.timeout = timeout; + + if (body instanceof Stream) { + body.on('error', function (err) { + const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); + _this[INTERNALS].error = error; + }); + } +} + +Body.prototype = { + get body() { + return this[INTERNALS].body; + }, + + get bodyUsed() { + return this[INTERNALS].disturbed; + }, + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + arrayBuffer() { + return consumeBody.call(this).then(function (buf) { + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + }); + }, + + /** + * Return raw response as Blob + * + * @return Promise + */ + blob() { + let ct = this.headers && this.headers.get('content-type') || ''; + return consumeBody.call(this).then(function (buf) { + return Object.assign( + // Prevent copying + new Blob([], { + type: ct.toLowerCase() + }), { + [BUFFER]: buf + }); + }); + }, + + /** + * Decode response as json + * + * @return Promise + */ + json() { + var _this2 = this; + + return consumeBody.call(this).then(function (buffer) { + try { + return JSON.parse(buffer.toString()); + } catch (err) { + return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); + } + }); + }, + + /** + * Decode response as text + * + * @return Promise + */ + text() { + return consumeBody.call(this).then(function (buffer) { + return buffer.toString(); + }); + }, + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ + buffer() { + return consumeBody.call(this); + }, + + /** + * Decode response as text, while automatically detecting the encoding and + * trying to decode to UTF-8 (non-spec api) + * + * @return Promise + */ + textConverted() { + var _this3 = this; + + return consumeBody.call(this).then(function (buffer) { + return convertBody(buffer, _this3.headers); + }); + } +}; + +// In browsers, all properties are enumerable. +Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true } +}); + +Body.mixIn = function (proto) { + for (const name of Object.getOwnPropertyNames(Body.prototype)) { + // istanbul ignore else: future proof + if (!(name in proto)) { + const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); + Object.defineProperty(proto, name, desc); + } + } +}; + +/** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ +function consumeBody() { + var _this4 = this; + + if (this[INTERNALS].disturbed) { + return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); + } + + this[INTERNALS].disturbed = true; + + if (this[INTERNALS].error) { + return Body.Promise.reject(this[INTERNALS].error); + } + + let body = this.body; + + // body is null + if (body === null) { + return Body.Promise.resolve(Buffer.alloc(0)); + } + + // body is blob + if (isBlob(body)) { + body = body.stream(); + } + + // body is buffer + if (Buffer.isBuffer(body)) { + return Body.Promise.resolve(body); + } + + // istanbul ignore if: should never happen + if (!(body instanceof Stream)) { + return Body.Promise.resolve(Buffer.alloc(0)); + } + + // body is stream + // get ready to actually consume the body + let accum = []; + let accumBytes = 0; + let abort = false; + + return new Body.Promise(function (resolve, reject) { + let resTimeout; + + // allow timeout on slow response body + if (_this4.timeout) { + resTimeout = setTimeout(function () { + abort = true; + reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); + }, _this4.timeout); + } + + // handle stream errors + body.on('error', function (err) { + if (err.name === 'AbortError') { + // if the request was aborted, reject with this Error + abort = true; + reject(err); + } else { + // other errors, such as incorrect content-encoding + reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + + body.on('data', function (chunk) { + if (abort || chunk === null) { + return; + } + + if (_this4.size && accumBytes + chunk.length > _this4.size) { + abort = true; + reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); + return; + } + + accumBytes += chunk.length; + accum.push(chunk); + }); + + body.on('end', function () { + if (abort) { + return; + } + + clearTimeout(resTimeout); + + try { + resolve(Buffer.concat(accum, accumBytes)); + } catch (err) { + // handle streams that have accumulated too much data (issue #414) + reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + }); +} + +/** + * Detect buffer encoding and convert to target encoding + * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding + * + * @param Buffer buffer Incoming buffer + * @param String encoding Target encoding + * @return String + */ +function convertBody(buffer, headers) { + if (typeof convert !== 'function') { + throw new Error('The package `encoding` must be installed to use the textConverted() function'); + } + + const ct = headers.get('content-type'); + let charset = 'utf-8'; + let res, str; + + // header + if (ct) { + res = /charset=([^;]*)/i.exec(ct); + } + + // no charset in content type, peek at response body for at most 1024 bytes + str = buffer.slice(0, 1024).toString(); + + // html5 + if (!res && str) { + res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; + + this[MAP] = Object.create(null); + + if (init instanceof Headers) { + const rawHeaders = init.raw(); + const headerNames = Object.keys(rawHeaders); + + for (const headerName of headerNames) { + for (const value of rawHeaders[headerName]) { + this.append(headerName, value); + } + } + + return; + } + + // We don't worry about converting prop to ByteString here as append() + // will handle it. + if (init == null) ; else if (typeof init === 'object') { + const method = init[Symbol.iterator]; + if (method != null) { + if (typeof method !== 'function') { + throw new TypeError('Header pairs must be iterable'); + } + + // sequence> + // Note: per spec we have to first exhaust the lists then process them + const pairs = []; + for (const pair of init) { + if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { + throw new TypeError('Each header pair must be iterable'); + } + pairs.push(Array.from(pair)); + } + + for (const pair of pairs) { + if (pair.length !== 2) { + throw new TypeError('Each header pair must be a name/value tuple'); + } + this.append(pair[0], pair[1]); + } + } else { + // record + for (const key of Object.keys(init)) { + const value = init[key]; + this.append(key, value); + } + } + } else { + throw new TypeError('Provided initializer must be an object'); + } + } + + /** + * Return combined header value given name + * + * @param String name Header name + * @return Mixed + */ + get(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key === undefined) { + return null; + } + + return this[MAP][key].join(', '); + } + + /** + * Iterate over all headers + * + * @param Function callback Executed for each item with parameters (value, name, thisArg) + * @param Boolean thisArg `this` context for callback function + * @return Void + */ + forEach(callback) { + let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; + + let pairs = getHeaders(this); + let i = 0; + while (i < pairs.length) { + var _pairs$i = pairs[i]; + const name = _pairs$i[0], + value = _pairs$i[1]; + + callback.call(thisArg, value, name, this); + pairs = getHeaders(this); + i++; + } + } + + /** + * Overwrite header values given name + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + set(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + this[MAP][key !== undefined ? key : name] = [value]; + } + + /** + * Append a value onto existing header + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + append(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + if (key !== undefined) { + this[MAP][key].push(value); + } else { + this[MAP][name] = [value]; + } + } + + /** + * Check for header name existence + * + * @param String name Header name + * @return Boolean + */ + has(name) { + name = `${name}`; + validateName(name); + return find(this[MAP], name) !== undefined; + } + + /** + * Delete all header values given name + * + * @param String name Header name + * @return Void + */ + delete(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key !== undefined) { + delete this[MAP][key]; + } + } + + /** + * Return raw headers (non-spec api) + * + * @return Object + */ + raw() { + return this[MAP]; + } + + /** + * Get an iterator on keys. + * + * @return Iterator + */ + keys() { + return createHeadersIterator(this, 'key'); + } + + /** + * Get an iterator on values. + * + * @return Iterator + */ + values() { + return createHeadersIterator(this, 'value'); + } + + /** + * Get an iterator on entries. + * + * This is the default iterator of the Headers object. + * + * @return Iterator + */ + [Symbol.iterator]() { + return createHeadersIterator(this, 'key+value'); + } +} +Headers.prototype.entries = Headers.prototype[Symbol.iterator]; + +Object.defineProperty(Headers.prototype, Symbol.toStringTag, { + value: 'Headers', + writable: false, + enumerable: false, + configurable: true +}); + +Object.defineProperties(Headers.prototype, { + get: { enumerable: true }, + forEach: { enumerable: true }, + set: { enumerable: true }, + append: { enumerable: true }, + has: { enumerable: true }, + delete: { enumerable: true }, + keys: { enumerable: true }, + values: { enumerable: true }, + entries: { enumerable: true } +}); + +function getHeaders(headers) { + let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; + + const keys = Object.keys(headers[MAP]).sort(); + return keys.map(kind === 'key' ? function (k) { + return k.toLowerCase(); + } : kind === 'value' ? function (k) { + return headers[MAP][k].join(', '); + } : function (k) { + return [k.toLowerCase(), headers[MAP][k].join(', ')]; + }); +} + +const INTERNAL = Symbol('internal'); + +function createHeadersIterator(target, kind) { + const iterator = Object.create(HeadersIteratorPrototype); + iterator[INTERNAL] = { + target, + kind, + index: 0 + }; + return iterator; +} + +const HeadersIteratorPrototype = Object.setPrototypeOf({ + next() { + // istanbul ignore if + if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { + throw new TypeError('Value of `this` is not a HeadersIterator'); + } + + var _INTERNAL = this[INTERNAL]; + const target = _INTERNAL.target, + kind = _INTERNAL.kind, + index = _INTERNAL.index; + + const values = getHeaders(target, kind); + const len = values.length; + if (index >= len) { + return { + value: undefined, + done: true + }; + } + + this[INTERNAL].index = index + 1; + + return { + value: values[index], + done: false + }; + } +}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); + +Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { + value: 'HeadersIterator', + writable: false, + enumerable: false, + configurable: true +}); + +/** + * Export the Headers object in a form that Node.js can consume. + * + * @param Headers headers + * @return Object + */ +function exportNodeCompatibleHeaders(headers) { + const obj = Object.assign({ __proto__: null }, headers[MAP]); + + // http.request() only supports string as Host header. This hack makes + // specifying custom Host header possible. + const hostHeaderKey = find(headers[MAP], 'Host'); + if (hostHeaderKey !== undefined) { + obj[hostHeaderKey] = obj[hostHeaderKey][0]; + } + + return obj; +} + +/** + * Create a Headers object from an object of headers, ignoring those that do + * not conform to HTTP grammar productions. + * + * @param Object obj Object of headers + * @return Headers + */ +function createHeadersLenient(obj) { + const headers = new Headers(); + for (const name of Object.keys(obj)) { + if (invalidTokenRegex.test(name)) { + continue; + } + if (Array.isArray(obj[name])) { + for (const val of obj[name]) { + if (invalidHeaderCharRegex.test(val)) { + continue; + } + if (headers[MAP][name] === undefined) { + headers[MAP][name] = [val]; + } else { + headers[MAP][name].push(val); + } + } + } else if (!invalidHeaderCharRegex.test(obj[name])) { + headers[MAP][name] = [obj[name]]; + } + } + return headers; +} + +const INTERNALS$1 = Symbol('Response internals'); + +// fix an issue where "STATUS_CODES" aren't a named export for node <10 +const STATUS_CODES = http.STATUS_CODES; + +/** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class Response { + constructor() { + let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + Body.call(this, body, opts); + + const status = opts.status || 200; + const headers = new Headers(opts.headers); + + if (body != null && !headers.has('Content-Type')) { + const contentType = extractContentType(body); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + + this[INTERNALS$1] = { + url: opts.url, + status, + statusText: opts.statusText || STATUS_CODES[status], + headers, + counter: opts.counter + }; + } + + get url() { + return this[INTERNALS$1].url || ''; + } + + get status() { + return this[INTERNALS$1].status; + } + + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; + } + + get redirected() { + return this[INTERNALS$1].counter > 0; + } + + get statusText() { + return this[INTERNALS$1].statusText; + } + + get headers() { + return this[INTERNALS$1].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + return new Response(clone(this), { + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected + }); + } +} + +Body.mixIn(Response.prototype); + +Object.defineProperties(Response.prototype, { + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true } +}); + +Object.defineProperty(Response.prototype, Symbol.toStringTag, { + value: 'Response', + writable: false, + enumerable: false, + configurable: true +}); + +const INTERNALS$2 = Symbol('Request internals'); +const URL = Url.URL || whatwgUrl.URL; + +// fix an issue where "format", "parse" aren't a named export for node <10 +const parse_url = Url.parse; +const format_url = Url.format; + +/** + * Wrapper around `new URL` to handle arbitrary URLs + * + * @param {string} urlStr + * @return {void} + */ +function parseURL(urlStr) { + /* + Check whether the URL is absolute or not + Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 + Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 + */ + if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { + urlStr = new URL(urlStr).toString(); + } + + // Fallback to old implementation for arbitrary URLs + return parse_url(urlStr); +} + +const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; + +/** + * Check if a value is an instance of Request. + * + * @param Mixed input + * @return Boolean + */ +function isRequest(input) { + return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; +} + +function isAbortSignal(signal) { + const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); + return !!(proto && proto.constructor.name === 'AbortSignal'); +} + +/** + * Request class + * + * @param Mixed input Url or Request instance + * @param Object init Custom options + * @return Void + */ +class Request { + constructor(input) { + let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + let parsedURL; + + // normalize input + if (!isRequest(input)) { + if (input && input.href) { + // in order to support Node.js' Url objects; though WHATWG's URL objects + // will fall into this branch also (since their `toString()` will return + // `href` property anyway) + parsedURL = parseURL(input.href); + } else { + // coerce input to a string before attempting to parse + parsedURL = parseURL(`${input}`); + } + input = {}; + } else { + parsedURL = parseURL(input.url); + } + + let method = init.method || input.method || 'GET'; + method = method.toUpperCase(); + + if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { + throw new TypeError('Request with GET/HEAD method cannot have body'); + } + + let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; + + Body.call(this, inputBody, { + timeout: init.timeout || input.timeout || 0, + size: init.size || input.size || 0 + }); + + const headers = new Headers(init.headers || input.headers || {}); + + if (inputBody != null && !headers.has('Content-Type')) { + const contentType = extractContentType(inputBody); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + + let signal = isRequest(input) ? input.signal : null; + if ('signal' in init) signal = init.signal; + + if (signal != null && !isAbortSignal(signal)) { + throw new TypeError('Expected signal to be an instanceof AbortSignal'); + } + + this[INTERNALS$2] = { + method, + redirect: init.redirect || input.redirect || 'follow', + headers, + parsedURL, + signal + }; + + // node-fetch-only options + this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; + this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; + this.counter = init.counter || input.counter || 0; + this.agent = init.agent || input.agent; + } + + get method() { + return this[INTERNALS$2].method; + } + + get url() { + return format_url(this[INTERNALS$2].parsedURL); + } + + get headers() { + return this[INTERNALS$2].headers; + } + + get redirect() { + return this[INTERNALS$2].redirect; + } + + get signal() { + return this[INTERNALS$2].signal; + } + + /** + * Clone this request + * + * @return Request + */ + clone() { + return new Request(this); + } +} + +Body.mixIn(Request.prototype); + +Object.defineProperty(Request.prototype, Symbol.toStringTag, { + value: 'Request', + writable: false, + enumerable: false, + configurable: true +}); + +Object.defineProperties(Request.prototype, { + method: { enumerable: true }, + url: { enumerable: true }, + headers: { enumerable: true }, + redirect: { enumerable: true }, + clone: { enumerable: true }, + signal: { enumerable: true } +}); + +/** + * Convert a Request to Node.js http request options. + * + * @param Request A Request instance + * @return Object The options object to be passed to http.request + */ +function getNodeRequestOptions(request) { + const parsedURL = request[INTERNALS$2].parsedURL; + const headers = new Headers(request[INTERNALS$2].headers); + + // fetch step 1.3 + if (!headers.has('Accept')) { + headers.set('Accept', '*/*'); + } + + // Basic fetch + if (!parsedURL.protocol || !parsedURL.hostname) { + throw new TypeError('Only absolute URLs are supported'); + } + + if (!/^https?:$/.test(parsedURL.protocol)) { + throw new TypeError('Only HTTP(S) protocols are supported'); + } + + if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { + throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); + } + + // HTTP-network-or-cache fetch steps 2.4-2.7 + let contentLengthValue = null; + if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { + contentLengthValue = '0'; + } + if (request.body != null) { + const totalBytes = getTotalBytes(request); + if (typeof totalBytes === 'number') { + contentLengthValue = String(totalBytes); + } + } + if (contentLengthValue) { + headers.set('Content-Length', contentLengthValue); + } + + // HTTP-network-or-cache fetch step 2.11 + if (!headers.has('User-Agent')) { + headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); + } + + // HTTP-network-or-cache fetch step 2.15 + if (request.compress && !headers.has('Accept-Encoding')) { + headers.set('Accept-Encoding', 'gzip,deflate'); + } + + let agent = request.agent; + if (typeof agent === 'function') { + agent = agent(parsedURL); + } + + if (!headers.has('Connection') && !agent) { + headers.set('Connection', 'close'); + } + + // HTTP-network fetch step 4.2 + // chunked encoding is handled by Node.js + + return Object.assign({}, parsedURL, { + method: request.method, + headers: exportNodeCompatibleHeaders(headers), + agent + }); +} + +/** + * abort-error.js + * + * AbortError interface for cancelled requests + */ + +/** + * Create AbortError instance + * + * @param String message Error message for human + * @return AbortError + */ +function AbortError(message) { + Error.call(this, message); + + this.type = 'aborted'; + this.message = message; + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); +} + +AbortError.prototype = Object.create(Error.prototype); +AbortError.prototype.constructor = AbortError; +AbortError.prototype.name = 'AbortError'; + +const URL$1 = Url.URL || whatwgUrl.URL; + +// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 +const PassThrough$1 = Stream.PassThrough; + +const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { + const orig = new URL$1(original).hostname; + const dest = new URL$1(destination).hostname; + + return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); +}; + +/** + * Fetch function + * + * @param Mixed url Absolute url or Request instance + * @param Object opts Fetch options + * @return Promise + */ +function fetch(url, opts) { + + // allow custom promise + if (!fetch.Promise) { + throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); + } + + Body.Promise = fetch.Promise; + + // wrap http.request into fetch + return new fetch.Promise(function (resolve, reject) { + // build request object + const request = new Request(url, opts); + const options = getNodeRequestOptions(request); + + const send = (options.protocol === 'https:' ? https : http).request; + const signal = request.signal; + + let response = null; + + const abort = function abort() { + let error = new AbortError('The user aborted a request.'); + reject(error); + if (request.body && request.body instanceof Stream.Readable) { + request.body.destroy(error); + } + if (!response || !response.body) return; + response.body.emit('error', error); + }; + + if (signal && signal.aborted) { + abort(); + return; + } + + const abortAndFinalize = function abortAndFinalize() { + abort(); + finalize(); + }; + + // send request + const req = send(options); + let reqTimeout; + + if (signal) { + signal.addEventListener('abort', abortAndFinalize); + } + + function finalize() { + req.abort(); + if (signal) signal.removeEventListener('abort', abortAndFinalize); + clearTimeout(reqTimeout); + } + + if (request.timeout) { + req.once('socket', function (socket) { + reqTimeout = setTimeout(function () { + reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); + finalize(); + }, request.timeout); + }); + } + + req.on('error', function (err) { + reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); + finalize(); + }); + + req.on('response', function (res) { + clearTimeout(reqTimeout); + + const headers = createHeadersLenient(res.headers); + + // HTTP fetch step 5 + if (fetch.isRedirect(res.statusCode)) { + // HTTP fetch step 5.2 + const location = headers.get('Location'); + + // HTTP fetch step 5.3 + let locationURL = null; + try { + locationURL = location === null ? null : new URL$1(location, request.url).toString(); + } catch (err) { + // error here can only be invalid URL in Location: header + // do not throw when options.redirect == manual + // let the user extract the errorneous redirect URL + if (request.redirect !== 'manual') { + reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); + finalize(); + return; + } + } + + // HTTP fetch step 5.5 + switch (request.redirect) { + case 'error': + reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); + finalize(); + return; + case 'manual': + // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. + if (locationURL !== null) { + // handle corrupted header + try { + headers.set('Location', locationURL); + } catch (err) { + // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request + reject(err); + } + } + break; + case 'follow': + // HTTP-redirect fetch step 2 + if (locationURL === null) { + break; + } + + // HTTP-redirect fetch step 5 + if (request.counter >= request.follow) { + reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 6 (counter increment) + // Create a new Request object. + const requestOpts = { + headers: new Headers(request.headers), + follow: request.follow, + counter: request.counter + 1, + agent: request.agent, + compress: request.compress, + method: request.method, + body: request.body, + signal: request.signal, + timeout: request.timeout, + size: request.size + }; + + if (!isDomainOrSubdomain(request.url, locationURL)) { + for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { + requestOpts.headers.delete(name); + } + } + + // HTTP-redirect fetch step 9 + if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { + reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 11 + if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { + requestOpts.method = 'GET'; + requestOpts.body = undefined; + requestOpts.headers.delete('content-length'); + } + + // HTTP-redirect fetch step 15 + resolve(fetch(new Request(locationURL, requestOpts))); + finalize(); + return; + } + } + + // prepare response + res.once('end', function () { + if (signal) signal.removeEventListener('abort', abortAndFinalize); + }); + let body = res.pipe(new PassThrough$1()); + + const response_options = { + url: request.url, + status: res.statusCode, + statusText: res.statusMessage, + headers: headers, + size: request.size, + timeout: request.timeout, + counter: request.counter + }; + + // HTTP-network fetch step 12.1.1.3 + const codings = headers.get('Content-Encoding'); + + // HTTP-network fetch step 12.1.1.4: handle content codings + + // in following scenarios we ignore compression support + // 1. compression support is disabled + // 2. HEAD request + // 3. no Content-Encoding header + // 4. no content response (204) + // 5. content not modified response (304) + if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { + response = new Response(body, response_options); + resolve(response); + return; + } + + // For Node v6+ + // Be less strict when decoding compressed responses, since sometimes + // servers send slightly invalid responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + const zlibOptions = { + flush: zlib.Z_SYNC_FLUSH, + finishFlush: zlib.Z_SYNC_FLUSH + }; + + // for gzip + if (codings == 'gzip' || codings == 'x-gzip') { + body = body.pipe(zlib.createGunzip(zlibOptions)); + response = new Response(body, response_options); + resolve(response); + return; + } + + // for deflate + if (codings == 'deflate' || codings == 'x-deflate') { + // handle the infamous raw deflate response from old servers + // a hack for old IIS and Apache servers + const raw = res.pipe(new PassThrough$1()); + raw.once('data', function (chunk) { + // see http://stackoverflow.com/questions/37519828 + if ((chunk[0] & 0x0F) === 0x08) { + body = body.pipe(zlib.createInflate()); + } else { + body = body.pipe(zlib.createInflateRaw()); + } + response = new Response(body, response_options); + resolve(response); + }); + return; + } + + // for br + if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { + body = body.pipe(zlib.createBrotliDecompress()); + response = new Response(body, response_options); + resolve(response); + return; + } + + // otherwise, use response as-is + response = new Response(body, response_options); + resolve(response); + }); + + writeToStream(req, request); + }); +} +/** + * Redirect code matching + * + * @param Number code Status code + * @return Boolean + */ +fetch.isRedirect = function (code) { + return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; +}; + +// expose Promise +fetch.Promise = global.Promise; + +export default fetch; +export { Headers, Request, Response, FetchError }; diff --git a/node_modules/node-fetch/package.json b/node_modules/node-fetch/package.json new file mode 100644 index 0000000..3c1bd8d --- /dev/null +++ b/node_modules/node-fetch/package.json @@ -0,0 +1,76 @@ +{ + "name": "node-fetch", + "version": "2.6.7", + "description": "A light-weight module that brings window.fetch to node.js", + "main": "lib/index.js", + "browser": "./browser.js", + "module": "lib/index.mjs", + "files": [ + "lib/index.js", + "lib/index.mjs", + "lib/index.es.js", + "browser.js" + ], + "engines": { + "node": "4.x || >=6.0.0" + }, + "scripts": { + "build": "cross-env BABEL_ENV=rollup rollup -c", + "prepare": "npm run build", + "test": "cross-env BABEL_ENV=test mocha --require babel-register --throw-deprecation test/test.js", + "report": "cross-env BABEL_ENV=coverage nyc --reporter lcov --reporter text mocha -R spec test/test.js", + "coverage": "cross-env BABEL_ENV=coverage nyc --reporter json --reporter text mocha -R spec test/test.js && codecov -f coverage/coverage-final.json" + }, + "repository": { + "type": "git", + "url": "https://github.com/bitinn/node-fetch.git" + }, + "keywords": [ + "fetch", + "http", + "promise" + ], + "author": "David Frank", + "license": "MIT", + "bugs": { + "url": "https://github.com/bitinn/node-fetch/issues" + }, + "homepage": "https://github.com/bitinn/node-fetch", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + }, + "devDependencies": { + "@ungap/url-search-params": "^0.1.2", + "abort-controller": "^1.1.0", + "abortcontroller-polyfill": "^1.3.0", + "babel-core": "^6.26.3", + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-env": "^1.6.1", + "babel-register": "^6.16.3", + "chai": "^3.5.0", + "chai-as-promised": "^7.1.1", + "chai-iterator": "^1.1.1", + "chai-string": "~1.3.0", + "codecov": "3.3.0", + "cross-env": "^5.2.0", + "form-data": "^2.3.3", + "is-builtin-module": "^1.0.0", + "mocha": "^5.0.0", + "nyc": "11.9.0", + "parted": "^0.1.1", + "promise": "^8.0.3", + "resumer": "0.0.0", + "rollup": "^0.63.4", + "rollup-plugin-babel": "^3.0.7", + "string-to-arraybuffer": "^1.0.2", + "teeny-request": "3.7.0" + } +} diff --git a/node_modules/tr46/.npmignore b/node_modules/tr46/.npmignore new file mode 100644 index 0000000..96e9161 --- /dev/null +++ b/node_modules/tr46/.npmignore @@ -0,0 +1,4 @@ +scripts/ +test/ + +!lib/mapping_table.json diff --git a/node_modules/tr46/index.js b/node_modules/tr46/index.js new file mode 100644 index 0000000..9ce12ca --- /dev/null +++ b/node_modules/tr46/index.js @@ -0,0 +1,193 @@ +"use strict"; + +var punycode = require("punycode"); +var mappingTable = require("./lib/mappingTable.json"); + +var PROCESSING_OPTIONS = { + TRANSITIONAL: 0, + NONTRANSITIONAL: 1 +}; + +function normalize(str) { // fix bug in v8 + return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000'); +} + +function findStatus(val) { + var start = 0; + var end = mappingTable.length - 1; + + while (start <= end) { + var mid = Math.floor((start + end) / 2); + + var target = mappingTable[mid]; + if (target[0][0] <= val && target[0][1] >= val) { + return target; + } else if (target[0][0] > val) { + end = mid - 1; + } else { + start = mid + 1; + } + } + + return null; +} + +var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + +function countSymbols(string) { + return string + // replace every surrogate pair with a BMP symbol + .replace(regexAstralSymbols, '_') + // then get the length + .length; +} + +function mapChars(domain_name, useSTD3, processing_option) { + var hasError = false; + var processed = ""; + + var len = countSymbols(domain_name); + for (var i = 0; i < len; ++i) { + var codePoint = domain_name.codePointAt(i); + var status = findStatus(codePoint); + + switch (status[1]) { + case "disallowed": + hasError = true; + processed += String.fromCodePoint(codePoint); + break; + case "ignored": + break; + case "mapped": + processed += String.fromCodePoint.apply(String, status[2]); + break; + case "deviation": + if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) { + processed += String.fromCodePoint.apply(String, status[2]); + } else { + processed += String.fromCodePoint(codePoint); + } + break; + case "valid": + processed += String.fromCodePoint(codePoint); + break; + case "disallowed_STD3_mapped": + if (useSTD3) { + hasError = true; + processed += String.fromCodePoint(codePoint); + } else { + processed += String.fromCodePoint.apply(String, status[2]); + } + break; + case "disallowed_STD3_valid": + if (useSTD3) { + hasError = true; + } + + processed += String.fromCodePoint(codePoint); + break; + } + } + + return { + string: processed, + error: hasError + }; +} + +var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/; + +function validateLabel(label, processing_option) { + if (label.substr(0, 4) === "xn--") { + label = punycode.toUnicode(label); + processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL; + } + + var error = false; + + if (normalize(label) !== label || + (label[3] === "-" && label[4] === "-") || + label[0] === "-" || label[label.length - 1] === "-" || + label.indexOf(".") !== -1 || + label.search(combiningMarksRegex) === 0) { + error = true; + } + + var len = countSymbols(label); + for (var i = 0; i < len; ++i) { + var status = findStatus(label.codePointAt(i)); + if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") || + (processing === PROCESSING_OPTIONS.NONTRANSITIONAL && + status[1] !== "valid" && status[1] !== "deviation")) { + error = true; + break; + } + } + + return { + label: label, + error: error + }; +} + +function processing(domain_name, useSTD3, processing_option) { + var result = mapChars(domain_name, useSTD3, processing_option); + result.string = normalize(result.string); + + var labels = result.string.split("."); + for (var i = 0; i < labels.length; ++i) { + try { + var validation = validateLabel(labels[i]); + labels[i] = validation.label; + result.error = result.error || validation.error; + } catch(e) { + result.error = true; + } + } + + return { + string: labels.join("."), + error: result.error + }; +} + +module.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) { + var result = processing(domain_name, useSTD3, processing_option); + var labels = result.string.split("."); + labels = labels.map(function(l) { + try { + return punycode.toASCII(l); + } catch(e) { + result.error = true; + return l; + } + }); + + if (verifyDnsLength) { + var total = labels.slice(0, labels.length - 1).join(".").length; + if (total.length > 253 || total.length === 0) { + result.error = true; + } + + for (var i=0; i < labels.length; ++i) { + if (labels.length > 63 || labels.length === 0) { + result.error = true; + break; + } + } + } + + if (result.error) return null; + return labels.join("."); +}; + +module.exports.toUnicode = function(domain_name, useSTD3) { + var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL); + + return { + domain: result.string, + error: result.error + }; +}; + +module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS; diff --git a/node_modules/tr46/lib/.gitkeep b/node_modules/tr46/lib/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/node_modules/tr46/lib/mappingTable.json b/node_modules/tr46/lib/mappingTable.json new file mode 100644 index 0000000..89cf19a --- /dev/null +++ b/node_modules/tr46/lib/mappingTable.json @@ -0,0 +1 @@ +[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]] \ No newline at end of file diff --git a/node_modules/tr46/package.json b/node_modules/tr46/package.json new file mode 100644 index 0000000..b6826da --- /dev/null +++ b/node_modules/tr46/package.json @@ -0,0 +1,31 @@ +{ + "name": "tr46", + "version": "0.0.3", + "description": "An implementation of the Unicode TR46 spec", + "main": "index.js", + "scripts": { + "test": "mocha", + "pretest": "node scripts/getLatestUnicodeTests.js", + "prepublish": "node scripts/generateMappingTable.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Sebmaster/tr46.js.git" + }, + "keywords": [ + "unicode", + "tr46", + "url", + "whatwg" + ], + "author": "Sebastian Mayr ", + "license": "MIT", + "bugs": { + "url": "https://github.com/Sebmaster/tr46.js/issues" + }, + "homepage": "https://github.com/Sebmaster/tr46.js#readme", + "devDependencies": { + "mocha": "^2.2.5", + "request": "^2.57.0" + } +} diff --git a/node_modules/webidl-conversions/LICENSE.md b/node_modules/webidl-conversions/LICENSE.md new file mode 100644 index 0000000..d4a994f --- /dev/null +++ b/node_modules/webidl-conversions/LICENSE.md @@ -0,0 +1,12 @@ +# The BSD 2-Clause License + +Copyright (c) 2014, Domenic Denicola +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/webidl-conversions/README.md b/node_modules/webidl-conversions/README.md new file mode 100644 index 0000000..3657890 --- /dev/null +++ b/node_modules/webidl-conversions/README.md @@ -0,0 +1,53 @@ +# WebIDL Type Conversions on JavaScript Values + +This package implements, in JavaScript, the algorithms to convert a given JavaScript value according to a given [WebIDL](http://heycam.github.io/webidl/) [type](http://heycam.github.io/webidl/#idl-types). + +The goal is that you should be able to write code like + +```js +const conversions = require("webidl-conversions"); + +function doStuff(x, y) { + x = conversions["boolean"](x); + y = conversions["unsigned long"](y); + // actual algorithm code here +} +``` + +and your function `doStuff` will behave the same as a WebIDL operation declared as + +```webidl +void doStuff(boolean x, unsigned long y); +``` + +## API + +This package's main module's default export is an object with a variety of methods, each corresponding to a different WebIDL type. Each method, when invoked on a JavaScript value, will give back the new JavaScript value that results after passing through the WebIDL conversion rules. (See below for more details on what that means.) Alternately, the method could throw an error, if the WebIDL algorithm is specified to do so: for example `conversions["float"](NaN)` [will throw a `TypeError`](http://heycam.github.io/webidl/#es-float). + +## Status + +All of the numeric types are implemented (float being implemented as double) and some others are as well - check the source for all of them. This list will grow over time in service of the [HTML as Custom Elements](https://github.com/dglazkov/html-as-custom-elements) project, but in the meantime, pull requests welcome! + +I'm not sure yet what the strategy will be for modifiers, e.g. [`[Clamp]`](http://heycam.github.io/webidl/#Clamp). Maybe something like `conversions["unsigned long"](x, { clamp: true })`? We'll see. + +We might also want to extend the API to give better error messages, e.g. "Argument 1 of HTMLMediaElement.fastSeek is not a finite floating-point value" instead of "Argument is not a finite floating-point value." This would require passing in more information to the conversion functions than we currently do. + +## Background + +What's actually going on here, conceptually, is pretty weird. Let's try to explain. + +WebIDL, as part of its madness-inducing design, has its own type system. When people write algorithms in web platform specs, they usually operate on WebIDL values, i.e. instances of WebIDL types. For example, if they were specifying the algorithm for our `doStuff` operation above, they would treat `x` as a WebIDL value of [WebIDL type `boolean`](http://heycam.github.io/webidl/#idl-boolean). Crucially, they would _not_ treat `x` as a JavaScript variable whose value is either the JavaScript `true` or `false`. They're instead working in a different type system altogether, with its own rules. + +Separately from its type system, WebIDL defines a ["binding"](http://heycam.github.io/webidl/#ecmascript-binding) of the type system into JavaScript. This contains rules like: when you pass a JavaScript value to the JavaScript method that manifests a given WebIDL operation, how does that get converted into a WebIDL value? For example, a JavaScript `true` passed in the position of a WebIDL `boolean` argument becomes a WebIDL `true`. But, a JavaScript `true` passed in the position of a [WebIDL `unsigned long`](http://heycam.github.io/webidl/#idl-unsigned-long) becomes a WebIDL `1`. And so on. + +Finally, we have the actual implementation code. This is usually C++, although these days [some smart people are using Rust](https://github.com/servo/servo). The implementation, of course, has its own type system. So when they implement the WebIDL algorithms, they don't actually use WebIDL values, since those aren't "real" outside of specs. Instead, implementations apply the WebIDL binding rules in such a way as to convert incoming JavaScript values into C++ values. For example, if code in the browser called `doStuff(true, true)`, then the implementation code would eventually receive a C++ `bool` containing `true` and a C++ `uint32_t` containing `1`. + +The upside of all this is that implementations can abstract all the conversion logic away, letting WebIDL handle it, and focus on implementing the relevant methods in C++ with values of the correct type already provided. That is payoff of WebIDL, in a nutshell. + +And getting to that payoff is the goal of _this_ project—but for JavaScript implementations, instead of C++ ones. That is, this library is designed to make it easier for JavaScript developers to write functions that behave like a given WebIDL operation. So conceptually, the conversion pipeline, which in its general form is JavaScript values ↦ WebIDL values ↦ implementation-language values, in this case becomes JavaScript values ↦ WebIDL values ↦ JavaScript values. And that intermediate step is where all the logic is performed: a JavaScript `true` becomes a WebIDL `1` in an unsigned long context, which then becomes a JavaScript `1`. + +## Don't Use This + +Seriously, why would you ever use this? You really shouldn't. WebIDL is … not great, and you shouldn't be emulating its semantics. If you're looking for a generic argument-processing library, you should find one with better rules than those from WebIDL. In general, your JavaScript should not be trying to become more like WebIDL; if anything, we should fix WebIDL to make it more like JavaScript. + +The _only_ people who should use this are those trying to create faithful implementations (or polyfills) of web platform interfaces defined in WebIDL. diff --git a/node_modules/webidl-conversions/lib/index.js b/node_modules/webidl-conversions/lib/index.js new file mode 100644 index 0000000..c5153a3 --- /dev/null +++ b/node_modules/webidl-conversions/lib/index.js @@ -0,0 +1,189 @@ +"use strict"; + +var conversions = {}; +module.exports = conversions; + +function sign(x) { + return x < 0 ? -1 : 1; +} + +function evenRound(x) { + // Round x to the nearest integer, choosing the even integer if it lies halfway between two. + if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor) + return Math.floor(x); + } else { + return Math.round(x); + } +} + +function createNumberConversion(bitLength, typeOpts) { + if (!typeOpts.unsigned) { + --bitLength; + } + const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength); + const upperBound = Math.pow(2, bitLength) - 1; + + const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength); + const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1); + + return function(V, opts) { + if (!opts) opts = {}; + + let x = +V; + + if (opts.enforceRange) { + if (!Number.isFinite(x)) { + throw new TypeError("Argument is not a finite number"); + } + + x = sign(x) * Math.floor(Math.abs(x)); + if (x < lowerBound || x > upperBound) { + throw new TypeError("Argument is not in byte range"); + } + + return x; + } + + if (!isNaN(x) && opts.clamp) { + x = evenRound(x); + + if (x < lowerBound) x = lowerBound; + if (x > upperBound) x = upperBound; + return x; + } + + if (!Number.isFinite(x) || x === 0) { + return 0; + } + + x = sign(x) * Math.floor(Math.abs(x)); + x = x % moduloVal; + + if (!typeOpts.unsigned && x >= moduloBound) { + return x - moduloVal; + } else if (typeOpts.unsigned) { + if (x < 0) { + x += moduloVal; + } else if (x === -0) { // don't return negative zero + return 0; + } + } + + return x; + } +} + +conversions["void"] = function () { + return undefined; +}; + +conversions["boolean"] = function (val) { + return !!val; +}; + +conversions["byte"] = createNumberConversion(8, { unsigned: false }); +conversions["octet"] = createNumberConversion(8, { unsigned: true }); + +conversions["short"] = createNumberConversion(16, { unsigned: false }); +conversions["unsigned short"] = createNumberConversion(16, { unsigned: true }); + +conversions["long"] = createNumberConversion(32, { unsigned: false }); +conversions["unsigned long"] = createNumberConversion(32, { unsigned: true }); + +conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 }); +conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 }); + +conversions["double"] = function (V) { + const x = +V; + + if (!Number.isFinite(x)) { + throw new TypeError("Argument is not a finite floating-point value"); + } + + return x; +}; + +conversions["unrestricted double"] = function (V) { + const x = +V; + + if (isNaN(x)) { + throw new TypeError("Argument is NaN"); + } + + return x; +}; + +// not quite valid, but good enough for JS +conversions["float"] = conversions["double"]; +conversions["unrestricted float"] = conversions["unrestricted double"]; + +conversions["DOMString"] = function (V, opts) { + if (!opts) opts = {}; + + if (opts.treatNullAsEmptyString && V === null) { + return ""; + } + + return String(V); +}; + +conversions["ByteString"] = function (V, opts) { + const x = String(V); + let c = undefined; + for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) { + if (c > 255) { + throw new TypeError("Argument is not a valid bytestring"); + } + } + + return x; +}; + +conversions["USVString"] = function (V) { + const S = String(V); + const n = S.length; + const U = []; + for (let i = 0; i < n; ++i) { + const c = S.charCodeAt(i); + if (c < 0xD800 || c > 0xDFFF) { + U.push(String.fromCodePoint(c)); + } else if (0xDC00 <= c && c <= 0xDFFF) { + U.push(String.fromCodePoint(0xFFFD)); + } else { + if (i === n - 1) { + U.push(String.fromCodePoint(0xFFFD)); + } else { + const d = S.charCodeAt(i + 1); + if (0xDC00 <= d && d <= 0xDFFF) { + const a = c & 0x3FF; + const b = d & 0x3FF; + U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b)); + ++i; + } else { + U.push(String.fromCodePoint(0xFFFD)); + } + } + } + } + + return U.join(''); +}; + +conversions["Date"] = function (V, opts) { + if (!(V instanceof Date)) { + throw new TypeError("Argument is not a Date object"); + } + if (isNaN(V)) { + return undefined; + } + + return V; +}; + +conversions["RegExp"] = function (V, opts) { + if (!(V instanceof RegExp)) { + V = new RegExp(V); + } + + return V; +}; diff --git a/node_modules/webidl-conversions/package.json b/node_modules/webidl-conversions/package.json new file mode 100644 index 0000000..c31bc07 --- /dev/null +++ b/node_modules/webidl-conversions/package.json @@ -0,0 +1,23 @@ +{ + "name": "webidl-conversions", + "version": "3.0.1", + "description": "Implements the WebIDL algorithms for converting to and from JavaScript values", + "main": "lib/index.js", + "scripts": { + "test": "mocha test/*.js" + }, + "repository": "jsdom/webidl-conversions", + "keywords": [ + "webidl", + "web", + "types" + ], + "files": [ + "lib/" + ], + "author": "Domenic Denicola (https://domenic.me/)", + "license": "BSD-2-Clause", + "devDependencies": { + "mocha": "^1.21.4" + } +} diff --git a/node_modules/whatwg-url/LICENSE.txt b/node_modules/whatwg-url/LICENSE.txt new file mode 100644 index 0000000..54dfac3 --- /dev/null +++ b/node_modules/whatwg-url/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015–2016 Sebastian Mayr + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/whatwg-url/README.md b/node_modules/whatwg-url/README.md new file mode 100644 index 0000000..4347a7f --- /dev/null +++ b/node_modules/whatwg-url/README.md @@ -0,0 +1,67 @@ +# whatwg-url + +whatwg-url is a full implementation of the WHATWG [URL Standard](https://url.spec.whatwg.org/). It can be used standalone, but it also exposes a lot of the internal algorithms that are useful for integrating a URL parser into a project like [jsdom](https://github.com/tmpvar/jsdom). + +## Current Status + +whatwg-url is currently up to date with the URL spec up to commit [a62223](https://github.com/whatwg/url/commit/a622235308342c9adc7fc2fd1659ff059f7d5e2a). + +## API + +### The `URL` Constructor + +The main API is the [`URL`](https://url.spec.whatwg.org/#url) export, which follows the spec's behavior in all ways (including e.g. `USVString` conversion). Most consumers of this library will want to use this. + +### Low-level URL Standard API + +The following methods are exported for use by places like jsdom that need to implement things like [`HTMLHyperlinkElementUtils`](https://html.spec.whatwg.org/#htmlhyperlinkelementutils). They operate on or return an "internal URL" or ["URL record"](https://url.spec.whatwg.org/#concept-url) type. + +- [URL parser](https://url.spec.whatwg.org/#concept-url-parser): `parseURL(input, { baseURL, encodingOverride })` +- [Basic URL parser](https://url.spec.whatwg.org/#concept-basic-url-parser): `basicURLParse(input, { baseURL, encodingOverride, url, stateOverride })` +- [URL serializer](https://url.spec.whatwg.org/#concept-url-serializer): `serializeURL(urlRecord, excludeFragment)` +- [Host serializer](https://url.spec.whatwg.org/#concept-host-serializer): `serializeHost(hostFromURLRecord)` +- [Serialize an integer](https://url.spec.whatwg.org/#serialize-an-integer): `serializeInteger(number)` +- [Origin](https://url.spec.whatwg.org/#concept-url-origin) [serializer](https://html.spec.whatwg.org/multipage/browsers.html#serialization-of-an-origin): `serializeURLOrigin(urlRecord)` +- [Set the username](https://url.spec.whatwg.org/#set-the-username): `setTheUsername(urlRecord, usernameString)` +- [Set the password](https://url.spec.whatwg.org/#set-the-password): `setThePassword(urlRecord, passwordString)` +- [Cannot have a username/password/port](https://url.spec.whatwg.org/#cannot-have-a-username-password-port): `cannotHaveAUsernamePasswordPort(urlRecord)` + +The `stateOverride` parameter is one of the following strings: + +- [`"scheme start"`](https://url.spec.whatwg.org/#scheme-start-state) +- [`"scheme"`](https://url.spec.whatwg.org/#scheme-state) +- [`"no scheme"`](https://url.spec.whatwg.org/#no-scheme-state) +- [`"special relative or authority"`](https://url.spec.whatwg.org/#special-relative-or-authority-state) +- [`"path or authority"`](https://url.spec.whatwg.org/#path-or-authority-state) +- [`"relative"`](https://url.spec.whatwg.org/#relative-state) +- [`"relative slash"`](https://url.spec.whatwg.org/#relative-slash-state) +- [`"special authority slashes"`](https://url.spec.whatwg.org/#special-authority-slashes-state) +- [`"special authority ignore slashes"`](https://url.spec.whatwg.org/#special-authority-ignore-slashes-state) +- [`"authority"`](https://url.spec.whatwg.org/#authority-state) +- [`"host"`](https://url.spec.whatwg.org/#host-state) +- [`"hostname"`](https://url.spec.whatwg.org/#hostname-state) +- [`"port"`](https://url.spec.whatwg.org/#port-state) +- [`"file"`](https://url.spec.whatwg.org/#file-state) +- [`"file slash"`](https://url.spec.whatwg.org/#file-slash-state) +- [`"file host"`](https://url.spec.whatwg.org/#file-host-state) +- [`"path start"`](https://url.spec.whatwg.org/#path-start-state) +- [`"path"`](https://url.spec.whatwg.org/#path-state) +- [`"cannot-be-a-base-URL path"`](https://url.spec.whatwg.org/#cannot-be-a-base-url-path-state) +- [`"query"`](https://url.spec.whatwg.org/#query-state) +- [`"fragment"`](https://url.spec.whatwg.org/#fragment-state) + +The URL record type has the following API: + +- [`scheme`](https://url.spec.whatwg.org/#concept-url-scheme) +- [`username`](https://url.spec.whatwg.org/#concept-url-username) +- [`password`](https://url.spec.whatwg.org/#concept-url-password) +- [`host`](https://url.spec.whatwg.org/#concept-url-host) +- [`port`](https://url.spec.whatwg.org/#concept-url-port) +- [`path`](https://url.spec.whatwg.org/#concept-url-path) (as an array) +- [`query`](https://url.spec.whatwg.org/#concept-url-query) +- [`fragment`](https://url.spec.whatwg.org/#concept-url-fragment) +- [`cannotBeABaseURL`](https://url.spec.whatwg.org/#url-cannot-be-a-base-url-flag) (as a boolean) + +These properties should be treated with care, as in general changing them will cause the URL record to be in an inconsistent state until the appropriate invocation of `basicURLParse` is used to fix it up. You can see examples of this in the URL Standard, where there are many step sequences like "4. Set context object’s url’s fragment to the empty string. 5. Basic URL parse _input_ with context object’s url as _url_ and fragment state as _state override_." In between those two steps, a URL record is in an unusable state. + +The return value of "failure" in the spec is represented by the string `"failure"`. That is, functions like `parseURL` and `basicURLParse` can return _either_ a URL record _or_ the string `"failure"`. diff --git a/node_modules/whatwg-url/lib/URL-impl.js b/node_modules/whatwg-url/lib/URL-impl.js new file mode 100644 index 0000000..dc7452c --- /dev/null +++ b/node_modules/whatwg-url/lib/URL-impl.js @@ -0,0 +1,200 @@ +"use strict"; +const usm = require("./url-state-machine"); + +exports.implementation = class URLImpl { + constructor(constructorArgs) { + const url = constructorArgs[0]; + const base = constructorArgs[1]; + + let parsedBase = null; + if (base !== undefined) { + parsedBase = usm.basicURLParse(base); + if (parsedBase === "failure") { + throw new TypeError("Invalid base URL"); + } + } + + const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase }); + if (parsedURL === "failure") { + throw new TypeError("Invalid URL"); + } + + this._url = parsedURL; + + // TODO: query stuff + } + + get href() { + return usm.serializeURL(this._url); + } + + set href(v) { + const parsedURL = usm.basicURLParse(v); + if (parsedURL === "failure") { + throw new TypeError("Invalid URL"); + } + + this._url = parsedURL; + } + + get origin() { + return usm.serializeURLOrigin(this._url); + } + + get protocol() { + return this._url.scheme + ":"; + } + + set protocol(v) { + usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" }); + } + + get username() { + return this._url.username; + } + + set username(v) { + if (usm.cannotHaveAUsernamePasswordPort(this._url)) { + return; + } + + usm.setTheUsername(this._url, v); + } + + get password() { + return this._url.password; + } + + set password(v) { + if (usm.cannotHaveAUsernamePasswordPort(this._url)) { + return; + } + + usm.setThePassword(this._url, v); + } + + get host() { + const url = this._url; + + if (url.host === null) { + return ""; + } + + if (url.port === null) { + return usm.serializeHost(url.host); + } + + return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port); + } + + set host(v) { + if (this._url.cannotBeABaseURL) { + return; + } + + usm.basicURLParse(v, { url: this._url, stateOverride: "host" }); + } + + get hostname() { + if (this._url.host === null) { + return ""; + } + + return usm.serializeHost(this._url.host); + } + + set hostname(v) { + if (this._url.cannotBeABaseURL) { + return; + } + + usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" }); + } + + get port() { + if (this._url.port === null) { + return ""; + } + + return usm.serializeInteger(this._url.port); + } + + set port(v) { + if (usm.cannotHaveAUsernamePasswordPort(this._url)) { + return; + } + + if (v === "") { + this._url.port = null; + } else { + usm.basicURLParse(v, { url: this._url, stateOverride: "port" }); + } + } + + get pathname() { + if (this._url.cannotBeABaseURL) { + return this._url.path[0]; + } + + if (this._url.path.length === 0) { + return ""; + } + + return "/" + this._url.path.join("/"); + } + + set pathname(v) { + if (this._url.cannotBeABaseURL) { + return; + } + + this._url.path = []; + usm.basicURLParse(v, { url: this._url, stateOverride: "path start" }); + } + + get search() { + if (this._url.query === null || this._url.query === "") { + return ""; + } + + return "?" + this._url.query; + } + + set search(v) { + // TODO: query stuff + + const url = this._url; + + if (v === "") { + url.query = null; + return; + } + + const input = v[0] === "?" ? v.substring(1) : v; + url.query = ""; + usm.basicURLParse(input, { url, stateOverride: "query" }); + } + + get hash() { + if (this._url.fragment === null || this._url.fragment === "") { + return ""; + } + + return "#" + this._url.fragment; + } + + set hash(v) { + if (v === "") { + this._url.fragment = null; + return; + } + + const input = v[0] === "#" ? v.substring(1) : v; + this._url.fragment = ""; + usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" }); + } + + toJSON() { + return this.href; + } +}; diff --git a/node_modules/whatwg-url/lib/URL.js b/node_modules/whatwg-url/lib/URL.js new file mode 100644 index 0000000..78c7207 --- /dev/null +++ b/node_modules/whatwg-url/lib/URL.js @@ -0,0 +1,196 @@ +"use strict"; + +const conversions = require("webidl-conversions"); +const utils = require("./utils.js"); +const Impl = require(".//URL-impl.js"); + +const impl = utils.implSymbol; + +function URL(url) { + if (!this || this[impl] || !(this instanceof URL)) { + throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function."); + } + if (arguments.length < 1) { + throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present."); + } + const args = []; + for (let i = 0; i < arguments.length && i < 2; ++i) { + args[i] = arguments[i]; + } + args[0] = conversions["USVString"](args[0]); + if (args[1] !== undefined) { + args[1] = conversions["USVString"](args[1]); + } + + module.exports.setup(this, args); +} + +URL.prototype.toJSON = function toJSON() { + if (!this || !module.exports.is(this)) { + throw new TypeError("Illegal invocation"); + } + const args = []; + for (let i = 0; i < arguments.length && i < 0; ++i) { + args[i] = arguments[i]; + } + return this[impl].toJSON.apply(this[impl], args); +}; +Object.defineProperty(URL.prototype, "href", { + get() { + return this[impl].href; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].href = V; + }, + enumerable: true, + configurable: true +}); + +URL.prototype.toString = function () { + if (!this || !module.exports.is(this)) { + throw new TypeError("Illegal invocation"); + } + return this.href; +}; + +Object.defineProperty(URL.prototype, "origin", { + get() { + return this[impl].origin; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "protocol", { + get() { + return this[impl].protocol; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].protocol = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "username", { + get() { + return this[impl].username; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].username = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "password", { + get() { + return this[impl].password; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].password = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "host", { + get() { + return this[impl].host; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].host = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "hostname", { + get() { + return this[impl].hostname; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].hostname = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "port", { + get() { + return this[impl].port; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].port = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "pathname", { + get() { + return this[impl].pathname; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].pathname = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "search", { + get() { + return this[impl].search; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].search = V; + }, + enumerable: true, + configurable: true +}); + +Object.defineProperty(URL.prototype, "hash", { + get() { + return this[impl].hash; + }, + set(V) { + V = conversions["USVString"](V); + this[impl].hash = V; + }, + enumerable: true, + configurable: true +}); + + +module.exports = { + is(obj) { + return !!obj && obj[impl] instanceof Impl.implementation; + }, + create(constructorArgs, privateData) { + let obj = Object.create(URL.prototype); + this.setup(obj, constructorArgs, privateData); + return obj; + }, + setup(obj, constructorArgs, privateData) { + if (!privateData) privateData = {}; + privateData.wrapper = obj; + + obj[impl] = new Impl.implementation(constructorArgs, privateData); + obj[impl][utils.wrapperSymbol] = obj; + }, + interface: URL, + expose: { + Window: { URL: URL }, + Worker: { URL: URL } + } +}; + diff --git a/node_modules/whatwg-url/lib/public-api.js b/node_modules/whatwg-url/lib/public-api.js new file mode 100644 index 0000000..932dcad --- /dev/null +++ b/node_modules/whatwg-url/lib/public-api.js @@ -0,0 +1,11 @@ +"use strict"; + +exports.URL = require("./URL").interface; +exports.serializeURL = require("./url-state-machine").serializeURL; +exports.serializeURLOrigin = require("./url-state-machine").serializeURLOrigin; +exports.basicURLParse = require("./url-state-machine").basicURLParse; +exports.setTheUsername = require("./url-state-machine").setTheUsername; +exports.setThePassword = require("./url-state-machine").setThePassword; +exports.serializeHost = require("./url-state-machine").serializeHost; +exports.serializeInteger = require("./url-state-machine").serializeInteger; +exports.parseURL = require("./url-state-machine").parseURL; diff --git a/node_modules/whatwg-url/lib/url-state-machine.js b/node_modules/whatwg-url/lib/url-state-machine.js new file mode 100644 index 0000000..c25dbc2 --- /dev/null +++ b/node_modules/whatwg-url/lib/url-state-machine.js @@ -0,0 +1,1297 @@ +"use strict"; +const punycode = require("punycode"); +const tr46 = require("tr46"); + +const specialSchemes = { + ftp: 21, + file: null, + gopher: 70, + http: 80, + https: 443, + ws: 80, + wss: 443 +}; + +const failure = Symbol("failure"); + +function countSymbols(str) { + return punycode.ucs2.decode(str).length; +} + +function at(input, idx) { + const c = input[idx]; + return isNaN(c) ? undefined : String.fromCodePoint(c); +} + +function isASCIIDigit(c) { + return c >= 0x30 && c <= 0x39; +} + +function isASCIIAlpha(c) { + return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A); +} + +function isASCIIAlphanumeric(c) { + return isASCIIAlpha(c) || isASCIIDigit(c); +} + +function isASCIIHex(c) { + return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66); +} + +function isSingleDot(buffer) { + return buffer === "." || buffer.toLowerCase() === "%2e"; +} + +function isDoubleDot(buffer) { + buffer = buffer.toLowerCase(); + return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e"; +} + +function isWindowsDriveLetterCodePoints(cp1, cp2) { + return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124); +} + +function isWindowsDriveLetterString(string) { + return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|"); +} + +function isNormalizedWindowsDriveLetterString(string) { + return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":"; +} + +function containsForbiddenHostCodePoint(string) { + return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1; +} + +function containsForbiddenHostCodePointExcludingPercent(string) { + return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1; +} + +function isSpecialScheme(scheme) { + return specialSchemes[scheme] !== undefined; +} + +function isSpecial(url) { + return isSpecialScheme(url.scheme); +} + +function defaultPort(scheme) { + return specialSchemes[scheme]; +} + +function percentEncode(c) { + let hex = c.toString(16).toUpperCase(); + if (hex.length === 1) { + hex = "0" + hex; + } + + return "%" + hex; +} + +function utf8PercentEncode(c) { + const buf = new Buffer(c); + + let str = ""; + + for (let i = 0; i < buf.length; ++i) { + str += percentEncode(buf[i]); + } + + return str; +} + +function utf8PercentDecode(str) { + const input = new Buffer(str); + const output = []; + for (let i = 0; i < input.length; ++i) { + if (input[i] !== 37) { + output.push(input[i]); + } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) { + output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16)); + i += 2; + } else { + output.push(input[i]); + } + } + return new Buffer(output).toString(); +} + +function isC0ControlPercentEncode(c) { + return c <= 0x1F || c > 0x7E; +} + +const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]); +function isPathPercentEncode(c) { + return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c); +} + +const extraUserinfoPercentEncodeSet = + new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]); +function isUserinfoPercentEncode(c) { + return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c); +} + +function percentEncodeChar(c, encodeSetPredicate) { + const cStr = String.fromCodePoint(c); + + if (encodeSetPredicate(c)) { + return utf8PercentEncode(cStr); + } + + return cStr; +} + +function parseIPv4Number(input) { + let R = 10; + + if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") { + input = input.substring(2); + R = 16; + } else if (input.length >= 2 && input.charAt(0) === "0") { + input = input.substring(1); + R = 8; + } + + if (input === "") { + return 0; + } + + const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/); + if (regex.test(input)) { + return failure; + } + + return parseInt(input, R); +} + +function parseIPv4(input) { + const parts = input.split("."); + if (parts[parts.length - 1] === "") { + if (parts.length > 1) { + parts.pop(); + } + } + + if (parts.length > 4) { + return input; + } + + const numbers = []; + for (const part of parts) { + if (part === "") { + return input; + } + const n = parseIPv4Number(part); + if (n === failure) { + return input; + } + + numbers.push(n); + } + + for (let i = 0; i < numbers.length - 1; ++i) { + if (numbers[i] > 255) { + return failure; + } + } + if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) { + return failure; + } + + let ipv4 = numbers.pop(); + let counter = 0; + + for (const n of numbers) { + ipv4 += n * Math.pow(256, 3 - counter); + ++counter; + } + + return ipv4; +} + +function serializeIPv4(address) { + let output = ""; + let n = address; + + for (let i = 1; i <= 4; ++i) { + output = String(n % 256) + output; + if (i !== 4) { + output = "." + output; + } + n = Math.floor(n / 256); + } + + return output; +} + +function parseIPv6(input) { + const address = [0, 0, 0, 0, 0, 0, 0, 0]; + let pieceIndex = 0; + let compress = null; + let pointer = 0; + + input = punycode.ucs2.decode(input); + + if (input[pointer] === 58) { + if (input[pointer + 1] !== 58) { + return failure; + } + + pointer += 2; + ++pieceIndex; + compress = pieceIndex; + } + + while (pointer < input.length) { + if (pieceIndex === 8) { + return failure; + } + + if (input[pointer] === 58) { + if (compress !== null) { + return failure; + } + ++pointer; + ++pieceIndex; + compress = pieceIndex; + continue; + } + + let value = 0; + let length = 0; + + while (length < 4 && isASCIIHex(input[pointer])) { + value = value * 0x10 + parseInt(at(input, pointer), 16); + ++pointer; + ++length; + } + + if (input[pointer] === 46) { + if (length === 0) { + return failure; + } + + pointer -= length; + + if (pieceIndex > 6) { + return failure; + } + + let numbersSeen = 0; + + while (input[pointer] !== undefined) { + let ipv4Piece = null; + + if (numbersSeen > 0) { + if (input[pointer] === 46 && numbersSeen < 4) { + ++pointer; + } else { + return failure; + } + } + + if (!isASCIIDigit(input[pointer])) { + return failure; + } + + while (isASCIIDigit(input[pointer])) { + const number = parseInt(at(input, pointer)); + if (ipv4Piece === null) { + ipv4Piece = number; + } else if (ipv4Piece === 0) { + return failure; + } else { + ipv4Piece = ipv4Piece * 10 + number; + } + if (ipv4Piece > 255) { + return failure; + } + ++pointer; + } + + address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece; + + ++numbersSeen; + + if (numbersSeen === 2 || numbersSeen === 4) { + ++pieceIndex; + } + } + + if (numbersSeen !== 4) { + return failure; + } + + break; + } else if (input[pointer] === 58) { + ++pointer; + if (input[pointer] === undefined) { + return failure; + } + } else if (input[pointer] !== undefined) { + return failure; + } + + address[pieceIndex] = value; + ++pieceIndex; + } + + if (compress !== null) { + let swaps = pieceIndex - compress; + pieceIndex = 7; + while (pieceIndex !== 0 && swaps > 0) { + const temp = address[compress + swaps - 1]; + address[compress + swaps - 1] = address[pieceIndex]; + address[pieceIndex] = temp; + --pieceIndex; + --swaps; + } + } else if (compress === null && pieceIndex !== 8) { + return failure; + } + + return address; +} + +function serializeIPv6(address) { + let output = ""; + const seqResult = findLongestZeroSequence(address); + const compress = seqResult.idx; + let ignore0 = false; + + for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) { + if (ignore0 && address[pieceIndex] === 0) { + continue; + } else if (ignore0) { + ignore0 = false; + } + + if (compress === pieceIndex) { + const separator = pieceIndex === 0 ? "::" : ":"; + output += separator; + ignore0 = true; + continue; + } + + output += address[pieceIndex].toString(16); + + if (pieceIndex !== 7) { + output += ":"; + } + } + + return output; +} + +function parseHost(input, isSpecialArg) { + if (input[0] === "[") { + if (input[input.length - 1] !== "]") { + return failure; + } + + return parseIPv6(input.substring(1, input.length - 1)); + } + + if (!isSpecialArg) { + return parseOpaqueHost(input); + } + + const domain = utf8PercentDecode(input); + const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false); + if (asciiDomain === null) { + return failure; + } + + if (containsForbiddenHostCodePoint(asciiDomain)) { + return failure; + } + + const ipv4Host = parseIPv4(asciiDomain); + if (typeof ipv4Host === "number" || ipv4Host === failure) { + return ipv4Host; + } + + return asciiDomain; +} + +function parseOpaqueHost(input) { + if (containsForbiddenHostCodePointExcludingPercent(input)) { + return failure; + } + + let output = ""; + const decoded = punycode.ucs2.decode(input); + for (let i = 0; i < decoded.length; ++i) { + output += percentEncodeChar(decoded[i], isC0ControlPercentEncode); + } + return output; +} + +function findLongestZeroSequence(arr) { + let maxIdx = null; + let maxLen = 1; // only find elements > 1 + let currStart = null; + let currLen = 0; + + for (let i = 0; i < arr.length; ++i) { + if (arr[i] !== 0) { + if (currLen > maxLen) { + maxIdx = currStart; + maxLen = currLen; + } + + currStart = null; + currLen = 0; + } else { + if (currStart === null) { + currStart = i; + } + ++currLen; + } + } + + // if trailing zeros + if (currLen > maxLen) { + maxIdx = currStart; + maxLen = currLen; + } + + return { + idx: maxIdx, + len: maxLen + }; +} + +function serializeHost(host) { + if (typeof host === "number") { + return serializeIPv4(host); + } + + // IPv6 serializer + if (host instanceof Array) { + return "[" + serializeIPv6(host) + "]"; + } + + return host; +} + +function trimControlChars(url) { + return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, ""); +} + +function trimTabAndNewline(url) { + return url.replace(/\u0009|\u000A|\u000D/g, ""); +} + +function shortenPath(url) { + const path = url.path; + if (path.length === 0) { + return; + } + if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) { + return; + } + + path.pop(); +} + +function includesCredentials(url) { + return url.username !== "" || url.password !== ""; +} + +function cannotHaveAUsernamePasswordPort(url) { + return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file"; +} + +function isNormalizedWindowsDriveLetter(string) { + return /^[A-Za-z]:$/.test(string); +} + +function URLStateMachine(input, base, encodingOverride, url, stateOverride) { + this.pointer = 0; + this.input = input; + this.base = base || null; + this.encodingOverride = encodingOverride || "utf-8"; + this.stateOverride = stateOverride; + this.url = url; + this.failure = false; + this.parseError = false; + + if (!this.url) { + this.url = { + scheme: "", + username: "", + password: "", + host: null, + port: null, + path: [], + query: null, + fragment: null, + + cannotBeABaseURL: false + }; + + const res = trimControlChars(this.input); + if (res !== this.input) { + this.parseError = true; + } + this.input = res; + } + + const res = trimTabAndNewline(this.input); + if (res !== this.input) { + this.parseError = true; + } + this.input = res; + + this.state = stateOverride || "scheme start"; + + this.buffer = ""; + this.atFlag = false; + this.arrFlag = false; + this.passwordTokenSeenFlag = false; + + this.input = punycode.ucs2.decode(this.input); + + for (; this.pointer <= this.input.length; ++this.pointer) { + const c = this.input[this.pointer]; + const cStr = isNaN(c) ? undefined : String.fromCodePoint(c); + + // exec state machine + const ret = this["parse " + this.state](c, cStr); + if (!ret) { + break; // terminate algorithm + } else if (ret === failure) { + this.failure = true; + break; + } + } +} + +URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) { + if (isASCIIAlpha(c)) { + this.buffer += cStr.toLowerCase(); + this.state = "scheme"; + } else if (!this.stateOverride) { + this.state = "no scheme"; + --this.pointer; + } else { + this.parseError = true; + return failure; + } + + return true; +}; + +URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) { + if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) { + this.buffer += cStr.toLowerCase(); + } else if (c === 58) { + if (this.stateOverride) { + if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) { + return false; + } + + if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) { + return false; + } + + if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") { + return false; + } + + if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) { + return false; + } + } + this.url.scheme = this.buffer; + this.buffer = ""; + if (this.stateOverride) { + return false; + } + if (this.url.scheme === "file") { + if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) { + this.parseError = true; + } + this.state = "file"; + } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) { + this.state = "special relative or authority"; + } else if (isSpecial(this.url)) { + this.state = "special authority slashes"; + } else if (this.input[this.pointer + 1] === 47) { + this.state = "path or authority"; + ++this.pointer; + } else { + this.url.cannotBeABaseURL = true; + this.url.path.push(""); + this.state = "cannot-be-a-base-URL path"; + } + } else if (!this.stateOverride) { + this.buffer = ""; + this.state = "no scheme"; + this.pointer = -1; + } else { + this.parseError = true; + return failure; + } + + return true; +}; + +URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) { + if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) { + return failure; + } else if (this.base.cannotBeABaseURL && c === 35) { + this.url.scheme = this.base.scheme; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + this.url.fragment = ""; + this.url.cannotBeABaseURL = true; + this.state = "fragment"; + } else if (this.base.scheme === "file") { + this.state = "file"; + --this.pointer; + } else { + this.state = "relative"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) { + if (c === 47 && this.input[this.pointer + 1] === 47) { + this.state = "special authority ignore slashes"; + ++this.pointer; + } else { + this.parseError = true; + this.state = "relative"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) { + if (c === 47) { + this.state = "authority"; + } else { + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse relative"] = function parseRelative(c) { + this.url.scheme = this.base.scheme; + if (isNaN(c)) { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + } else if (c === 47) { + this.state = "relative slash"; + } else if (c === 63) { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(); + this.url.query = ""; + this.state = "query"; + } else if (c === 35) { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + this.url.fragment = ""; + this.state = "fragment"; + } else if (isSpecial(this.url) && c === 92) { + this.parseError = true; + this.state = "relative slash"; + } else { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.url.path = this.base.path.slice(0, this.base.path.length - 1); + + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) { + if (isSpecial(this.url) && (c === 47 || c === 92)) { + if (c === 92) { + this.parseError = true; + } + this.state = "special authority ignore slashes"; + } else if (c === 47) { + this.state = "authority"; + } else { + this.url.username = this.base.username; + this.url.password = this.base.password; + this.url.host = this.base.host; + this.url.port = this.base.port; + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) { + if (c === 47 && this.input[this.pointer + 1] === 47) { + this.state = "special authority ignore slashes"; + ++this.pointer; + } else { + this.parseError = true; + this.state = "special authority ignore slashes"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) { + if (c !== 47 && c !== 92) { + this.state = "authority"; + --this.pointer; + } else { + this.parseError = true; + } + + return true; +}; + +URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) { + if (c === 64) { + this.parseError = true; + if (this.atFlag) { + this.buffer = "%40" + this.buffer; + } + this.atFlag = true; + + // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars + const len = countSymbols(this.buffer); + for (let pointer = 0; pointer < len; ++pointer) { + const codePoint = this.buffer.codePointAt(pointer); + + if (codePoint === 58 && !this.passwordTokenSeenFlag) { + this.passwordTokenSeenFlag = true; + continue; + } + const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode); + if (this.passwordTokenSeenFlag) { + this.url.password += encodedCodePoints; + } else { + this.url.username += encodedCodePoints; + } + } + this.buffer = ""; + } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || + (isSpecial(this.url) && c === 92)) { + if (this.atFlag && this.buffer === "") { + this.parseError = true; + return failure; + } + this.pointer -= countSymbols(this.buffer) + 1; + this.buffer = ""; + this.state = "host"; + } else { + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse hostname"] = +URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) { + if (this.stateOverride && this.url.scheme === "file") { + --this.pointer; + this.state = "file host"; + } else if (c === 58 && !this.arrFlag) { + if (this.buffer === "") { + this.parseError = true; + return failure; + } + + const host = parseHost(this.buffer, isSpecial(this.url)); + if (host === failure) { + return failure; + } + + this.url.host = host; + this.buffer = ""; + this.state = "port"; + if (this.stateOverride === "hostname") { + return false; + } + } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || + (isSpecial(this.url) && c === 92)) { + --this.pointer; + if (isSpecial(this.url) && this.buffer === "") { + this.parseError = true; + return failure; + } else if (this.stateOverride && this.buffer === "" && + (includesCredentials(this.url) || this.url.port !== null)) { + this.parseError = true; + return false; + } + + const host = parseHost(this.buffer, isSpecial(this.url)); + if (host === failure) { + return failure; + } + + this.url.host = host; + this.buffer = ""; + this.state = "path start"; + if (this.stateOverride) { + return false; + } + } else { + if (c === 91) { + this.arrFlag = true; + } else if (c === 93) { + this.arrFlag = false; + } + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) { + if (isASCIIDigit(c)) { + this.buffer += cStr; + } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || + (isSpecial(this.url) && c === 92) || + this.stateOverride) { + if (this.buffer !== "") { + const port = parseInt(this.buffer); + if (port > Math.pow(2, 16) - 1) { + this.parseError = true; + return failure; + } + this.url.port = port === defaultPort(this.url.scheme) ? null : port; + this.buffer = ""; + } + if (this.stateOverride) { + return false; + } + this.state = "path start"; + --this.pointer; + } else { + this.parseError = true; + return failure; + } + + return true; +}; + +const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]); + +URLStateMachine.prototype["parse file"] = function parseFile(c) { + this.url.scheme = "file"; + + if (c === 47 || c === 92) { + if (c === 92) { + this.parseError = true; + } + this.state = "file slash"; + } else if (this.base !== null && this.base.scheme === "file") { + if (isNaN(c)) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + } else if (c === 63) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + this.url.query = ""; + this.state = "query"; + } else if (c === 35) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + this.url.query = this.base.query; + this.url.fragment = ""; + this.state = "fragment"; + } else { + if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points + !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) || + (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points + !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) { + this.url.host = this.base.host; + this.url.path = this.base.path.slice(); + shortenPath(this.url); + } else { + this.parseError = true; + } + + this.state = "path"; + --this.pointer; + } + } else { + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) { + if (c === 47 || c === 92) { + if (c === 92) { + this.parseError = true; + } + this.state = "file host"; + } else { + if (this.base !== null && this.base.scheme === "file") { + if (isNormalizedWindowsDriveLetterString(this.base.path[0])) { + this.url.path.push(this.base.path[0]); + } else { + this.url.host = this.base.host; + } + } + this.state = "path"; + --this.pointer; + } + + return true; +}; + +URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) { + if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) { + --this.pointer; + if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) { + this.parseError = true; + this.state = "path"; + } else if (this.buffer === "") { + this.url.host = ""; + if (this.stateOverride) { + return false; + } + this.state = "path start"; + } else { + let host = parseHost(this.buffer, isSpecial(this.url)); + if (host === failure) { + return failure; + } + if (host === "localhost") { + host = ""; + } + this.url.host = host; + + if (this.stateOverride) { + return false; + } + + this.buffer = ""; + this.state = "path start"; + } + } else { + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse path start"] = function parsePathStart(c) { + if (isSpecial(this.url)) { + if (c === 92) { + this.parseError = true; + } + this.state = "path"; + + if (c !== 47 && c !== 92) { + --this.pointer; + } + } else if (!this.stateOverride && c === 63) { + this.url.query = ""; + this.state = "query"; + } else if (!this.stateOverride && c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } else if (c !== undefined) { + this.state = "path"; + if (c !== 47) { + --this.pointer; + } + } + + return true; +}; + +URLStateMachine.prototype["parse path"] = function parsePath(c) { + if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) || + (!this.stateOverride && (c === 63 || c === 35))) { + if (isSpecial(this.url) && c === 92) { + this.parseError = true; + } + + if (isDoubleDot(this.buffer)) { + shortenPath(this.url); + if (c !== 47 && !(isSpecial(this.url) && c === 92)) { + this.url.path.push(""); + } + } else if (isSingleDot(this.buffer) && c !== 47 && + !(isSpecial(this.url) && c === 92)) { + this.url.path.push(""); + } else if (!isSingleDot(this.buffer)) { + if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) { + if (this.url.host !== "" && this.url.host !== null) { + this.parseError = true; + this.url.host = ""; + } + this.buffer = this.buffer[0] + ":"; + } + this.url.path.push(this.buffer); + } + this.buffer = ""; + if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) { + while (this.url.path.length > 1 && this.url.path[0] === "") { + this.parseError = true; + this.url.path.shift(); + } + } + if (c === 63) { + this.url.query = ""; + this.state = "query"; + } + if (c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } + } else { + // TODO: If c is not a URL code point and not "%", parse error. + + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + this.buffer += percentEncodeChar(c, isPathPercentEncode); + } + + return true; +}; + +URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) { + if (c === 63) { + this.url.query = ""; + this.state = "query"; + } else if (c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } else { + // TODO: Add: not a URL code point + if (!isNaN(c) && c !== 37) { + this.parseError = true; + } + + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + if (!isNaN(c)) { + this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode); + } + } + + return true; +}; + +URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) { + if (isNaN(c) || (!this.stateOverride && c === 35)) { + if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") { + this.encodingOverride = "utf-8"; + } + + const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead + for (let i = 0; i < buffer.length; ++i) { + if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 || + buffer[i] === 0x3C || buffer[i] === 0x3E) { + this.url.query += percentEncode(buffer[i]); + } else { + this.url.query += String.fromCodePoint(buffer[i]); + } + } + + this.buffer = ""; + if (c === 35) { + this.url.fragment = ""; + this.state = "fragment"; + } + } else { + // TODO: If c is not a URL code point and not "%", parse error. + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + this.buffer += cStr; + } + + return true; +}; + +URLStateMachine.prototype["parse fragment"] = function parseFragment(c) { + if (isNaN(c)) { // do nothing + } else if (c === 0x0) { + this.parseError = true; + } else { + // TODO: If c is not a URL code point and not "%", parse error. + if (c === 37 && + (!isASCIIHex(this.input[this.pointer + 1]) || + !isASCIIHex(this.input[this.pointer + 2]))) { + this.parseError = true; + } + + this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode); + } + + return true; +}; + +function serializeURL(url, excludeFragment) { + let output = url.scheme + ":"; + if (url.host !== null) { + output += "//"; + + if (url.username !== "" || url.password !== "") { + output += url.username; + if (url.password !== "") { + output += ":" + url.password; + } + output += "@"; + } + + output += serializeHost(url.host); + + if (url.port !== null) { + output += ":" + url.port; + } + } else if (url.host === null && url.scheme === "file") { + output += "//"; + } + + if (url.cannotBeABaseURL) { + output += url.path[0]; + } else { + for (const string of url.path) { + output += "/" + string; + } + } + + if (url.query !== null) { + output += "?" + url.query; + } + + if (!excludeFragment && url.fragment !== null) { + output += "#" + url.fragment; + } + + return output; +} + +function serializeOrigin(tuple) { + let result = tuple.scheme + "://"; + result += serializeHost(tuple.host); + + if (tuple.port !== null) { + result += ":" + tuple.port; + } + + return result; +} + +module.exports.serializeURL = serializeURL; + +module.exports.serializeURLOrigin = function (url) { + // https://url.spec.whatwg.org/#concept-url-origin + switch (url.scheme) { + case "blob": + try { + return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0])); + } catch (e) { + // serializing an opaque origin returns "null" + return "null"; + } + case "ftp": + case "gopher": + case "http": + case "https": + case "ws": + case "wss": + return serializeOrigin({ + scheme: url.scheme, + host: url.host, + port: url.port + }); + case "file": + // spec says "exercise to the reader", chrome says "file://" + return "file://"; + default: + // serializing an opaque origin returns "null" + return "null"; + } +}; + +module.exports.basicURLParse = function (input, options) { + if (options === undefined) { + options = {}; + } + + const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride); + if (usm.failure) { + return "failure"; + } + + return usm.url; +}; + +module.exports.setTheUsername = function (url, username) { + url.username = ""; + const decoded = punycode.ucs2.decode(username); + for (let i = 0; i < decoded.length; ++i) { + url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode); + } +}; + +module.exports.setThePassword = function (url, password) { + url.password = ""; + const decoded = punycode.ucs2.decode(password); + for (let i = 0; i < decoded.length; ++i) { + url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode); + } +}; + +module.exports.serializeHost = serializeHost; + +module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort; + +module.exports.serializeInteger = function (integer) { + return String(integer); +}; + +module.exports.parseURL = function (input, options) { + if (options === undefined) { + options = {}; + } + + // We don't handle blobs, so this just delegates: + return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride }); +}; diff --git a/node_modules/whatwg-url/lib/utils.js b/node_modules/whatwg-url/lib/utils.js new file mode 100644 index 0000000..a562009 --- /dev/null +++ b/node_modules/whatwg-url/lib/utils.js @@ -0,0 +1,20 @@ +"use strict"; + +module.exports.mixin = function mixin(target, source) { + const keys = Object.getOwnPropertyNames(source); + for (let i = 0; i < keys.length; ++i) { + Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i])); + } +}; + +module.exports.wrapperSymbol = Symbol("wrapper"); +module.exports.implSymbol = Symbol("impl"); + +module.exports.wrapperForImpl = function (impl) { + return impl[module.exports.wrapperSymbol]; +}; + +module.exports.implForWrapper = function (wrapper) { + return wrapper[module.exports.implSymbol]; +}; + diff --git a/node_modules/whatwg-url/package.json b/node_modules/whatwg-url/package.json new file mode 100644 index 0000000..fce35ae --- /dev/null +++ b/node_modules/whatwg-url/package.json @@ -0,0 +1,32 @@ +{ + "name": "whatwg-url", + "version": "5.0.0", + "description": "An implementation of the WHATWG URL Standard's URL API and parsing machinery", + "main": "lib/public-api.js", + "files": [ + "lib/" + ], + "author": "Sebastian Mayr ", + "license": "MIT", + "repository": "jsdom/whatwg-url", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + }, + "devDependencies": { + "eslint": "^2.6.0", + "istanbul": "~0.4.3", + "mocha": "^2.2.4", + "recast": "~0.10.29", + "request": "^2.55.0", + "webidl2js": "^3.0.2" + }, + "scripts": { + "build": "node scripts/transform.js && node scripts/convert-idl.js", + "coverage": "istanbul cover node_modules/mocha/bin/_mocha", + "lint": "eslint .", + "prepublish": "npm run build", + "pretest": "node scripts/get-latest-platform-tests.js && npm run build", + "test": "mocha" + } +} diff --git a/package-lock.json b/package-lock.json index e468df4..9b3d348 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,7 @@ "packages": { "": { "dependencies": { - "appwrite": "^16.0.2", + "appwrite": "^14.0.1", "http-server": "^14.1.1" } }, @@ -25,10 +25,14 @@ } }, "node_modules/appwrite": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/appwrite/-/appwrite-16.0.2.tgz", - "integrity": "sha512-sCMVOe9wdB8OneIz6LtoYhp797GEXoudAdygNZgezPiybGOlMPcQ8kP1c/FW1eES0ledaqgaZ0PHb+LwZia8pw==", - "license": "BSD-3-Clause" + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/appwrite/-/appwrite-14.0.1.tgz", + "integrity": "sha512-ORlvfqVif/2K3qKGgGiGfMP33Zwm+xxB1fIC4Lm3sojOkDd8u8YvgKQO0Meq5UXb8Dc0Rl66Z7qlGBAfRQ04bA==", + "license": "BSD-3-Clause", + "dependencies": { + "cross-fetch": "3.1.5", + "isomorphic-form-data": "2.0.0" + } }, "node_modules/async": { "version": "2.6.4", @@ -39,6 +43,12 @@ "lodash": "^4.17.14" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -114,6 +124,18 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/corser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", @@ -123,6 +145,15 @@ "node": ">= 0.4.0" } }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "license": "MIT", + "dependencies": { + "node-fetch": "2.6.7" + } + }, "node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -132,6 +163,15 @@ "ms": "^2.1.1" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/dunder-proto": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", @@ -202,6 +242,41 @@ } } }, + "node_modules/form-data": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", + "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/form-data/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -354,6 +429,15 @@ "node": ">=0.10.0" } }, + "node_modules/isomorphic-form-data": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-form-data/-/isomorphic-form-data-2.0.0.tgz", + "integrity": "sha512-TYgVnXWeESVmQSg4GLVbalmQ+B4NPi/H4eWxqALKj63KsUrcu301YDjBqaOw3h+cbak7Na4Xyps3BiptHtxTfg==", + "license": "MIT", + "dependencies": { + "form-data": "^2.3.2" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -381,6 +465,27 @@ "node": ">=4" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -408,6 +513,26 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/object-inspect": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", @@ -566,6 +691,12 @@ "node": ">=8" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/union": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", @@ -583,6 +714,12 @@ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "license": "MIT" }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -594,6 +731,16 @@ "engines": { "node": ">=12" } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } } } } diff --git a/package.json b/package.json index 62418cc..15e8c1b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "appwrite": "^16.0.2", + "appwrite": "^14.0.1", "http-server": "^14.1.1" } }