From 943c06f8aab78990d36ff186a9b7f756edd0c7c3 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 6 Jun 2017 16:23:27 +0200 Subject: [PATCH 01/13] add Travis --- .travis.yml | 15 +++++++++++++++ README.md | 1 + 2 files changed, 16 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..2eaf649 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,15 @@ +language: node_js +node_js: node + +install: npm install + +script: + - npm run clean + - npm run build + +cache: + directories: + - node_modules + +notifications: + email: false \ No newline at end of file diff --git a/README.md b/README.md index 20b0195..e2b0abd 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Some naive helpers to get you on your way to making some transactions, if you'd Aimed to support usage in browsers or node and ES∞+, so you'll probably need a babel here and a bundler there (or use [one of the built versions](./dist)), of which I expect you'll know quite well ([otherwise, go check out js-reactor](https://github.com/bigchaindb/js-reactor)). +[![Build Status](https://travis-ci.org/bigchaindb/js-bigchaindb-driver.svg?branch=master)](https://travis-ci.org/bigchaindb/js-bigchaindb-driver) ## Compatibility From deb7664068a22f3e2b8aaa4598869af158322bda Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 6 Jun 2017 16:23:43 +0200 Subject: [PATCH 02/13] ignore lock files --- .eslintignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.eslintignore b/.eslintignore index da0c0a2..db72c61 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,5 @@ build/* dist/* node_modules/* +yarn.lock +package-lock.json \ No newline at end of file From b8007b4883598cce4f065d5ef6194105886c6bf2 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 6 Jun 2017 16:23:57 +0200 Subject: [PATCH 03/13] proper json syntax --- .babelrc | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.babelrc b/.babelrc index a38b705..c7cf3a4 100644 --- a/.babelrc +++ b/.babelrc @@ -1,25 +1,25 @@ { - 'presets': ['es2015-no-commonjs'], - 'plugins': [ - 'transform-export-extensions', - 'transform-object-assign', - 'transform-object-rest-spread' + "presets": ["es2015-no-commonjs"], + "plugins": [ + "transform-export-extensions", + "transform-object-assign", + "transform-object-rest-spread" ], - 'sourceMaps': true, + "sourceMaps": true, - 'env': { - 'bundle': { - 'plugins': [ - ['transform-runtime', { - 'polyfill': true, - 'regenerator': false + "env": { + "bundle": { + "plugins": [ + ["transform-runtime", { + "polyfill": true, + "regenerator": false }] ] }, - 'cjs': { - 'plugins': [ - 'add-module-exports', - 'transform-es2015-modules-commonjs' + "cjs": { + "plugins": [ + "add-module-exports", + "transform-es2015-modules-commonjs" ] } } From 3e0f18062d14467107c994ed71bed9a4d5b938a0 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 6 Jun 2017 16:25:38 +0200 Subject: [PATCH 04/13] make license work with GitHub's license detection --- LICENSE | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++++ LICENSES.md | 9 --- README.md | 18 +++++ 3 files changed, 219 insertions(+), 9 deletions(-) create mode 100755 LICENSE delete mode 100755 LICENSES.md diff --git a/LICENSE b/LICENSE new file mode 100755 index 0000000..5e0fd33 --- /dev/null +++ b/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/LICENSES.md b/LICENSES.md deleted file mode 100755 index 000e7c3..0000000 --- a/LICENSES.md +++ /dev/null @@ -1,9 +0,0 @@ -# Code Licenses - -All code in _this_ repository (including short code snippets embedded in the official BigchainDB _documentation_) is licensed under the Apache Software License 2.0, the full text of which can be found at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0). - -For the licenses on all other BigchainDB-related code, see the license file in the associated repository. - -# Documentation Licenses - -The official BigchainDB documentation, _except for the short code snippets embedded within it_, is licensed under a Creative Commons Attribution-ShareAlike 4.0 International license, the full text of which can be found at [http://creativecommons.org/licenses/by-sa/4.0/legalcode](http://creativecommons.org/licenses/by-sa/4.0/legalcode). diff --git a/README.md b/README.md index e2b0abd..0b1edd4 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ of which I expect you'll know quite well ([otherwise, go check out js-reactor](h - [API](API.md) ## Getting started +- [License](#license) ### Install from npm @@ -147,3 +148,20 @@ An example BigchainDB Server-generated keypair (encoded in `base58`): Your package should be able to take in the decoded version of the **private** key and return you the same **public** key (once you encode that to `base58`). +## License + +``` +Copyright 2017 BigchainDB GmbH + +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. +``` \ No newline at end of file From 1106f533282915eaa836d643aa4f05e2ae465a0f Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 6 Jun 2017 16:26:29 +0200 Subject: [PATCH 05/13] remove changelog file --- CHANGELOG.rst | 7 ------- 1 file changed, 7 deletions(-) delete mode 100755 CHANGELOG.rst diff --git a/CHANGELOG.rst b/CHANGELOG.rst deleted file mode 100755 index 71d73bd..0000000 --- a/CHANGELOG.rst +++ /dev/null @@ -1,7 +0,0 @@ -Changelog -========= - -0.0.1a1 (2017-05-09) --------------------- - -* Planning release on npm. From f1f928186398f49579357b3afdc218854579881e Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 6 Jun 2017 16:29:28 +0200 Subject: [PATCH 06/13] cleanup all the readme things * remove `js-` from package name * proper title & description * streamline installation & usage * formatting: remove some weird line breaks * lots of typo corrections * repo banner --- AUTHORS.rst | 13 ------- README.md | 80 ++++++++++++++------------------------- media/repo-banner.sketch | Bin 0 -> 37949 bytes media/repo-banner@2x.png | Bin 0 -> 54963 bytes package.json | 6 +-- 5 files changed, 32 insertions(+), 67 deletions(-) delete mode 100644 AUTHORS.rst create mode 100644 media/repo-banner.sketch create mode 100644 media/repo-banner@2x.png diff --git a/AUTHORS.rst b/AUTHORS.rst deleted file mode 100644 index 9b72892..0000000 --- a/AUTHORS.rst +++ /dev/null @@ -1,13 +0,0 @@ -======= -Credits -======= - -Development Lead ----------------- - -* BigchainDB - -Contributors ------------- - -Inspired by @Sohkai. Why not be the second? diff --git a/README.md b/README.md index 0b1edd4..740b7d9 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,40 @@ -# JavaScript Driver for BigchainDB +# [![js-bigchaindb-driver](media/repo-banner@2x.png)](https://www.bigchaindb.com) -> Inspired by [`js-bigchaindb-quickstart`](https://github.com/sohkai/js-bigchaindb-quickstart) of @sohkhai [thanks] +> Official Node.js driver for [BigchainDB](https://github.com/bigchaindb/bigchaindb) with some naive helpers to get you on your way making transactions with BigchainDB and Node.js. -> Supports BigchainDB Server v0.10 (Warning: use CORS enabled [branch](https://github.com/bigchaindb/bigchaindb/tree/kyber-master-feat-cors) untill [PR #1311](https://github.com/bigchaindb/bigchaindb/pull/1311) is resolved ) - -Some naive helpers to get you on your way to making some transactions, if you'd like to use -[BigchainDB](https://github.com/bigchaindb/bigchaindb) with JavaScript. - -Aimed to support usage in browsers or node and ES∞+, so -you'll probably need a babel here and a bundler there (or use [one of the built versions](./dist)), -of which I expect you'll know quite well ([otherwise, go check out js-reactor](https://github.com/bigchaindb/js-reactor)). +[![npm](https://img.shields.io/npm/v/js-bigchaindb-driver.svg)](https://www.npmjs.com/package/js-bigchaindb-driver) +[![js bigchaindb](https://img.shields.io/badge/js-bigchaindb-39BA91.svg)](https://github.com/ascribe/javascript) [![Build Status](https://travis-ci.org/bigchaindb/js-bigchaindb-driver.svg?branch=master)](https://travis-ci.org/bigchaindb/js-bigchaindb-driver) ## Compatibility -| BigchainDB Server | BigchainDB Javascript Driver | +| BigchainDB Server | BigchainDB Node.js Driver | | ----------------- |------------------------------| | `~=0.10.1` | `~=0.1.0` | ## Contents -- [Getting Started](#getting-started) +- [Installation](#installation) - [Usage](#usage) - [Speed Optimizations](#speed-optimizations) - [Warnings](#warnings) -- [API](API.md) - -## Getting started +- [Authors](#authors) - [License](#license) +- [API reference](API.md) -### Install from npm +## Installation ```bash # install from npm -npm install js-bigchaindb-driver -# Install from GitHub - ssh -npm install git+ssh://github.com/bigchaindb/js-bigchaindb-driver.git -# Install from GitHub - https -npm install git+https://github.com/bigchaindb/js-bigchaindb-driver.git -``` - -### Import / ES6 - -```javascript -// ES6 Browser -import * as driver from 'js-bigchaindb-driver'; -// ES<<6 Browser -let driver = require('js-bigchaindb-driver'); -// ES<<6 CommonJS / node -let driver = require('js-bigchaindb-driver/dist/node'); +npm install bigchaindb-driver ``` ## Usage -```javascript +You'll probably need a babel here and a bundler there. Alternatively, use [one of the bundled dist versions](./dist). + +```js import * as driver from 'js-bigchaindb-driver'; // http(s):/// (e.g. http://localhost:9984/api/v1/) @@ -87,33 +67,25 @@ You may also be interested in some [long-form tutorials with actual code](https: The expected flow for making transactions: -1. Go get yourself some keypairs! (or a whole bunch of them, nobody's - counting) +1. Go get yourself some keypairs. (or a whole bunch of them, nobody's counting) - `new driver.Ed25519Keypair()` -1. Construct a transaction payload that you can send of to BigchainDB: +2. Construct a transaction payload that you can send off to BigchainDB: - `driver.Transaction.makeCreateTransaction()` for creating a new asset or - `driver.Transaction.makeTransferTransaction()` for transfering an existing asset -1. A transaction needs an output (\*): +3. A transaction needs an output (\*): - `driver.Transaction.makeOutput()` still requires a crypto-condition - `driver.Transaction.makeEd25519Condition()` should do the trick for a simple public key output. -1. (**Optional**) You've got everything you need, except for an asset and metadata. Maybe define them (any - JSON-serializable object will do). -1. Ok, now you've got a transaction, but we need you to *sign* it cause, you - know... cryptography and `¯\_(ツ)_/¯`: +4. (**Optional**) You've got everything you need, except for an asset and metadata. Maybe define them (any JSON-serializable object will do). +5. Ok, now you've got a transaction, but we need you to *sign* it cause, you know... cryptography and `¯\_(ツ)_/¯`: - `driver.Transaction.signTransaction()` allows you to sign with private keys. -1. Final step is to send the transaction off to BigchainDB: +6. Final step is to send the transaction off to BigchainDB: - `driver.Connection.postTransaction()` - -(\*) If you're not sure what any of this means (and you're as - confused as I think you are right now), you might wanna go check out [this](https://docs.bigchaindb.com/projects/server/en/latest/data-models/crypto-conditions.html) - and [this](https://docs.bigchaindb.com/projects/py-driver/en/latest/usage.html#asset-transfer) - and [this](https://tools.ietf.org/html/draft-thomas-crypto-conditions-01) first. +(\*) If you're not sure what any of this means (and you're as confused as I think you are right now), you might wanna go check out [this](https://docs.bigchaindb.com/projects/server/en/latest/data-models/crypto-conditions.html) and [this](https://docs.bigchaindb.com/projects/py-driver/en/latest/usage.html#asset-transfer) and [this](https://tools.ietf.org/html/draft-thomas-crypto-conditions-01) first. ## Speed Optimizations -This implementation plays "safe" by using JS-native (or downgradable) libraries for its -crypto-related functions to keep compatibilities with the browser. If you do want some more speed, feel free to explore the following: +This implementation plays "safe" by using JS-native (or downgradable) libraries for its crypto-related functions to keep compatibilities with the browser. If you do want some more speed, feel free to explore the following: * [chloride](https://github.com/dominictarr/chloride), or its underlying [sodium](https://github.com/paixaop/node-sodium) library @@ -127,8 +99,7 @@ crypto-related functions to keep compatibilities with the browser. If you do wan Make sure you keep using a crypto-conditions implementation that implements the older v1 draft (e.g. [`five-bells-condition@v3.3.1`](https://github.com/interledgerjs/five-bells-condition/releases/tag/v3.3.1)). -BigchainDB Server 0.10 does not implement the newer version of the spec and **WILL** fail if you to -use a newer implementation of crypto-conditions. +BigchainDB Server 0.10 does not implement the newer version of the spec and **WILL** fail if you try using a newer implementation of crypto-conditions. > SHA3 @@ -148,6 +119,13 @@ An example BigchainDB Server-generated keypair (encoded in `base58`): Your package should be able to take in the decoded version of the **private** key and return you the same **public** key (once you encode that to `base58`). + +## Authors + +Inspired by [`js-bigchaindb-quickstart`](https://github.com/sohkai/js-bigchaindb-quickstart) of @sohkhai [thanks] + +* BigchainDB + ## License ``` diff --git a/media/repo-banner.sketch b/media/repo-banner.sketch new file mode 100644 index 0000000000000000000000000000000000000000..aeebc5c0546bb4b7abd9633d488b71a9db1b6018 GIT binary patch literal 37949 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 literal 0 HcmV?d00001 diff --git a/media/repo-banner@2x.png b/media/repo-banner@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a99ced1a94693a0d6369ed8e51b2bebbcf163874 GIT binary patch literal 54963 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 `{bKTLeBgEx8Aem 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 ZY}>Y6yI-(wr78muc)I$ztaD0e0stk(u)hER literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 2348c89..a795d0d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "js-bigchaindb-driver", + "name": "bigchaindb-driver", "version": "0.1.1", - "description": "JavaScript driver for BigchainDB (node + browser)", + "description": "Node.js driver for BigchainDB", "homepage": "https://www.bigchaindb.com/", "bugs": "https://github.com/bigchaindb/js-bigchaindb-driver/issues", "repository": { @@ -48,7 +48,7 @@ "decamelize": "^1.2.0", "es6-promise": "^4.0.5", "fetch-ponyfill": "^4.0.0", - "five-bells-condition": "=3.3.1", + "five-bells-condition": "3.3.1", "isomorphic-fetch": "^2.2.1", "js-sha3": "^0.5.7", "js-utility-belt": "^1.5.0", From 4b1e4b327ce6d680723ccf9bf16cf9a9ec70267e Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 6 Jun 2017 16:30:23 +0200 Subject: [PATCH 07/13] proper license shortcut --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a795d0d..f684001 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "type": "git", "url": "git+https://github.com/bigchaindb/js-bigchaindb-driver.git" }, - "license": "Apache Software License 2.0", + "license": "Apache-2.0", "author": "BigchainDB", "main": "./dist/bundle/bundle.js", "scripts": { From b4af8f4f084a7fa9ab5c5337790c7097837ef8b9 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 6 Jun 2017 16:32:43 +0200 Subject: [PATCH 08/13] semi-auto npm releases --- README.md | 29 +++++++++++++++++++++++++++++ package.json | 6 +++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 740b7d9..6db8121 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - [Usage](#usage) - [Speed Optimizations](#speed-optimizations) - [Warnings](#warnings) +- [npm releases](#npmreleases) - [Authors](#authors) - [License](#license) - [API reference](API.md) @@ -120,6 +121,34 @@ An example BigchainDB Server-generated keypair (encoded in `base58`): Your package should be able to take in the decoded version of the **private** key and return you the same **public** key (once you encode that to `base58`). +## npm releases + +For a new **patch release**, execute on the machine where you're logged into your npm account: + +```bash +npm run release +``` + +Command is powered by [`release-it`](https://github.com/webpro/release-it) package, defined in the `package.json`. + +That's what the command does without any user interaction: + +- create release commit by updating version in `package.json` +- create tag for that release commit +- push commit & tag +- create a new release on GitHub, with change log auto-generated from commit messages +- publish to npm as a new release + +If you want to create a **minor** or **major release**, use these commands: + +```bash +npm run release-minor +``` + +```bash +npm run release-major +``` + ## Authors Inspired by [`js-bigchaindb-quickstart`](https://github.com/sohkai/js-bigchaindb-quickstart) of @sohkhai [thanks] diff --git a/package.json b/package.json index f684001..ba9ff01 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,10 @@ "build:cjs": "cross-env BABEL_ENV=cjs babel ./src -d dist/node", "build:dist": "cross-env NODE_ENV=production webpack -p", "clean": "rimraf dist/bundle dist/node", - "test": "echo \"Error: no test specified AWWWW YEAHHH\" && exit 1" + "test": "echo \"Error: no test specified AWWWW YEAHHH\" && exit 1", + "release": "./node_modules/release-it/bin/release.js --src.tagName='v%s' --github.release --npm.publish --non-interactive", + "release-minor": "./node_modules/release-it/bin/release.js minor --src.tagName='v%s' --github.release --npm.publish --non-interactive", + "release-major": "./node_modules/release-it/bin/release.js major --src.tagName='v%s' --github.release --npm.publish --non-interactive" }, "devDependencies": { "babel-cli": "^6.22.2", @@ -37,6 +40,7 @@ "eslint": "^3.14.1", "eslint-config-ascribe": "^3.0.1", "eslint-plugin-import": "^2.2.0", + "release-it": "^2.7.3", "rimraf": "^2.5.4", "webpack": "^2.2.1" }, From d2707c4db8bef4dc4961b63a0525ee1860e599f3 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 6 Jun 2017 16:35:54 +0200 Subject: [PATCH 09/13] license cleanup --- LICENSE | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/LICENSE b/LICENSE index 5e0fd33..f29e18a 100755 --- a/LICENSE +++ b/LICENSE @@ -171,31 +171,4 @@ 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. +of your accepting any such warranty or additional liability. \ No newline at end of file From a0e253c46c3478cdc2633ec1dcae2cf59812980b Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 7 Jun 2017 00:15:10 +0200 Subject: [PATCH 10/13] add Greenkeeper badge --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6db8121..0e5dcb0 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![npm](https://img.shields.io/npm/v/js-bigchaindb-driver.svg)](https://www.npmjs.com/package/js-bigchaindb-driver) [![js bigchaindb](https://img.shields.io/badge/js-bigchaindb-39BA91.svg)](https://github.com/ascribe/javascript) [![Build Status](https://travis-ci.org/bigchaindb/js-bigchaindb-driver.svg?branch=master)](https://travis-ci.org/bigchaindb/js-bigchaindb-driver) +[![Greenkeeper badge](https://badges.greenkeeper.io/bigchaindb/js-bigchaindb-driver.svg)](https://greenkeeper.io/) ## Compatibility @@ -171,4 +172,4 @@ 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. -``` \ No newline at end of file +``` From 5d76fb2b1b519193ba4d4422efaa3214cee43d1a Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 7 Jun 2017 00:17:05 +0200 Subject: [PATCH 11/13] readme fixes --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0e5dcb0..5845c15 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ - [Usage](#usage) - [Speed Optimizations](#speed-optimizations) - [Warnings](#warnings) -- [npm releases](#npmreleases) +- [npm releases](#npm-releases) - [Authors](#authors) - [License](#license) - [API reference](API.md) @@ -152,8 +152,7 @@ npm run release-major ## Authors -Inspired by [`js-bigchaindb-quickstart`](https://github.com/sohkai/js-bigchaindb-quickstart) of @sohkhai [thanks] - +* inspired by [`js-bigchaindb-quickstart`](https://github.com/sohkai/js-bigchaindb-quickstart) of @sohkhai [thanks] * BigchainDB ## License From 708c16f785904b15745c0151f18f0bb7085ad0e0 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 7 Jun 2017 15:49:44 +0200 Subject: [PATCH 12/13] more typo fixes --- README.md | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 5845c15..d7a401a 100644 --- a/README.md +++ b/README.md @@ -42,10 +42,10 @@ import * as driver from 'js-bigchaindb-driver'; // http(s):/// (e.g. http://localhost:9984/api/v1/) const API_PATH = 'http://localhost:9984/api/v1/'; -// create a new user with a public-private keypair +// Create a new user with a public-private key pair const alice = new driver.Ed25519Keypair(); -// Create a transation +// Create a transaction const tx = driver.Transaction.makeCreateTransaction( { assetMessage: 'My very own asset...' }, { metaDataMessage: 'wrapped in a transaction' }, @@ -55,10 +55,10 @@ const tx = driver.Transaction.makeCreateTransaction( alice.publicKey ); -// sign/fulfill the transaction +// Sign/fulfill the transaction const txSigned = driver.Transaction.signTransaction(tx, alice.privateKey); -// send it off to BigchainDB +// Send it off to BigchainDB let conn = new driver.Connection(PATH, { 'Content-Type': 'application/json' }); conn.postTransaction(txSigned) .then(() => conn.getStatus(txSigned.id)) @@ -69,11 +69,11 @@ You may also be interested in some [long-form tutorials with actual code](https: The expected flow for making transactions: -1. Go get yourself some keypairs. (or a whole bunch of them, nobody's counting) +1. Go get yourself some key pairs. (or a whole bunch of them, nobody's counting) - `new driver.Ed25519Keypair()` 2. Construct a transaction payload that you can send off to BigchainDB: - `driver.Transaction.makeCreateTransaction()` for creating a new asset or - - `driver.Transaction.makeTransferTransaction()` for transfering an existing asset + - `driver.Transaction.makeTransferTransaction()` for transferring an existing asset 3. A transaction needs an output (\*): - `driver.Transaction.makeOutput()` still requires a crypto-condition - `driver.Transaction.makeEd25519Condition()` should do the trick for a simple public key output. @@ -89,11 +89,8 @@ The expected flow for making transactions: This implementation plays "safe" by using JS-native (or downgradable) libraries for its crypto-related functions to keep compatibilities with the browser. If you do want some more speed, feel free to explore the following: -* [chloride](https://github.com/dominictarr/chloride), or its underlying [sodium](https://github.com/paixaop/node-sodium) - library -* [node-sha3](https://github.com/phusion/node-sha3) -- **MAKE SURE** to use [steakknife's fork](https://github.com/steakknife/node-sha3) - if [the FIPS 202 upgrade](https://github.com/phusion/node-sha3/pull/25) hasn't been merged - (otherwise, you'll run into all kinds of hashing problems) +* [chloride](https://github.com/dominictarr/chloride), or its underlying [sodium](https://github.com/paixaop/node-sodium) library +* [node-sha3](https://github.com/phusion/node-sha3) -- **MAKE SURE** to use [steakknife's fork](https://github.com/steakknife/node-sha3) if [the FIPS 202 upgrade](https://github.com/phusion/node-sha3/pull/25) hasn't been merged (otherwise, you'll run into all kinds of hashing problems) ## Warnings @@ -101,26 +98,24 @@ This implementation plays "safe" by using JS-native (or downgradable) libraries Make sure you keep using a crypto-conditions implementation that implements the older v1 draft (e.g. [`five-bells-condition@v3.3.1`](https://github.com/interledgerjs/five-bells-condition/releases/tag/v3.3.1)). + BigchainDB Server 0.10 does not implement the newer version of the spec and **WILL** fail if you try using a newer implementation of crypto-conditions. > SHA3 -Make sure to use a SHA3 implementation that has been upgraded as per [FIPS 202](http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf). -Otherwise, the hashes you generate **WILL** be invalid in the eyes of the BigchainDB Server. +Make sure to use a SHA3 implementation that has been upgraded as per [FIPS 202](http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf). Otherwise, the hashes you generate **WILL** be invalid in the eyes of the BigchainDB Server. > Ed25519 -If you do end up replacing `tweetnacl` with `chloride` (or any other `Ed25519` package), you might -want to double check that it gives you a correct public/private (or verifying/signing, if they use -that lingo) keypair. +If you do end up replacing `tweetnacl` with `chloride` (or any other `Ed25519` package), you might want to double check that it gives you a correct public/private (or verifying/signing, if they use +that lingo) key pair. -An example BigchainDB Server-generated keypair (encoded in `base58`): +An example BigchainDB Server-generated key pair (encoded in `base58`): - Public: `DjPMHDD9JtgypDKY38mPz9f6owjAMAKhLuN1JfRAat8C` - Private: `7Gf5YRch2hYTyeLxqNLgTY63D9K5QH2UQ7LYFeBGuKvo` -Your package should be able to take in the decoded version of the **private** key and return you the -same **public** key (once you encode that to `base58`). +Your package should be able to take in the decoded version of the **private** key and return you the same **public** key (once you encode that to `base58`). ## npm releases From d983a254cdfb9ed64c300786112fa2c91ebc1bda Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 7 Jun 2017 17:08:42 +0200 Subject: [PATCH 13/13] JavaScript/Node.js/browser --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d7a401a..e58359d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # [![js-bigchaindb-driver](media/repo-banner@2x.png)](https://www.bigchaindb.com) -> Official Node.js driver for [BigchainDB](https://github.com/bigchaindb/bigchaindb) with some naive helpers to get you on your way making transactions with BigchainDB and Node.js. +> Official JavaScript driver for [BigchainDB](https://github.com/bigchaindb/bigchaindb) with some naive helpers to get you on your way making transactions in Node.js and the browser. [![npm](https://img.shields.io/npm/v/js-bigchaindb-driver.svg)](https://www.npmjs.com/package/js-bigchaindb-driver) [![js bigchaindb](https://img.shields.io/badge/js-bigchaindb-39BA91.svg)](https://github.com/ascribe/javascript) @@ -9,7 +9,7 @@ ## Compatibility -| BigchainDB Server | BigchainDB Node.js Driver | +| BigchainDB Server | BigchainDB JavaScript Driver | | ----------------- |------------------------------| | `~=0.10.1` | `~=0.1.0` |