diff --git a/.travis.yml b/.travis.yml index c242b592648..f3327fffb09 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,28 @@ language: node_js node_js: - "10" +# env: +# global: +# - CC_TEST_REPORTER_ID=2e7a4e12a9039fd1b3721e79e2efa92e1d4925af092679f3d106428e01373436 +# - GH_PAGES_SRC="build-docs" before_install: - curl -o- -L https://yarnpkg.com/install.sh | bash + - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter + - chmod +x ./cc-test-reporter - export PATH=$HOME/.yarn/bin::$(yarn global bin):$PATH cache: yarn: true directories: - node_modules -install: - - yarn +# before_script: +# - ./cc-test-reporter before-build script: - yarn polkadot-dev-travis-build +# after_script: +# - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT +deploy: + skip_cleanup: true + provider: script + script: yarn polkadot-dev-travis-deploy + on: + branch: master diff --git a/packages/extension-dapp/LICENSE b/packages/extension-dapp/LICENSE new file mode 100644 index 00000000000..0d381b2e97d --- /dev/null +++ b/packages/extension-dapp/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/packages/extension-dapp/README.md b/packages/extension-dapp/README.md new file mode 100644 index 00000000000..1e6e9b02c05 --- /dev/null +++ b/packages/extension-dapp/README.md @@ -0,0 +1,19 @@ +# @polkadot/extension-dapp + +A basic injected that manipulates the `window.injectedWeb3` to extract all the providers added to the page. + +## Usage + +```js +import { web3Accounts, web3Enable, web3FromAddress } from '@polkadot/extension-dapp'; + +// returns an array of all the injected sources +// (this needs to be called first, before other requests) +const allInjected = await web3Enable(...my dapp name...); + +// returns an array of { address, meta: { name, source } } +const allAccounts = await web3Accounts(); + +// finds an injector for an address +const injector = await web3FromAddress(...address...) +``` diff --git a/packages/extension-dapp/package.json b/packages/extension-dapp/package.json new file mode 100644 index 00000000000..dd9bbf122e6 --- /dev/null +++ b/packages/extension-dapp/package.json @@ -0,0 +1,14 @@ +{ + "name": "@polkadot/extension-dapp", + "description": "An injector dapps that manages the injected environment", + "version": "0.1.1-beta.0", + "author": "Jaco Greeff ", + "license": "Apache-2", + "dependencies": { + }, + "devDependencies": { + }, + "peerDependencies": { + "@polkadot/api": "*" + } +} diff --git a/packages/extension-dapp/src/index.ts b/packages/extension-dapp/src/index.ts new file mode 100644 index 00000000000..98e45e3bedf --- /dev/null +++ b/packages/extension-dapp/src/index.ts @@ -0,0 +1,110 @@ +// Copyright 2019 @polkadot/extension-dapp authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { InjectedAccountWithMeta, InjectedExtension, InjectedExtensionInfo, InjectedWindow } from './types'; + +// just a helper (otherwise we cast all-over, so shorter and more readable) +const injectedWeb3 = (window as InjectedWindow).injectedWeb3; + +// have we found the window.injectedWeb3 +const isWeb3Injected = !!injectedWeb3 && Object.keys(injectedWeb3).length !== 0; + +// we keep the last promise created around (for queries) +let web3EnablePromise: Promise> | null = null; + +export { isWeb3Injected, web3EnablePromise }; + +// enables all the providers found on the injected window interface +export function web3Enable (originName: string): Promise> { + web3EnablePromise = Promise + .all( + Object + .entries(injectedWeb3) + .map(([name, { enable, version }]) => + Promise + .all([Promise.resolve({ name, version }), enable(originName)]) + .catch(() => [{ name, version }, null] as [InjectedExtensionInfo, null]) + ) + ) + .then((values) => + values + .filter(([, ext]) => ext !== null) + .map(([info, ext]) => ({ ...info, ...ext } as InjectedExtension)) + ) + .catch(() => [] as Array) + .then((values) => { + const names = values.map(({ name, version }) => `${name}/${version}`); + + console.log(`web3Enable: Enabled ${values.length} extensions ${names.join(', ')}`); + + return values; + }); + + return web3EnablePromise; +} + +// retrieve all the accounts accross all providers +export async function web3Accounts (): Promise> { + if (!web3EnablePromise) { + throw new Error(`web3Accounts: web3Enable(originName) needs to be called before web3Accounts`); + } + + const accounts: Array = []; + const injected = await web3EnablePromise; + const retrieved = await Promise.all( + injected.map(async ({ accounts, name: source }) => { + try { + const list = await accounts.get(); + + return list.map(({ address, name }) => ({ + address, + meta: { name, source } + })); + } catch (error) { + // cannot handle this one + return []; + } + }) + ); + + retrieved.forEach((result) => accounts.push(...result)); + + const addresses = accounts.map(({ address }) => address); + + console.log(`web3Accounts: Found ${accounts.length} addresses ${addresses.join(', ')}`); + + return accounts; +} + +// find a specific provider based on an address +export async function web3FromAddress (address: string): Promise { + if (!web3EnablePromise) { + throw new Error(`web3FromAddress: web3Enable(originName) needs to be called before web3FromAddress`); + } + + const accounts = await web3Accounts(); + const found = address && accounts.find((account) => account.address === address); + + if (!found) { + throw new Error(`web3FromAddress: Unable to find injected ${address}`); + } + + return web3FromSource(found.meta.source); +} + +// find a specific provider based on the name +export async function web3FromSource (source: string): Promise { + if (!web3EnablePromise) { + throw new Error(`web3FromSource: web3Enable(originName) needs to be called before web3FromSource`); + } + + const sources = await web3EnablePromise; + const found = source && sources.find(({ name }) => name === source); + + if (!found) { + throw new Error(`web3FromSource: Unable to find an injected ${source}`); + } + + return found; +} diff --git a/packages/extension-dapp/src/types.ts b/packages/extension-dapp/src/types.ts new file mode 100644 index 00000000000..eb7c313d63d --- /dev/null +++ b/packages/extension-dapp/src/types.ts @@ -0,0 +1,47 @@ +// Copyright 2019 @polkadot/extension-dapp authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { Signer } from '@polkadot/api/types'; + +export interface InjectedAccount { + address: string; + name: string; +} + +export interface InjectedAccountWithMeta { + address: string; + meta: { + name: string, + source: string + }; +} + +export interface InjectedAccounts { + get: () => Promise>; +} + +export interface InjectedSigner extends Signer {} + +export interface InjectedExtensionInfo { + name: string; + version: string; +} + +export interface Injected { + accounts: InjectedAccounts; + signer: InjectedSigner; +} + +export interface InjectedWindowProvider { + enable: (origin: string) => Promise; + version: string; +} + +export type InjectedWindow = Window & { + injectedWeb3: { + [index: string]: InjectedWindowProvider + } +}; + +export type InjectedExtension = InjectedExtensionInfo & Injected; diff --git a/packages/extension-ui/LICENSE b/packages/extension-ui/LICENSE new file mode 100644 index 00000000000..0d381b2e97d --- /dev/null +++ b/packages/extension-ui/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/packages/extension-ui/README.md b/packages/extension-ui/README.md new file mode 100644 index 00000000000..794aebb4247 --- /dev/null +++ b/packages/extension-ui/README.md @@ -0,0 +1,3 @@ +# @polkadot/extension-ui + +UI for the `@polkadot/extension` diff --git a/packages/extension/LICENSE b/packages/extension/LICENSE new file mode 100644 index 00000000000..0d381b2e97d --- /dev/null +++ b/packages/extension/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/packages/extension/README.md b/packages/extension/README.md new file mode 100644 index 00000000000..89edaed201a --- /dev/null +++ b/packages/extension/README.md @@ -0,0 +1,3 @@ +# @polkadot/extension + +A signing extension diff --git a/packages/extension/src/inject/Accounts.ts b/packages/extension/src/inject/Accounts.ts index c4c4e1bb182..e74ebc1d1bf 100644 --- a/packages/extension/src/inject/Accounts.ts +++ b/packages/extension/src/inject/Accounts.ts @@ -2,16 +2,17 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { Accounts as IAccounts, Account as IAccount, SendRequest } from './types'; +import { InjectedAccounts, InjectedAccount } from '@polkadot/extension-dapp/types'; +import { SendRequest } from './types'; let sendRequest: SendRequest; -export default class Accounts implements IAccounts { +export default class Accounts implements InjectedAccounts { constructor (_sendRequest: SendRequest) { sendRequest = _sendRequest; } - get (): Promise> { + get (): Promise> { return sendRequest('accounts.list'); } } diff --git a/packages/extension/src/inject/Injected.ts b/packages/extension/src/inject/Injected.ts index 156a4d8f927..7b2a93c86c5 100644 --- a/packages/extension/src/inject/Injected.ts +++ b/packages/extension/src/inject/Injected.ts @@ -2,12 +2,13 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { Injected as IInjected, SendRequest } from './types'; +import { Injected as InjectedInjected } from '@polkadot/extension-dapp/types'; +import { SendRequest } from './types'; import Accounts from './Accounts'; import Signer from './Signer'; -export default class Injected implements IInjected { +export default class Injected implements InjectedInjected { readonly accounts: Accounts; readonly signer: Signer; diff --git a/packages/extension/src/inject/Signer.ts b/packages/extension/src/inject/Signer.ts index 77a416bbaae..1d071e4bc63 100644 --- a/packages/extension/src/inject/Signer.ts +++ b/packages/extension/src/inject/Signer.ts @@ -3,15 +3,16 @@ // of the Apache-2.0 license. See the LICENSE file for details. import { SignerOptions } from '@polkadot/api/types'; +import { InjectedSigner } from '@polkadot/extension-dapp/types'; import { IExtrinsic } from '@polkadot/types/types'; -import { Signer as ISigner, SendRequest } from './types'; +import { SendRequest } from './types'; import { Hash } from '@polkadot/types'; import { SubmittableResult } from '@polkadot/api/SubmittableExtrinsic'; let sendRequest: SendRequest; -export default class Signer implements ISigner { +export default class Signer implements InjectedSigner { constructor (_sendRequest: SendRequest) { sendRequest = _sendRequest; } diff --git a/packages/extension/src/inject/index.ts b/packages/extension/src/inject/index.ts index 679b04a7594..63afe16d30d 100644 --- a/packages/extension/src/inject/index.ts +++ b/packages/extension/src/inject/index.ts @@ -2,8 +2,8 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. +import { InjectedWindow } from '@polkadot/extension-dapp/types'; import { MessageTypes } from '../background/types'; -import { WindowInjected } from './types'; import events, { eventTarget } from '../events'; import Injected from './Injected'; @@ -59,15 +59,15 @@ eventTarget.addEventListener(events.response, (event) => { }); // small helper with the typescript types, just cast window -const windowInject = window as WindowInjected; +const windowInject = window as InjectedWindow; // don't clobber the existing object, we will add it it (or create as needed) windowInject.injectedWeb3 = windowInject.injectedWeb3 || {}; // add our enable function windowInject.injectedWeb3['polkadot-js'] = { - name: 'polkadot-js', // process.env.PKG_NAME as string, - version: process.env.PKG_VERSION as string, enable: (origin: string): Promise => - sendMessage('authorize.tab', { origin }).then(() => new Injected(sendMessage)) -}; + sendMessage('authorize.tab', { origin }).then(() => new Injected(sendMessage)), + name: 'polkadot-js', // process.env.PKG_NAME as string, + version: process.env.PKG_VERSION as string +} as any; // FIXME For now, the name attribute is required by old diff --git a/packages/extension/src/inject/types.ts b/packages/extension/src/inject/types.ts index 6e92f60acc6..e4feb257f2c 100644 --- a/packages/extension/src/inject/types.ts +++ b/packages/extension/src/inject/types.ts @@ -2,37 +2,8 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { Signer as SignerInterface } from '@polkadot/api/types'; import { MessageTypes } from '../background/types'; -export interface Account { - readonly address: string; // ss-58 encoded address - readonly name?: string; // optional name for display -} - -export interface Accounts { - get: () => Promise>; -} - -export interface Signer extends SignerInterface { - // no specific signer extensions -} - -export interface Injected { - readonly accounts: Accounts; - readonly signer: Signer; -} - export interface SendRequest { (message: MessageTypes, request?: any): Promise; } - -export type WindowInjected = Window & { - injectedWeb3: { - [index: string]: { - name: string, - version: string, - enable (origin: string): Promise - } - } -}; diff --git a/tsconfig.json b/tsconfig.json index 4d56832bc8b..68b06a95900 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,6 +7,8 @@ { "@polkadot/extension": ["packages/extension/src"], "@polkadot/extension/*": ["packages/extension/src/*"], + "@polkadot/extension-dapp": ["packages/extension-dapp/src"], + "@polkadot/extension-dapp/*": ["packages/extension-dapp/src/*"], "@polkadot/extension-ui": ["packages/extension-ui/src"], "@polkadot/extension-ui/*": ["packages/extension-ui/src/*"] },