saito-js 0.0.5 → 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.
Files changed (87) hide show
  1. package/configs.js +2 -0
  2. package/configs.js.map +1 -0
  3. package/index.d.ts +5 -0
  4. package/index.d.ts.map +1 -0
  5. package/index.js +11 -0
  6. package/index.js.map +1 -0
  7. package/index.node.js +37 -0
  8. package/index.node.js.map +1 -0
  9. package/index.web.js +37 -0
  10. package/index.web.js.map +1 -0
  11. package/lib/block.js +33 -0
  12. package/lib/block.js.map +1 -0
  13. package/lib/blockchain.js +9 -0
  14. package/lib/blockchain.js.map +1 -0
  15. package/lib/custom/custom_shared_methods.js +70 -0
  16. package/lib/custom/custom_shared_methods.js.map +1 -0
  17. package/lib/custom/{shared_methods.web.ts → shared_methods.web.js} +31 -40
  18. package/lib/custom/shared_methods.web.js.map +1 -0
  19. package/lib/factory.js +28 -0
  20. package/lib/factory.js.map +1 -0
  21. package/lib/{peer.ts → peer.js} +12 -24
  22. package/lib/peer.js.map +1 -0
  23. package/lib/{saito_factory.ts → saito_factory.js} +2 -0
  24. package/lib/saito_factory.js.map +1 -0
  25. package/lib/{slip.ts → slip.js} +35 -63
  26. package/lib/slip.js.map +1 -0
  27. package/lib/{transaction.ts → transaction.js} +51 -76
  28. package/lib/transaction.js.map +1 -0
  29. package/lib/wallet.js +45 -0
  30. package/lib/wallet.js.map +1 -0
  31. package/package.json +2 -2
  32. package/{saito.ts → saito.js} +96 -198
  33. package/saito.js.map +1 -0
  34. package/shared_methods.js +2 -0
  35. package/shared_methods.js.map +1 -0
  36. package/tests/{index.test.ts → index.test.js} +2 -0
  37. package/tests/index.test.js.map +1 -0
  38. package/.github/workflows/publish.yml +0 -50
  39. package/.prettierrc.json +0 -3
  40. package/babel.config.json +0 -13
  41. package/configs.ts +0 -26
  42. package/dist/browser/index.js +0 -3669
  43. package/dist/server/index.js +0 -3731
  44. package/index.node.ts +0 -51
  45. package/index.web.ts +0 -47
  46. package/lib/block.ts +0 -42
  47. package/lib/blockchain.ts +0 -14
  48. package/lib/custom/custom_shared_methods.ts +0 -92
  49. package/lib/factory.ts +0 -32
  50. package/lib/wallet.ts +0 -61
  51. package/shared_methods.ts +0 -40
  52. package/tsconfig.json +0 -111
  53. package/tsconfig.testing.json +0 -19
  54. package/webpack.config.js +0 -136
  55. package/webpack.prod.config.js +0 -136
  56. /package/{dist/configs.d.ts → configs.d.ts} +0 -0
  57. /package/{dist/configs.d.ts.map → configs.d.ts.map} +0 -0
  58. /package/{dist/index.node.d.ts → index.node.d.ts} +0 -0
  59. /package/{dist/index.node.d.ts.map → index.node.d.ts.map} +0 -0
  60. /package/{dist/index.web.d.ts → index.web.d.ts} +0 -0
  61. /package/{dist/index.web.d.ts.map → index.web.d.ts.map} +0 -0
  62. /package/{dist/lib → lib}/block.d.ts +0 -0
  63. /package/{dist/lib → lib}/block.d.ts.map +0 -0
  64. /package/{dist/lib → lib}/blockchain.d.ts +0 -0
  65. /package/{dist/lib → lib}/blockchain.d.ts.map +0 -0
  66. /package/{dist/lib → lib}/custom/custom_shared_methods.d.ts +0 -0
  67. /package/{dist/lib → lib}/custom/custom_shared_methods.d.ts.map +0 -0
  68. /package/{dist/lib → lib}/custom/shared_methods.web.d.ts +0 -0
  69. /package/{dist/lib → lib}/custom/shared_methods.web.d.ts.map +0 -0
  70. /package/{dist/lib → lib}/factory.d.ts +0 -0
  71. /package/{dist/lib → lib}/factory.d.ts.map +0 -0
  72. /package/{dist/lib → lib}/peer.d.ts +0 -0
  73. /package/{dist/lib → lib}/peer.d.ts.map +0 -0
  74. /package/{dist/lib → lib}/saito_factory.d.ts +0 -0
  75. /package/{dist/lib → lib}/saito_factory.d.ts.map +0 -0
  76. /package/{dist/lib → lib}/slip.d.ts +0 -0
  77. /package/{dist/lib → lib}/slip.d.ts.map +0 -0
  78. /package/{dist/lib → lib}/transaction.d.ts +0 -0
  79. /package/{dist/lib → lib}/transaction.d.ts.map +0 -0
  80. /package/{dist/lib → lib}/wallet.d.ts +0 -0
  81. /package/{dist/lib → lib}/wallet.d.ts.map +0 -0
  82. /package/{dist/saito.d.ts → saito.d.ts} +0 -0
  83. /package/{dist/saito.d.ts.map → saito.d.ts.map} +0 -0
  84. /package/{dist/shared_methods.d.ts → shared_methods.d.ts} +0 -0
  85. /package/{dist/shared_methods.d.ts.map → shared_methods.d.ts.map} +0 -0
  86. /package/{dist/tests → tests}/index.test.d.ts +0 -0
  87. /package/{dist/tests → tests}/index.test.d.ts.map +0 -0
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"}
@@ -1,76 +1,68 @@
1
1
  import Saito from "../../saito";
