saito-js 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/configs.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=configs.js.map
package/configs.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configs.js","sourceRoot":"","sources":["../configs.ts"],"names":[],"mappings":""}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import Configs from "./configs";
2
+ import SharedMethods from "./shared_methods";
3
+ import Factory from "./lib/factory";
4
+ export declare function initialize(configs: Configs, sharedMethods: SharedMethods, factory: Factory, privateKey: string): Promise<void>;
5
+ //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,OAAO,MAAM,eAAe,CAAC;AAEpC,wBAAsB,UAAU,CAC9B,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,iBASnB"}
package/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export async function initialize(configs, sharedMethods, factory, privateKey) {
2
+ if (typeof window === "undefined") {
3
+ const saito = await import("./index.node");
4
+ return saito.default.initialize(configs, sharedMethods, factory, privateKey);
5
+ }
6
+ else {
7
+ const saito = await import("./index.web");
8
+ return saito.default.initialize(configs, sharedMethods, factory, privateKey);
9
+ }
10
+ }
11
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAgB,EAChB,aAA4B,EAC5B,OAAgB,EAChB,UAAkB;IAElB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;KAC9E;SAAM;QACL,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;KAC9E;AACH,CAAC"}
package/index.node.js ADDED
@@ -0,0 +1,37 @@
1
+ import Saito from "./saito";
2
+ import Transaction from "./lib/transaction";
3
+ import Slip from "./lib/slip";
4
+ import Block from "./lib/block";
5
+ import Peer from "./lib/peer";
6
+ import Wallet from "./lib/wallet";
7
+ import Blockchain from "./lib/blockchain";
8
+ const NODE_MAJOR_VERSION = parseInt(process.versions.node.split(".")[0]);
9
+ if (NODE_MAJOR_VERSION < 20) {
10
+ let cr = require("crypto");
11
+ globalThis.crypto = cr.webcrypto;
12
+ }
13
+ /**
14
+ *
15
+ * @param configs
16
+ * @param sharedMethods
17
+ */
18
+ export async function initialize(configs, sharedMethods, factory, privateKey) {
19
+ if (Saito.getLibInstance()) {
20
+ console.error("saito already initialized");
21
+ return;
22
+ }
23
+ console.log("initializing saito-js");
24
+ let saito = await import("saito-wasm/dist/server");
25
+ console.log("wasm lib loaded");
26
+ let s = await saito.default;
27
+ Saito.setLibInstance(s);
28
+ Transaction.Type = s.WasmTransaction;
29
+ Slip.Type = s.WasmSlip;
30
+ Block.Type = s.WasmBlock;
31
+ Peer.Type = s.WasmPeer;
32
+ Wallet.Type = s.WasmWallet;
33
+ Blockchain.Type = s.WasmBlockchain;
34
+ return Saito.initialize(configs, sharedMethods, factory, privateKey);
35
+ }
36
+ export default Saito;
37
+ //# sourceMappingURL=index.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.node.js","sourceRoot":"","sources":["../index.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAG5B,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAE1C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,IAAI,kBAAkB,GAAG,EAAE,EAAE;IAC3B,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAgB,EAChB,aAA4B,EAC5B,OAAgB,EAChB,UAAkB;IAElB,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,OAAO;KACR;IACD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,IAAI,KAAK,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAE/B,IAAI,CAAC,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;IAE5B,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAExB,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC,eAAe,CAAC;IACrC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;IACvB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC;IACzB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;IACvB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC;IAC3B,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC;IAEnC,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AACvE,CAAC;AAED,eAAe,KAAK,CAAC"}
package/index.web.js ADDED
@@ -0,0 +1,37 @@
1
+ import Saito from "./saito";
2
+ import Transaction from "./lib/transaction";
3
+ import Slip from "./lib/slip";
4
+ import Block from "./lib/block";
5
+ import Peer from "./lib/peer";
6
+ import Wallet from "./lib/wallet";
7
+ import Blockchain from "./lib/blockchain";
8
+ /**
9
+ *
10
+ * @param configs
11
+ * @param sharedMethods
12
+ */
13
+ export async function initialize(configs, sharedMethods, factory, privateKey) {
14
+ if (Saito.getLibInstance()) {
15
+ console.error("saito already initialized");
16
+ return;
17
+ }
18
+ console.log("initializing saito-js");
19
+ return import("saito-wasm/dist/browser")
20
+ .then((s) => {
21
+ return s.default;
22
+ })
23
+ .then((s) => {
24
+ Saito.setLibInstance(s);
25
+ return s.default().then(() => {
26
+ Transaction.Type = s.WasmTransaction;
27
+ Slip.Type = s.WasmSlip;
28
+ Block.Type = s.WasmBlock;
29
+ Peer.Type = s.WasmPeer;
30
+ Wallet.Type = s.WasmWallet;
31
+ Blockchain.Type = s.WasmBlockchain;
32
+ return Saito.initialize(configs, sharedMethods, factory, privateKey);
33
+ });
34
+ });
35
+ }
36
+ export default Saito;
37
+ //# sourceMappingURL=index.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.web.js","sourceRoot":"","sources":["../index.web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAG5B,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAgB,EAChB,aAA4B,EAC5B,OAAgB,EAChB,UAAkB;IAElB,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,OAAO;KACR;IACD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC,yBAAyB,CAAC;SACrC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE;QACf,OAAO,CAAC,CAAC,OAAO,CAAC;IACnB,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACV,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC3B,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC,eAAe,CAAC;YACrC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;YACvB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;YACvB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC;YAC3B,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC;YACnC,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,eAAe,KAAK,CAAC"}
package/lib/block.js ADDED
@@ -0,0 +1,33 @@
1
+ import Saito from "../saito";
2
+ export var BlockType;
3
+ (function (BlockType) {
4
+ BlockType[BlockType["Ghost"] = 0] = "Ghost";
5
+ BlockType[BlockType["Header"] = 1] = "Header";
6
+ BlockType[BlockType["Pruned"] = 2] = "Pruned";
7
+ BlockType[BlockType["Full"] = 3] = "Full";
8
+ })(BlockType || (BlockType = {}));
9
+ export default class Block {
10
+ constructor(block) {
11
+ if (block) {
12
+ this.block = block;
13
+ }
14
+ else {
15
+ this.block = Block.Type();
16
+ }
17
+ }
18
+ get transactions() {
19
+ return this.block.transactions.map(tx => {
20
+ return Saito.getInstance().factory.createTransaction(tx);
21
+ });
22
+ }
23
+ get id() {
24
+ return this.block.id;
25
+ }
26
+ get hash() {
27
+ return this.block.hash;
28
+ }
29
+ serialize() {
30
+ return this.block.serialize();
31
+ }
32
+ }
33
+ //# sourceMappingURL=block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../../lib/block.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,UAAU,CAAC;AAE7B,MAAM,CAAN,IAAY,SAKX;AALD,WAAY,SAAS;IACjB,2CAAS,CAAA;IACT,6CAAU,CAAA;IACV,6CAAU,CAAA;IACV,yCAAQ,CAAA;AACZ,CAAC,EALW,SAAS,KAAT,SAAS,QAKpB;AAGD,MAAM,CAAC,OAAO,OAAO,KAAK;IAItB,YAAY,KAAiB;QACzB,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB;aAAM;YACH,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;SAC7B;IACL,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACpC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAW,EAAE;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;CACJ"}
@@ -0,0 +1,9 @@
1
+ export default class Blockchain {
2
+ constructor(blockchain) {
3
+ this.blockchain = blockchain;
4
+ }
5
+ async reset() {
6
+ return this.blockchain.reset();
7
+ }
8
+ }
9
+ //# sourceMappingURL=blockchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockchain.js","sourceRoot":"","sources":["../../lib/blockchain.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,UAAU;IAI3B,YAAY,UAA0B;QAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,KAAK;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;CACJ"}
@@ -0,0 +1,70 @@
1
+ import Saito from "../../saito";
2
+ export default class CustomSharedMethods {
3
+ processApiCall(buffer, msgIndex, peerIndex) {
4
+ throw new Error("Method not implemented.");
5
+ }
6
+ connectToPeer(peerData) {
7
+ throw new Error("Method not implemented.");
8
+ }
9
+ disconnectFromPeer(peerIndex) {
10
+ throw new Error("Method not implemented.");
11
+ }
12
+ fetchBlockFromPeer(url) {
13
+ throw new Error("Method not implemented.");
14
+ }
15
+ isExistingFile(key) {
16
+ throw new Error("Method not implemented.");
17
+ }
18
+ loadBlockFileList() {
19
+ throw new Error("Method not implemented.");
20
+ }
21
+ processApiError(buffer, msgIndex, peerIndex) {
22
+ let promise = Saito.getInstance().promises.get(msgIndex);
23
+ if (promise) {
24
+ promise.reject(buffer);
25
+ }
26
+ else {
27
+ console.error("callback not found for callback index : " + msgIndex + " from peer : " + peerIndex);
28
+ }
29
+ }
30
+ processApiSuccess(buffer, msgIndex, peerIndex) {
31
+ let promise = Saito.getInstance().promises.get(msgIndex);
32
+ if (promise) {
33
+ promise.resolve(buffer);
34
+ }
35
+ else {
36
+ console.error("callback not found for callback index : " + msgIndex + " from peer : " + peerIndex);
37
+ }
38
+ }
39
+ readValue(key) {
40
+ throw new Error("Method not implemented.");
41
+ }
42
+ removeValue(key) {
43
+ throw new Error("Method not implemented.");
44
+ }
45
+ sendMessage(peerIndex, buffer) {
46
+ throw new Error("Method not implemented.");
47
+ }
48
+ sendMessageToAll(buffer, exceptions) {
49
+ throw new Error("Method not implemented.");
50
+ }
51
+ writeValue(key, value) {
52
+ throw new Error("Method not implemented.");
53
+ }
54
+ sendInterfaceEvent(event, peerIndex) {
55
+ throw new Error("Method not implemented.");
56
+ }
57
+ saveWallet() {
58
+ throw new Error("Method not implemented.");
59
+ }
60
+ loadWallet() {
61
+ throw new Error("Method not implemented.");
62
+ }
63
+ saveBlockchain() {
64
+ throw new Error("Method not implemented.");
65
+ }
66
+ loadBlockchain() {
67
+ throw new Error("Method not implemented.");
68
+ }
69
+ }
70
+ //# sourceMappingURL=custom_shared_methods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom_shared_methods.js","sourceRoot":"","sources":["../../../lib/custom/custom_shared_methods.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,aAAa,CAAC;AAIhC,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACtC,cAAc,CAAC,MAAkB,EAAE,QAAgB,EAAE,SAAiB;QACpE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,QAAa;QACzB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,kBAAkB,CAAC,SAAiB;QAClC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,kBAAkB,CAAC,GAAW;QAC5B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,iBAAiB;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe,CAAC,MAAkB,EAAE,QAAgB,EAAE,SAAiB;QACrE,IAAI,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACxB;aAAM;YACL,OAAO,CAAC,KAAK,CACX,0CAA0C,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,CACpF,CAAC;SACH;IACH,CAAC;IAED,iBAAiB,CAAC,MAAkB,EAAE,QAAgB,EAAE,SAAiB;QACvE,IAAI,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACzB;aAAM;YACL,OAAO,CAAC,KAAK,CACX,0CAA0C,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,CACpF,CAAC;SACH;IACH,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,MAAkB;QAC/C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB,CAAC,MAAkB,EAAE,UAAyB;QAC5D,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,UAAU,CAAC,GAAW,EAAE,KAAiB;QACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,SAAiB;QACjD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,UAAU;QACR,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,UAAU;QACR,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc;QACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc;QACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,114 @@
1
+ import Saito from "../../saito";
2
+ import CustomSharedMethods from "./custom_shared_methods";
3
+ export default class WebSharedMethods extends CustomSharedMethods {
4
+ connectToPeer(peerData) {
5
+ let protocol = "ws";
6
+ if (peerData.protocol === "https") {
7
+ protocol = "wss";
8
+ }
9
+ let url = protocol + "://" + peerData.host + ":" + peerData.port + "/wsopen";
10
+ try {
11
+ console.log("connecting to " + url + "....");
12
+ let socket = new WebSocket(url);
13
+ socket.binaryType = "arraybuffer";
14
+ let index = Saito.getInstance().addNewSocket(socket);
15
+ socket.onmessage = (event) => {
16
+ // console.log("buffer : ", event.data);
17
+ Saito.getLibInstance().process_msg_buffer_from_peer(new Uint8Array(event.data), index);
18
+ };
19
+ socket.onopen = () => {
20
+ Saito.getLibInstance().process_new_peer(index, peerData);
21
+ };
22
+ socket.onclose = () => {
23
+ Saito.getLibInstance().process_peer_disconnection(index);
24
+ };
25
+ console.log("connected to : " + url + " with peer index : " + index);
26
+ }
27
+ catch (e) {
28
+ console.error(e);
29
+ }
30
+ }
31
+ disconnectFromPeer(peerIndex) {
32
+ Saito.getInstance().removeSocket(peerIndex);
33
+ }
34
+ fetchBlockFromPeer(url) {
35
+ return fetch(url)
36
+ .then((res) => {
37
+ return res.arrayBuffer();
38
+ })
39
+ .then((buffer) => {
40
+ return new Uint8Array(buffer);
41
+ });
42
+ }
43
+ isExistingFile(key) {
44
+ try {
45
+ return !!localStorage.getItem(key);
46
+ }
47
+ catch (error) {
48
+ console.error(error);
49
+ return false;
50
+ }
51
+ }
52
+ loadBlockFileList() {
53
+ try {
54
+ // console.log("loading block file list...");
55
+ // let files = Object.keys(localStorage);
56
+ // console.log("files : ", files);
57
+ // return files;
58
+ return [];
59
+ }
60
+ catch (e) {
61
+ console.error(e);
62
+ return [];
63
+ }
64
+ }
65
+ readValue(key) {
66
+ try {
67
+ let data = localStorage.getItem(key);
68
+ if (!data) {
69
+ console.log("item not found for key : " + key);
70
+ return null;
71
+ }
72
+ let buffer = Buffer.from(data, "base64");
73
+ return new Uint8Array(buffer);
74
+ }
75
+ catch (error) {
76
+ console.error(error);
77
+ return null;
78
+ }
79
+ }
80
+ removeValue(key) {
81
+ try {
82
+ localStorage.removeItem(key);
83
+ }
84
+ catch (e) {
85
+ console.error(e);
86
+ }
87
+ }
88
+ sendMessage(peerIndex, buffer) {
89
+ console.debug("sending message to peer : " + peerIndex);
90
+ let socket = Saito.getInstance().getSocket(peerIndex);
91
+ socket.send(buffer);
92
+ }
93
+ sendMessageToAll(buffer, exceptions) {
94
+ console.debug("sending message to all");
95
+ Saito.getInstance().sockets.forEach((socket, key) => {
96
+ if (exceptions.includes(key)) {
97
+ return;
98
+ }
99
+ socket.send(buffer);
100
+ });
101
+ }
102
+ writeValue(key, value) {
103
+ try {
104
+ localStorage.setItem(key, Buffer.from(value).toString("base64"));
105
+ }
106
+ catch (error) {
107
+ console.error(error);
108
+ }
109
+ }
110
+ sendInterfaceEvent(event, peerIndex) {
111
+ throw new Error("Method not implemented.");
112
+ }
113
+ }
114
+ //# sourceMappingURL=shared_methods.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared_methods.web.js","sourceRoot":"","sources":["../../../lib/custom/shared_methods.web.ts"],"names":[],"mappings":"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"}
package/lib/factory.js ADDED
@@ -0,0 +1,28 @@
1
+ import Block from "./block";
2
+ import Transaction from "./transaction";
3
+ import Slip from "./slip";
4
+ import Peer from "./peer";
5
+ import Wallet from "./wallet";
6
+ import Blockchain from "./blockchain";
7
+ export default class Factory {
8
+ constructor() { }
9
+ createBlock(data) {
10
+ return new Block(data);
11
+ }
12
+ createTransaction(data) {
13
+ return new Transaction(data);
14
+ }
15
+ createSlip(data) {
16
+ return new Slip(data);
17
+ }
18
+ createPeer(data) {
19
+ return new Peer(data);
20
+ }
21
+ createWallet(data) {
22
+ return new Wallet(data);
23
+ }
24
+ createBlockchain(data) {
25
+ return new Blockchain(data);
26
+ }
27
+ }
28
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../lib/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,OAAO;IAC1B,gBAAe,CAAC;IAET,WAAW,CAAC,IAAU;QAC3B,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEM,iBAAiB,CAAwB,IAAU;QACxD,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEM,UAAU,CAAC,IAAU;QAC1B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAEM,UAAU,CAAC,IAAU;QAC1B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACM,YAAY,CAAC,IAAS;QAC3B,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACM,gBAAgB,CAAC,IAAS;QAC/B,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF"}
package/lib/peer.js ADDED
@@ -0,0 +1,38 @@
1
+ export default class Peer {
2
+ constructor(peer, peerIndex) {
3
+ if (peer) {
4
+ this.peer = peer;
5
+ }
6
+ else {
7
+ this.peer = new Peer.Type(peerIndex);
8
+ }
9
+ }
10
+ get publicKey() {
11
+ return this.peer.public_key;
12
+ }
13
+ // public set publicKey(key: string) {
14
+ // this.peer.public_key = key;
15
+ // }
16
+ get keyList() {
17
+ return this.peer.key_list;
18
+ }
19
+ get peerIndex() {
20
+ return this.peer.peer_index;
21
+ }
22
+ get synctype() {
23
+ return this.peer.sync_type;
24
+ }
25
+ get services() {
26
+ return this.peer.services;
27
+ }
28
+ set services(s) {
29
+ this.peer.services = s;
30
+ }
31
+ hasService(service) {
32
+ return this.peer.has_service(service);
33
+ }
34
+ isMainPeer() {
35
+ return this.peer.is_main_peer();
36
+ }
37
+ }
38
+ //# sourceMappingURL=peer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer.js","sourceRoot":"","sources":["../../lib/peer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,IAAI;IAIrB,YAAY,IAAe,EAAE,SAAkB;QAC3C,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;aAAM;YACH,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxC;IACL,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAChC,CAAC;IAED,sCAAsC;IACtC,kCAAkC;IAClC,IAAI;IAEJ,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAChC,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,IAAW,QAAQ,CAAC,CAAW;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEM,UAAU,CAAC,OAAe;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEM,UAAU;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;CACJ"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ // import Factory from "./factory";
3
+ // import Block from "./block";
4
+ // import Transaction from "./transaction";
5
+ // import Slip from "./slip";
6
+ //
7
+ // export default class SaitoFactory extends Factory {
8
+ // public createBlock(data: any): Block {
9
+ // return new Block(data);
10
+ // }
11
+ //
12
+ // public createTransaction(data: any): Transaction {
13
+ // return new Transaction(data);
14
+ // }
15
+ //
16
+ // public createSlip(data: any): Slip {
17
+ // return new Slip(data);
18
+ // }
19
+ // }
20
+ //# sourceMappingURL=saito_factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saito_factory.js","sourceRoot":"","sources":["../../lib/saito_factory.ts"],"names":[],"mappings":";AAAA,mCAAmC;AACnC,+BAA+B;AAC/B,2CAA2C;AAC3C,6BAA6B;AAC7B,EAAE;AACF,sDAAsD;AACtD,6CAA6C;AAC7C,kCAAkC;AAClC,QAAQ;AACR,EAAE;AACF,yDAAyD;AACzD,wCAAwC;AACxC,QAAQ;AACR,EAAE;AACF,2CAA2C;AAC3C,iCAAiC;AACjC,QAAQ;AACR,IAAI"}
package/lib/slip.js ADDED
@@ -0,0 +1,91 @@
1
+ export var SlipType;
2
+ (function (SlipType) {
3
+ SlipType[SlipType["Normal"] = 0] = "Normal";
4
+ SlipType[SlipType["ATR"] = 1] = "ATR";
5
+ SlipType[SlipType["VipInput"] = 2] = "VipInput";
6
+ SlipType[SlipType["VipOutput"] = 3] = "VipOutput";
7
+ SlipType[SlipType["MinerInput"] = 4] = "MinerInput";
8
+ SlipType[SlipType["MinerOutput"] = 5] = "MinerOutput";
9
+ SlipType[SlipType["RouterInput"] = 6] = "RouterInput";
10
+ SlipType[SlipType["RouterOutput"] = 7] = "RouterOutput";
11
+ SlipType[SlipType["Other"] = 8] = "Other";
12
+ })(SlipType || (SlipType = {}));
13
+ export default class Slip {
14
+ constructor(slip, json) {
15
+ if (!slip) {
16
+ this.slip = new Slip.Type();
17
+ }
18
+ else {
19
+ this.slip = slip;
20
+ }
21
+ if (json) {
22
+ this.publicKey = json.publicKey;
23
+ this.type = json.type;
24
+ this.amount = json.amount;
25
+ this.index = json.index;
26
+ this.blockId = json.blockId;
27
+ this.txOrdinal = json.txOrdinal;
28
+ this.utxoKey = json.utxoKey;
29
+ }
30
+ }
31
+ get wasmSlip() {
32
+ return this.slip;
33
+ }
34
+ get type() {
35
+ return this.slip.slip_type;
36
+ }
37
+ set type(type) {
38
+ this.slip.slip_type = type;
39
+ }
40
+ get amount() {
41
+ return this.slip.amount;
42
+ }
43
+ set amount(amount) {
44
+ this.slip.amount = BigInt(amount);
45
+ }
46
+ get publicKey() {
47
+ return this.slip.public_key;
48
+ }
49
+ set publicKey(key) {
50
+ this.slip.public_key = key;
51
+ }
52
+ set index(index) {
53
+ this.slip.slip_index = index;
54
+ }
55
+ get index() {
56
+ return this.slip.slip_index;
57
+ }
58
+ set blockId(id) {
59
+ this.slip.block_id = id;
60
+ }
61
+ get blockId() {
62
+ return this.slip.block_id;
63
+ }
64
+ set txOrdinal(ordinal) {
65
+ this.slip.tx_ordinal = ordinal;
66
+ }
67
+ get txOrdinal() {
68
+ return this.slip.tx_ordinal;
69
+ }
70
+ set utxoKey(key) {
71
+ this.slip.utxo_key = key;
72
+ }
73
+ get utxoKey() {
74
+ return this.slip.utxo_key;
75
+ }
76
+ toJson() {
77
+ return {
78
+ publicKey: this.publicKey,
79
+ type: this.type,
80
+ amount: this.amount,
81
+ index: this.index,
82
+ blockId: this.blockId,
83
+ txOrdinal: this.txOrdinal,
84
+ utxoKey: this.utxoKey,
85
+ };
86
+ }
87
+ clone() {
88
+ return new Slip(undefined, this.toJson());
89
+ }
90
+ }
91
+ //# sourceMappingURL=slip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slip.js","sourceRoot":"","sources":["../../lib/slip.ts"],"names":[],"mappings":"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"}