Add comprehensive installation and setup documentation

- Add GETTING_STARTED.md with quick start guide and development modes
- Add INSTALL.sh automated installation script
- Add INSTALLATION_CHECKLIST.md, INSTALLATION_SUCCESS.md, and INSTALLATION_SUMMARY.md
- Add QUICK_REFERENCE.md for common commands
- Add SETUP_GUIDE.md with detailed setup instructions
- Update README.md with improved project overview
- Add did-wallet app dependencies and node_modules
This commit is contained in:
Dorian
2026-01-27 17:18:21 +00:00
parent a81f655133
commit 0d073fa89e
22658 changed files with 4494151 additions and 6 deletions
+4
View File
@@ -0,0 +1,4 @@
This project is dual licensed under MIT and Apache-2.0.
MIT: https://www.opensource.org/licenses/mit
Apache-2.0: https://www.apache.org/licenses/license-2.0
+44
View File
@@ -0,0 +1,44 @@
# interface-store <!-- omit in toc -->
[![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)
[![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)
[![codecov](https://img.shields.io/codecov/c/github/ipfs/js-stores.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-stores)
[![CI](https://img.shields.io/github/actions/workflow/status/ipfs/js-stores/js-test-and-release.yml?branch=main\&style=flat-square)](https://github.com/ipfs/js-stores/actions/workflows/js-test-and-release.yml?query=branch%3Amain)
> A generic interface for storing and retrieving data
## Table of contents <!-- omit in toc -->
- [Install](#install)
- [API Docs](#api-docs)
- [License](#license)
- [Contribute](#contribute)
## Install
```console
$ npm i interface-store
```
## API Docs
- <https://ipfs.github.io/js-stores/modules/interface_store.html>
## License
Licensed under either of
- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / <http://www.apache.org/licenses/LICENSE-2.0>)
- MIT ([LICENSE-MIT](LICENSE-MIT) / <http://opensource.org/licenses/MIT>)
## Contribute
Contributions welcome! Please check out [the issues](https://github.com/ipfs/js-stores/issues).
Also see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.
Please be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)
+3
View File
@@ -0,0 +1,3 @@
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.InterfaceStore = factory()}(typeof self !== 'undefined' ? self : this, function () {
"use strict";var InterfaceStore=(()=>{var i=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var r=Object.prototype.hasOwnProperty;var y=(e,t,s,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of p(t))!r.call(e,n)&&n!==s&&i(e,n,{get:()=>t[n],enumerable:!(o=a(t,n))||o.enumerable});return e};var l=e=>y(i({},"__esModule",{value:!0}),e);var A={};return l(A);})();
return InterfaceStore}));
+103
View File
@@ -0,0 +1,103 @@
/**
* An iterable or async iterable of values
*/
export type AwaitIterable<T> = Iterable<T> | AsyncIterable<T>;
/**
* A value or a promise of a value
*/
export type Await<T> = Promise<T> | T;
/**
* Options for async operations.
*/
export interface AbortOptions {
signal?: AbortSignal;
}
export interface Store<Key, Value, Pair, HasOptionsExtension = {}, PutOptionsExtension = {}, PutManyOptionsExtension = {}, GetOptionsExtension = {}, GetManyOptionsExtension = {}, DeleteOptionsExtension = {}, DeleteManyOptionsExtension = {}> {
/**
* Check for the existence of a value for the passed key
*
* @example
* ```js
*const exists = await store.has(new Key('awesome'))
*
*if (exists) {
* console.log('it is there')
*} else {
* console.log('it is not there')
*}
*```
*/
has: (key: Key, options?: AbortOptions & HasOptionsExtension) => Await<boolean>;
/**
* Store the passed value under the passed key
*
* @example
*
* ```js
* await store.put([{ key: new Key('awesome'), value: new Uint8Array([0, 1, 2, 3]) }])
* ```
*/
put: (key: Key, val: Value, options?: AbortOptions & PutOptionsExtension) => Await<Key>;
/**
* Store the given key/value pairs
*
* @example
* ```js
* const source = [{ key: new Key('awesome'), value: new Uint8Array([0, 1, 2, 3]) }]
*
* for await (const { key, value } of store.putMany(source)) {
* console.info(`put content for key ${key}`)
* }
* ```
*/
putMany: (source: AwaitIterable<Pair>, options?: AbortOptions & PutManyOptionsExtension) => AwaitIterable<Key>;
/**
* Retrieve the value stored under the given key
*
* @example
* ```js
* const value = await store.get(new Key('awesome'))
* console.log('got content: %s', value.toString('utf8'))
* // => got content: datastore
* ```
*/
get: (key: Key, options?: AbortOptions & GetOptionsExtension) => Await<Value>;
/**
* Retrieve values for the passed keys
*
* @example
* ```js
* for await (const { key, value } of store.getMany([new Key('awesome')])) {
* console.log(`got "${key}" = "${new TextDecoder('utf8').decode(value)}"`')
* // => got "/awesome" = "datastore"
* }
* ```
*/
getMany: (source: AwaitIterable<Key>, options?: AbortOptions & GetManyOptionsExtension) => AwaitIterable<Pair>;
/**
* Remove the record for the passed key
*
* @example
*
* ```js
* await store.delete(new Key('awesome'))
* console.log('deleted awesome content :(')
* ```
*/
delete: (key: Key, options?: AbortOptions & DeleteOptionsExtension) => Await<void>;
/**
* Remove values for the passed keys
*
* @example
*
* ```js
* const source = [new Key('awesome')]
*
* for await (const key of store.deleteMany(source)) {
* console.log(`deleted content with key ${key}`)
* }
* ```
*/
deleteMany: (source: AwaitIterable<Key>, options?: AbortOptions & DeleteManyOptionsExtension) => AwaitIterable<Key>;
}
//# sourceMappingURL=index.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;AAE7D;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAErC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,GAAG,EAAE,EAC/D,mBAAmB,GAAG,EAAE,EAAE,uBAAuB,GAAG,EAAE,EACtD,mBAAmB,GAAG,EAAE,EAAE,uBAAuB,GAAG,EAAE,EACtD,sBAAsB,GAAG,EAAE,EAAE,0BAA0B,GAAG,EAAE;IAC5D;;;;;;;;;;;;;OAaG;IACH,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,mBAAmB,KAAK,KAAK,CAAC,OAAO,CAAC,CAAA;IAE/E;;;;;;;;OAQG;IACH,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,mBAAmB,KAAK,KAAK,CAAC,GAAG,CAAC,CAAA;IAEvF;;;;;;;;;;;OAWG;IACH,OAAO,EAAE,CACP,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,EAC3B,OAAO,CAAC,EAAE,YAAY,GAAG,uBAAuB,KAC7C,aAAa,CAAC,GAAG,CAAC,CAAA;IAEvB;;;;;;;;;OASG;IACH,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,mBAAmB,KAAK,KAAK,CAAC,KAAK,CAAC,CAAA;IAE7E;;;;;;;;;;OAUG;IACH,OAAO,EAAE,CACP,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAC1B,OAAO,CAAC,EAAE,YAAY,GAAG,uBAAuB,KAC7C,aAAa,CAAC,IAAI,CAAC,CAAA;IAExB;;;;;;;;;OASG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,sBAAsB,KAAK,KAAK,CAAC,IAAI,CAAC,CAAA;IAElF;;;;;;;;;;;;OAYG;IACH,UAAU,EAAE,CACV,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAC1B,OAAO,CAAC,EAAE,YAAY,GAAG,0BAA0B,KAChD,aAAa,CAAC,GAAG,CAAC,CAAA;CACxB"}
File diff suppressed because one or more lines are too long
+6
View File
@@ -0,0 +1,6 @@
{
"AbortOptions": "https://ipfs.github.io/js-stores/interfaces/blockstore_core._internal_.AbortOptions.html",
"Store": "https://ipfs.github.io/js-stores/interfaces/blockstore_core._internal_.Store.html",
"Await": "https://ipfs.github.io/js-stores/types/blockstore_core._internal_.Await.html",
"AwaitIterable": "https://ipfs.github.io/js-stores/types/blockstore_core._internal_.AwaitIterable.html"
}
+138
View File
@@ -0,0 +1,138 @@
{
"name": "interface-store",
"version": "5.1.2",
"description": "A generic interface for storing and retrieving data",
"license": "Apache-2.0 OR MIT",
"homepage": "https://github.com/ipfs/js-stores/tree/master/packages/interface-store#readme",
"repository": {
"type": "git",
"url": "git+https://github.com/ipfs/js-stores.git"
},
"bugs": {
"url": "https://github.com/ipfs/js-stores/issues"
},
"engines": {
"node": ">=16.0.0",
"npm": ">=7.0.0"
},
"main": "src/index.js",
"types": "dist/src/index.d.ts",
"typesVersions": {
"*": {
"*": [
"*",
"dist/*",
"dist/src/*"
],
"src/*": [
"*",
"dist/*",
"dist/src/*"
]
}
},
"files": [
"src",
"dist"
],
"eslintConfig": {
"extends": "ipfs"
},
"release": {
"branches": [
"main"
],
"plugins": [
[
"@semantic-release/commit-analyzer",
{
"preset": "conventionalcommits",
"releaseRules": [
{
"breaking": true,
"release": "major"
},
{
"revert": true,
"release": "patch"
},
{
"type": "feat",
"release": "minor"
},
{
"type": "fix",
"release": "patch"
},
{
"type": "docs",
"release": "patch"
},
{
"type": "test",
"release": "patch"
},
{
"type": "deps",
"release": "patch"
},
{
"scope": "no-release",
"release": false
}
]
}
],
[
"@semantic-release/release-notes-generator",
{
"preset": "conventionalcommits",
"presetConfig": {
"types": [
{
"type": "feat",
"section": "Features"
},
{
"type": "fix",
"section": "Bug Fixes"
},
{
"type": "chore",
"section": "Trivial Changes"
},
{
"type": "docs",
"section": "Documentation"
},
{
"type": "deps",
"section": "Dependencies"
},
{
"type": "test",
"section": "Tests"
}
]
}
}
],
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/github",
"@semantic-release/git"
]
},
"scripts": {
"build": "aegir build",
"lint": "aegir lint",
"clean": "aegir clean",
"release": "aegir release"
},
"devDependencies": {
"aegir": "^39.0.9"
},
"typedoc": {
"entryPoint": "./src/index.ts"
}
}
+129
View File
@@ -0,0 +1,129 @@
/* eslint-disable @typescript-eslint/ban-types */
// this ignore is so we can use {} as the default value for the options
// extensions below - it normally means "any non-nullish value" but here
// we are using it as an intersection type - see the aside at the bottom:
// https://github.com/typescript-eslint/typescript-eslint/issues/2063#issuecomment-675156492
/**
* An iterable or async iterable of values
*/
export type AwaitIterable<T> = Iterable<T> | AsyncIterable<T>
/**
* A value or a promise of a value
*/
export type Await<T> = Promise<T> | T
/**
* Options for async operations.
*/
export interface AbortOptions {
signal?: AbortSignal
}
export interface Store<Key, Value, Pair, HasOptionsExtension = {},
PutOptionsExtension = {}, PutManyOptionsExtension = {},
GetOptionsExtension = {}, GetManyOptionsExtension = {},
DeleteOptionsExtension = {}, DeleteManyOptionsExtension = {}> {
/**
* Check for the existence of a value for the passed key
*
* @example
* ```js
*const exists = await store.has(new Key('awesome'))
*
*if (exists) {
* console.log('it is there')
*} else {
* console.log('it is not there')
*}
*```
*/
has: (key: Key, options?: AbortOptions & HasOptionsExtension) => Await<boolean>
/**
* Store the passed value under the passed key
*
* @example
*
* ```js
* await store.put([{ key: new Key('awesome'), value: new Uint8Array([0, 1, 2, 3]) }])
* ```
*/
put: (key: Key, val: Value, options?: AbortOptions & PutOptionsExtension) => Await<Key>
/**
* Store the given key/value pairs
*
* @example
* ```js
* const source = [{ key: new Key('awesome'), value: new Uint8Array([0, 1, 2, 3]) }]
*
* for await (const { key, value } of store.putMany(source)) {
* console.info(`put content for key ${key}`)
* }
* ```
*/
putMany: (
source: AwaitIterable<Pair>,
options?: AbortOptions & PutManyOptionsExtension
) => AwaitIterable<Key>
/**
* Retrieve the value stored under the given key
*
* @example
* ```js
* const value = await store.get(new Key('awesome'))
* console.log('got content: %s', value.toString('utf8'))
* // => got content: datastore
* ```
*/
get: (key: Key, options?: AbortOptions & GetOptionsExtension) => Await<Value>
/**
* Retrieve values for the passed keys
*
* @example
* ```js
* for await (const { key, value } of store.getMany([new Key('awesome')])) {
* console.log(`got "${key}" = "${new TextDecoder('utf8').decode(value)}"`')
* // => got "/awesome" = "datastore"
* }
* ```
*/
getMany: (
source: AwaitIterable<Key>,
options?: AbortOptions & GetManyOptionsExtension
) => AwaitIterable<Pair>
/**
* Remove the record for the passed key
*
* @example
*
* ```js
* await store.delete(new Key('awesome'))
* console.log('deleted awesome content :(')
* ```
*/
delete: (key: Key, options?: AbortOptions & DeleteOptionsExtension) => Await<void>
/**
* Remove values for the passed keys
*
* @example
*
* ```js
* const source = [new Key('awesome')]
*
* for await (const key of store.deleteMany(source)) {
* console.log(`deleted content with key ${key}`)
* }
* ```
*/
deleteMany: (
source: AwaitIterable<Key>,
options?: AbortOptions & DeleteManyOptionsExtension
) => AwaitIterable<Key>
}