2
-
3
2
  import CustomSharedMethods from "./custom_shared_methods";
4
-
5
3
  export default class WebSharedMethods extends CustomSharedMethods {
6
- connectToPeer(peerData: any): void {
4
+ connectToPeer(peerData) {
7
5
  let protocol = "ws";
8
6
  if (peerData.protocol === "https") {
9
7
  protocol = "wss";
10
8
  }
11
9
  let url = protocol + "://" + peerData.host + ":" + peerData.port + "/wsopen";
12
-
13
10
  try {
14
11
  console.log("connecting to " + url + "....");
15
12
  let socket = new WebSocket(url);
16
13
  socket.binaryType = "arraybuffer";
17
14
  let index = Saito.getInstance().addNewSocket(socket);
18
-
19
- socket.onmessage = (event: MessageEvent) => {
15
+ socket.onmessage = (event) => {
20
16
  // console.log("buffer : ", event.data);
21
17
  Saito.getLibInstance().process_msg_buffer_from_peer(new Uint8Array(event.data), index);
22
18
  };
23
-
24
19
  socket.onopen = () => {
25
20
  Saito.getLibInstance().process_new_peer(index, peerData);
26
21
  };
27
22
  socket.onclose = () => {
28
23
  Saito.getLibInstance().process_peer_disconnection(index);
29
24
  };
30
-
31
25
  console.log("connected to : " + url + " with peer index : " + index);
32
- } catch (e) {
26
+ }
27
+ catch (e) {
33
28
  console.error(e);
34
29
  }
35
30
  }
36
-
37
- disconnectFromPeer(peerIndex: bigint): void {
31
+ disconnectFromPeer(peerIndex) {
38
32
  Saito.getInstance().removeSocket(peerIndex);
39
33
  }
40
-
41
- fetchBlockFromPeer(url: string): Promise<Uint8Array> {
34
+ fetchBlockFromPeer(url) {
42
35
  return fetch(url)
43
- .then((res: any) => {
44
- return res.arrayBuffer();
45
- })
46
- .then((buffer: ArrayBuffer) => {
47
- return new Uint8Array(buffer);
48
- });
36
+ .then((res) => {
37
+ return res.arrayBuffer();
38
+ })
39
+ .then((buffer) => {
40
+ return new Uint8Array(buffer);
41
+ });
49
42
  }
50
-
51
- isExistingFile(key: string): boolean {
43
+ isExistingFile(key) {
52
44
  try {
53
45
  return !!localStorage.getItem(key);
54
- } catch (error) {
46
+ }
47
+ catch (error) {
55
48
  console.error(error);
56
49
  return false;
57
50
  }
58
51
  }
59
-
60
- loadBlockFileList(): Array<string> {
52
+ loadBlockFileList() {
61
53
  try {
62
54
  // console.log("loading block file list...");
63
55
  // let files = Object.keys(localStorage);
64
56
  // console.log("files : ", files);
65
57
  // return files;
66
58
  return [];
67
- } catch (e) {
59
+ }
60
+ catch (e) {
68
61
  console.error(e);
69
62
  return [];
70
63
  }
71
64
  }
72
-
73
- readValue(key: string): Uint8Array | null {
65
+ readValue(key) {
74
66
  try {
75
67
  let data = localStorage.getItem(key);
76
68
  if (!data) {
@@ -79,27 +71,26 @@ export default class WebSharedMethods extends CustomSharedMethods {
79
71
  }
80
72
  let buffer = Buffer.from(data, "base64");
81
73
  return new Uint8Array(buffer);
82
- } catch (error) {
74
+ }
75
+ catch (error) {
83
76
  console.error(error);
84
77
  return null;
85
78
  }
86
79
  }
87
-
88
- removeValue(key: string): void {
80
+ removeValue(key) {
89
81
  try {
90
82
  localStorage.removeItem(key);
91
- } catch (e) {
83
+ }
84
+ catch (e) {
92
85
  console.error(e);
93
86
  }
94
87
  }
95
-
96
- sendMessage(peerIndex: bigint, buffer: Uint8Array): void {
88
+ sendMessage(peerIndex, buffer) {
97
89
  console.debug("sending message to peer : " + peerIndex);
98
90
  let socket = Saito.getInstance().getSocket(peerIndex);
99
91
  socket.send(buffer);
100
92
  }
101
-
102
- sendMessageToAll(buffer: Uint8Array, exceptions: Array<bigint>): void {
93
+ sendMessageToAll(buffer, exceptions) {
103
94
  console.debug("sending message to all");
104
95
  Saito.getInstance().sockets.forEach((socket, key) => {
105
96
  if (exceptions.includes(key)) {
@@ -108,16 +99,16 @@ export default class WebSharedMethods extends CustomSharedMethods {
108
99
  socket.send(buffer);
109
100
  });
110
101
  }
111
-
112
- writeValue(key: string, value: Uint8Array): void {
102
+ writeValue(key, value) {
113
103
  try {
114
104
  localStorage.setItem(key, Buffer.from(value).toString("base64"));
115
- } catch (error) {
105
+ }
106
+ catch (error) {
116
107
  console.error(error);
117
108
  }
118
109
  }
119
-
120
- sendInterfaceEvent(event: String, peerIndex: bigint) {
110
+ sendInterfaceEvent(event, peerIndex) {
121
111
  throw new Error("Method not implemented.");
122
112
  }
123
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"}
@@ -1,50 +1,38 @@
1
- import type {WasmPeer} from "saito-wasm/dist/types/pkg/node/index_bg";
2
-
3
1
  export default class Peer {
4
- protected peer: WasmPeer;
5
- public static Type: any;
6
-
7
- constructor(peer?: WasmPeer, peerIndex?: bigint) {
2
+ constructor(peer, peerIndex) {
8
3
  if (peer) {
9
4
  this.peer = peer;
10
- } else {
5
+ }
6
+ else {
11
7
  this.peer = new Peer.Type(peerIndex);
12
8
  }
13
9
  }
14
-
15
- public get publicKey(): string {
10
+ get publicKey() {
16
11
  return this.peer.public_key;
17
12
  }
18
-
19
13
  // public set publicKey(key: string) {
20
14
  // this.peer.public_key = key;
21
15
  // }
22
-
23
- public get keyList(): Array<string> {
16
+ get keyList() {
24
17
  return this.peer.key_list;
25
18
  }
26
-
27
- public get peerIndex(): bigint {
19
+ get peerIndex() {
28
20
  return this.peer.peer_index;
29
21
  }
30
-
31
- public get synctype(): string {
22
+ get synctype() {
32
23
  return this.peer.sync_type;
33
24
  }
34
-
35
- public get services(): string[] {
25
+ get services() {
36
26
  return this.peer.services;
37
27
  }
38
-
39
- public set services(s: string[]) {
28
+ set services(s) {
40
29
  this.peer.services = s;
41
30
  }
42
-
43
- public hasService(service: string): boolean {
31
+ hasService(service) {
44
32
  return this.peer.has_service(service);
45
33
  }
46
-
47
- public isMainPeer(): boolean {
34
+ isMainPeer() {
48
35
  return this.peer.is_main_peer();
49
36
  }
50
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"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  // import Factory from "./factory";
2
3
  // import Block from "./block";
3
4
  // import Transaction from "./transaction";
@@ -16,3 +17,4 @@
16
17
  // return new Slip(data);
17
18
  // }
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"}