@buildonspark/issuer-sdk 0.0.0
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/dist/issuer-sdk.d.ts +41 -0
- package/dist/issuer-sdk.js +103 -0
- package/dist/issuer-sdk.js.map +1 -0
- package/dist/proto/common.d.ts +58 -0
- package/dist/proto/common.js +350 -0
- package/dist/proto/common.js.map +1 -0
- package/dist/proto/google/protobuf/descriptor.d.ts +1228 -0
- package/dist/proto/google/protobuf/descriptor.js +5070 -0
- package/dist/proto/google/protobuf/descriptor.js.map +1 -0
- package/dist/proto/google/protobuf/duration.d.ts +99 -0
- package/dist/proto/google/protobuf/duration.js +90 -0
- package/dist/proto/google/protobuf/duration.js.map +1 -0
- package/dist/proto/google/protobuf/empty.d.ts +33 -0
- package/dist/proto/google/protobuf/empty.js +46 -0
- package/dist/proto/google/protobuf/empty.js.map +1 -0
- package/dist/proto/google/protobuf/timestamp.d.ts +128 -0
- package/dist/proto/google/protobuf/timestamp.js +90 -0
- package/dist/proto/google/protobuf/timestamp.js.map +1 -0
- package/dist/proto/mock.d.ts +48 -0
- package/dist/proto/mock.js +103 -0
- package/dist/proto/mock.js.map +1 -0
- package/dist/proto/spark.d.ts +1101 -0
- package/dist/proto/spark.js +9565 -0
- package/dist/proto/spark.js.map +1 -0
- package/dist/proto/spark_authn.d.ts +111 -0
- package/dist/proto/spark_authn.js +517 -0
- package/dist/proto/spark_authn.js.map +1 -0
- package/dist/proto/validate/validate.d.ts +1087 -0
- package/dist/proto/validate/validate.js +4437 -0
- package/dist/proto/validate/validate.js.map +1 -0
- package/dist/services/create.d.ts +1 -0
- package/dist/services/create.js +41 -0
- package/dist/services/create.js.map +1 -0
- package/dist/services/freeze.d.ts +11 -0
- package/dist/services/freeze.js +44 -0
- package/dist/services/freeze.js.map +1 -0
- package/dist/services/spark/token-transactions.d.ts +8 -0
- package/dist/services/spark/token-transactions.js +27 -0
- package/dist/services/spark/token-transactions.js.map +1 -0
- package/dist/services/spark/wallet.d.ts +21 -0
- package/dist/services/spark/wallet.js +55 -0
- package/dist/services/spark/wallet.js.map +1 -0
- package/dist/tests/integration/spark.test.d.ts +1 -0
- package/dist/tests/integration/spark.test.js +120 -0
- package/dist/tests/integration/spark.test.js.map +1 -0
- package/dist/utils/token-hashing.d.ts +2 -0
- package/dist/utils/token-hashing.js +45 -0
- package/dist/utils/token-hashing.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { bytesToNumberBE, hexToBytes } from "@noble/curves/abstract/utils";
|
|
2
|
+
import { SparkWallet } from "@buildonspark/spark-sdk";
|
|
3
|
+
import { IssuerTokenTransactionService } from "./token-transactions.js";
|
|
4
|
+
import { TokenFreezeService } from "../freeze.js";
|
|
5
|
+
const BURN_ADDRESS = "020202020202020202020202020202020202020202020202020202020202020202";
|
|
6
|
+
export class IssuerSparkWallet extends SparkWallet {
|
|
7
|
+
issuerTokenTransactionService;
|
|
8
|
+
tokenFreezeService;
|
|
9
|
+
constructor(network, signer) {
|
|
10
|
+
super(network, signer);
|
|
11
|
+
this.issuerTokenTransactionService = new IssuerTokenTransactionService(this.config, this.connectionManager);
|
|
12
|
+
this.tokenFreezeService = new TokenFreezeService(this.config, this.connectionManager);
|
|
13
|
+
}
|
|
14
|
+
async mintIssuerTokens(tokenAmount) {
|
|
15
|
+
var tokenPublicKey = await super.getIdentityPublicKey();
|
|
16
|
+
const tokenTransaction = await this.issuerTokenTransactionService.constructMintTokenTransaction(hexToBytes(tokenPublicKey), tokenAmount);
|
|
17
|
+
await this.issuerTokenTransactionService.broadcastTokenTransaction(tokenTransaction);
|
|
18
|
+
if (!this.tokenLeaves.has(tokenPublicKey)) {
|
|
19
|
+
this.tokenLeaves.set(tokenPublicKey, []);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async transferIssuerTokens(tokenAmount, recipientPublicKey) {
|
|
23
|
+
const tokenPublicKey = await super.getIdentityPublicKey();
|
|
24
|
+
await super.transferTokens(tokenPublicKey, tokenAmount, recipientPublicKey);
|
|
25
|
+
}
|
|
26
|
+
async consolidateIssuerTokenLeaves() {
|
|
27
|
+
const tokenPublicKey = await super.getIdentityPublicKey();
|
|
28
|
+
await super.consolidateTokenLeaves(tokenPublicKey);
|
|
29
|
+
}
|
|
30
|
+
async burnIssuerTokens(tokenAmount, selectedLeaves) {
|
|
31
|
+
await this.transferTokens(await this.getIdentityPublicKey(), tokenAmount, BURN_ADDRESS, selectedLeaves);
|
|
32
|
+
}
|
|
33
|
+
async freezeIssuerTokens(ownerPublicKey) {
|
|
34
|
+
await this.syncTokenLeaves();
|
|
35
|
+
const tokenPublicKey = await super.getIdentityPublicKey();
|
|
36
|
+
const response = await this.tokenFreezeService.freezeTokens(hexToBytes(ownerPublicKey), hexToBytes(tokenPublicKey));
|
|
37
|
+
// Convert the Uint8Array to a bigint
|
|
38
|
+
const tokenAmount = bytesToNumberBE(response.impactedTokenAmount);
|
|
39
|
+
return {
|
|
40
|
+
impactedLeafIds: response.impactedLeafIds,
|
|
41
|
+
impactedTokenAmount: tokenAmount,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async unfreezeIssuerTokens(ownerPublicKey) {
|
|
45
|
+
await this.syncTokenLeaves();
|
|
46
|
+
const tokenPublicKey = await super.getIdentityPublicKey();
|
|
47
|
+
const response = await this.tokenFreezeService.unfreezeTokens(hexToBytes(ownerPublicKey), hexToBytes(tokenPublicKey));
|
|
48
|
+
const tokenAmount = bytesToNumberBE(response.impactedTokenAmount);
|
|
49
|
+
return {
|
|
50
|
+
impactedLeafIds: response.impactedLeafIds,
|
|
51
|
+
impactedTokenAmount: tokenAmount,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/services/spark/wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { IssuerSparkWallet } from "../../services/spark/wallet.js";
|
|
2
|
+
import { Network } from "@buildonspark/spark-sdk/utils";
|
|
3
|
+
import { wordlist } from "@scure/bip39/wordlists/english";
|
|
4
|
+
import { generateMnemonic } from "@scure/bip39";
|
|
5
|
+
import { SparkWallet } from "@buildonspark/spark-sdk";
|
|
6
|
+
describe("token integration test", () => {
|
|
7
|
+
// Skip all tests if running in GitHub Actions
|
|
8
|
+
process.env.GITHUB_ACTIONS ? it.skip : it;
|
|
9
|
+
it("should issue a single token", async () => {
|
|
10
|
+
const tokenAmount = 1000n;
|
|
11
|
+
const wallet = new IssuerSparkWallet(Network.LOCAL);
|
|
12
|
+
const mnemonic = generateMnemonic(wordlist);
|
|
13
|
+
await wallet.initWalletFromMnemonic(mnemonic);
|
|
14
|
+
await wallet.mintIssuerTokens(tokenAmount);
|
|
15
|
+
const tokenBalance = await wallet.getTokenBalance(await wallet.getIdentityPublicKey());
|
|
16
|
+
expect(tokenBalance).toEqual(tokenAmount);
|
|
17
|
+
});
|
|
18
|
+
it("should issue a single token and transfer it", async () => {
|
|
19
|
+
const tokenAmount = 1000n;
|
|
20
|
+
const issuerWallet = new IssuerSparkWallet(Network.LOCAL);
|
|
21
|
+
const mnemonic = generateMnemonic(wordlist);
|
|
22
|
+
await issuerWallet.initWalletFromMnemonic(mnemonic);
|
|
23
|
+
const destinationWallet = new SparkWallet(Network.LOCAL);
|
|
24
|
+
const destinationMnemonic = generateMnemonic(wordlist);
|
|
25
|
+
await destinationWallet.initWalletFromMnemonic(destinationMnemonic);
|
|
26
|
+
await issuerWallet.mintIssuerTokens(tokenAmount);
|
|
27
|
+
await issuerWallet.transferIssuerTokens(tokenAmount, await destinationWallet.getIdentityPublicKey());
|
|
28
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
29
|
+
const sourceBalance = await issuerWallet.getTokenBalance(await issuerWallet.getIdentityPublicKey());
|
|
30
|
+
expect(sourceBalance).toEqual(0n);
|
|
31
|
+
const tokenPublicKey = await issuerWallet.getIdentityPublicKey();
|
|
32
|
+
const destinationBalance = await destinationWallet.getTokenBalance(tokenPublicKey);
|
|
33
|
+
expect(destinationBalance).toEqual(tokenAmount);
|
|
34
|
+
});
|
|
35
|
+
it("should consolidate three token leaves", async () => {
|
|
36
|
+
const tokenAmount = 1000n;
|
|
37
|
+
const wallet = new IssuerSparkWallet(Network.LOCAL);
|
|
38
|
+
const mnemonic = generateMnemonic(wordlist);
|
|
39
|
+
await wallet.initWalletFromMnemonic(mnemonic);
|
|
40
|
+
await wallet.mintIssuerTokens(tokenAmount);
|
|
41
|
+
await wallet.mintIssuerTokens(tokenAmount);
|
|
42
|
+
await wallet.mintIssuerTokens(tokenAmount);
|
|
43
|
+
const identityPublicKey = await wallet.getIdentityPublicKey();
|
|
44
|
+
const balanceBeforeConsolidation = await wallet.getTokenBalance(await wallet.getIdentityPublicKey());
|
|
45
|
+
const leavesBeforeConsolidation = await wallet.getAllTokenLeaves();
|
|
46
|
+
expect(balanceBeforeConsolidation).toEqual(tokenAmount * 3n);
|
|
47
|
+
expect(leavesBeforeConsolidation.get(identityPublicKey)?.length || 0).toEqual(3);
|
|
48
|
+
await wallet.consolidateIssuerTokenLeaves();
|
|
49
|
+
const balanceAfterConsolidation = await wallet.getTokenBalance(await wallet.getIdentityPublicKey());
|
|
50
|
+
const leavesAfterConsolidation = await wallet.getAllTokenLeaves();
|
|
51
|
+
expect(balanceAfterConsolidation).toEqual(tokenAmount * 3n);
|
|
52
|
+
expect(leavesAfterConsolidation.get(identityPublicKey)?.length || 0).toEqual(1);
|
|
53
|
+
});
|
|
54
|
+
it("should freeze tokens", async () => {
|
|
55
|
+
const tokenAmount = 1000n;
|
|
56
|
+
const issuerWallet = new IssuerSparkWallet(Network.LOCAL);
|
|
57
|
+
const issuerMnemonic = generateMnemonic(wordlist);
|
|
58
|
+
await issuerWallet.initWalletFromMnemonic(issuerMnemonic);
|
|
59
|
+
await issuerWallet.mintIssuerTokens(tokenAmount);
|
|
60
|
+
// Check issuer balance after minting
|
|
61
|
+
const issuerBalanceAfterMint = await issuerWallet.getTokenBalance(await issuerWallet.getIdentityPublicKey());
|
|
62
|
+
expect(issuerBalanceAfterMint).toEqual(tokenAmount);
|
|
63
|
+
const userWallet = new IssuerSparkWallet(Network.LOCAL);
|
|
64
|
+
const userMnemonic = generateMnemonic(wordlist);
|
|
65
|
+
await userWallet.initWalletFromMnemonic(userMnemonic);
|
|
66
|
+
const userWalletPublicKey = await userWallet.getIdentityPublicKey();
|
|
67
|
+
await issuerWallet.transferIssuerTokens(tokenAmount, userWalletPublicKey);
|
|
68
|
+
const issuerBalanceAfterTransfer = await issuerWallet.getTokenBalance(await issuerWallet.getIdentityPublicKey());
|
|
69
|
+
expect(issuerBalanceAfterTransfer).toEqual(0n);
|
|
70
|
+
const tokenPublicKey = await issuerWallet.getIdentityPublicKey();
|
|
71
|
+
const userBalanceAfterTransfer = await userWallet.getTokenBalance(tokenPublicKey);
|
|
72
|
+
expect(userBalanceAfterTransfer).toEqual(tokenAmount);
|
|
73
|
+
const freezeResult = await issuerWallet.freezeIssuerTokens(userWalletPublicKey);
|
|
74
|
+
expect(freezeResult.impactedLeafIds.length).toBe(1);
|
|
75
|
+
expect(freezeResult.impactedTokenAmount).toBe(1000n);
|
|
76
|
+
const unfreezeResult = await issuerWallet.unfreezeIssuerTokens(userWalletPublicKey);
|
|
77
|
+
expect(unfreezeResult.impactedLeafIds.length).toBe(1);
|
|
78
|
+
expect(unfreezeResult.impactedTokenAmount).toBe(1000n);
|
|
79
|
+
});
|
|
80
|
+
it("should burn tokens", async () => {
|
|
81
|
+
const tokenAmount = 200n;
|
|
82
|
+
const issuerWallet = new IssuerSparkWallet(Network.LOCAL);
|
|
83
|
+
const issuerMnemonic = generateMnemonic(wordlist);
|
|
84
|
+
await issuerWallet.initWalletFromMnemonic(issuerMnemonic);
|
|
85
|
+
await issuerWallet.mintIssuerTokens(tokenAmount);
|
|
86
|
+
const issuerTokenBalance = await issuerWallet.getTokenBalance(await issuerWallet.getIdentityPublicKey());
|
|
87
|
+
expect(issuerTokenBalance).toEqual(tokenAmount);
|
|
88
|
+
await issuerWallet.burnIssuerTokens(tokenAmount);
|
|
89
|
+
const issuerTokenBalanceAfterBurn = await issuerWallet.getTokenBalance(await issuerWallet.getIdentityPublicKey());
|
|
90
|
+
expect(issuerTokenBalanceAfterBurn).toEqual(0n);
|
|
91
|
+
});
|
|
92
|
+
it("mint, transfer to user, user transfer to issuer, burn", async () => {
|
|
93
|
+
const tokenAmount = 1000n;
|
|
94
|
+
const issuerWallet = new IssuerSparkWallet(Network.LOCAL);
|
|
95
|
+
const issuerMnemonic = generateMnemonic(wordlist);
|
|
96
|
+
await issuerWallet.initWalletFromMnemonic(issuerMnemonic);
|
|
97
|
+
const userWallet = new SparkWallet(Network.LOCAL);
|
|
98
|
+
const userMnemonic = generateMnemonic(wordlist);
|
|
99
|
+
await userWallet.initWalletFromMnemonic(userMnemonic);
|
|
100
|
+
await issuerWallet.mintIssuerTokens(tokenAmount);
|
|
101
|
+
const issuerBalanceAfterMint = await issuerWallet.getTokenBalance(await issuerWallet.getIdentityPublicKey());
|
|
102
|
+
expect(issuerBalanceAfterMint).toEqual(tokenAmount);
|
|
103
|
+
const userWalletPublicKey = await userWallet.getIdentityPublicKey();
|
|
104
|
+
await issuerWallet.transferIssuerTokens(tokenAmount, userWalletPublicKey);
|
|
105
|
+
const issuerBalanceAfterTransfer = await issuerWallet.getTokenBalance(await issuerWallet.getIdentityPublicKey());
|
|
106
|
+
expect(issuerBalanceAfterTransfer).toEqual(0n);
|
|
107
|
+
const tokenPublicKeyHex = await issuerWallet.getIdentityPublicKey();
|
|
108
|
+
const userBalanceAfterTransfer = await userWallet.getTokenBalance(tokenPublicKeyHex);
|
|
109
|
+
expect(userBalanceAfterTransfer).toEqual(tokenAmount);
|
|
110
|
+
await userWallet.transferTokens(tokenPublicKeyHex, tokenAmount, tokenPublicKeyHex);
|
|
111
|
+
const userBalanceAfterTransferBack = await userWallet.getTokenBalance(tokenPublicKeyHex);
|
|
112
|
+
expect(userBalanceAfterTransferBack).toEqual(0n);
|
|
113
|
+
const issuerTokenBalance = await issuerWallet.getTokenBalance(tokenPublicKeyHex);
|
|
114
|
+
expect(issuerTokenBalance).toEqual(tokenAmount);
|
|
115
|
+
await issuerWallet.burnIssuerTokens(tokenAmount);
|
|
116
|
+
const issuerTokenBalanceAfterBurn = await issuerWallet.getTokenBalance(tokenPublicKeyHex);
|
|
117
|
+
expect(issuerTokenBalanceAfterBurn).toEqual(0n);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=spark.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spark.test.js","sourceRoot":"","sources":["../../../src/tests/integration/spark.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { sha256 } from "@scure/btc-signer/utils";
|
|
2
|
+
export function hashFreezeTokensPayload(payload) {
|
|
3
|
+
if (!payload) {
|
|
4
|
+
throw new Error("freeze tokens payload cannot be nil");
|
|
5
|
+
}
|
|
6
|
+
let allHashes = [];
|
|
7
|
+
// Hash owner public key
|
|
8
|
+
const ownerPubKeyHash = sha256.create();
|
|
9
|
+
if (payload.ownerPublicKey) {
|
|
10
|
+
ownerPubKeyHash.update(payload.ownerPublicKey);
|
|
11
|
+
}
|
|
12
|
+
allHashes.push(ownerPubKeyHash.digest());
|
|
13
|
+
// Hash token public key
|
|
14
|
+
const tokenPubKeyHash = sha256.create();
|
|
15
|
+
if (payload.tokenPublicKey) {
|
|
16
|
+
tokenPubKeyHash.update(payload.tokenPublicKey);
|
|
17
|
+
}
|
|
18
|
+
allHashes.push(tokenPubKeyHash.digest());
|
|
19
|
+
// Hash shouldUnfreeze
|
|
20
|
+
const shouldUnfreezeHash = sha256.create();
|
|
21
|
+
shouldUnfreezeHash.update(new Uint8Array([payload.shouldUnfreeze ? 1 : 0]));
|
|
22
|
+
allHashes.push(shouldUnfreezeHash.digest());
|
|
23
|
+
// Hash timestamp
|
|
24
|
+
const timestampHash = sha256.create();
|
|
25
|
+
if (payload.issuerProvidedTimestamp) {
|
|
26
|
+
const timestampBytes = new Uint8Array(8);
|
|
27
|
+
new DataView(timestampBytes.buffer).setBigUint64(0, BigInt(payload.issuerProvidedTimestamp), true // true for little-endian
|
|
28
|
+
);
|
|
29
|
+
timestampHash.update(timestampBytes);
|
|
30
|
+
}
|
|
31
|
+
allHashes.push(timestampHash.digest());
|
|
32
|
+
// Hash operator identity public key
|
|
33
|
+
const operatorPubKeyHash = sha256.create();
|
|
34
|
+
if (payload.operatorIdentityPublicKey) {
|
|
35
|
+
operatorPubKeyHash.update(payload.operatorIdentityPublicKey);
|
|
36
|
+
}
|
|
37
|
+
allHashes.push(operatorPubKeyHash.digest());
|
|
38
|
+
// Final hash of all concatenated hashes
|
|
39
|
+
const finalHash = sha256.create();
|
|
40
|
+
for (const hash of allHashes) {
|
|
41
|
+
finalHash.update(hash);
|
|
42
|
+
}
|
|
43
|
+
return finalHash.digest();
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=token-hashing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-hashing.js","sourceRoot":"","sources":["../../src/utils/token-hashing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAGjD,MAAM,UAAU,uBAAuB,CACrC,OAA4B;IAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,SAAS,GAAiB,EAAE,CAAC;IAEjC,wBAAwB;IACxB,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IACxC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzC,wBAAwB;IACxB,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IACxC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzC,sBAAsB;IACtB,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3C,kBAAkB,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5C,iBAAiB;IACjB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IACtC,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;QACpC,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,YAAY,CAC9C,CAAC,EACD,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,EACvC,IAAI,CAAC,yBAAyB;SAC/B,CAAC;QACF,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvC,oCAAoC;IACpC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3C,IAAI,OAAO,CAAC,yBAAyB,EAAE,CAAC;QACtC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC/D,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5C,wCAAwC;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC;AAC5B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@buildonspark/issuer-sdk",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Spark Issuer SDK for token issuance",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"prepare": "npm run build",
|
|
21
|
+
"build:watch": "yarn build --watch --clean=false",
|
|
22
|
+
"clean": "rm -rf dist",
|
|
23
|
+
"dev": "yarn build -- --watch",
|
|
24
|
+
"docs": "typedoc src",
|
|
25
|
+
"format:fix": "prettier src --write",
|
|
26
|
+
"format": "prettier src --check",
|
|
27
|
+
"lint:fix": "eslint --fix .",
|
|
28
|
+
"lint:fix:continue": "eslint --fix . || exit 0",
|
|
29
|
+
"lint:watch": "esw ./src -w --ext .ts,.tsx,.js --color",
|
|
30
|
+
"lint": "eslint .",
|
|
31
|
+
"postversion": "yarn build",
|
|
32
|
+
"test-cmd": "node --experimental-vm-modules $(yarn bin jest) --no-cache --runInBand --bail",
|
|
33
|
+
"test": "yarn test-cmd src/tests/*.test.ts src/tests/e2e/*.test.ts",
|
|
34
|
+
"test:integration": "yarn test-cmd src/tests/integration/*.test.ts",
|
|
35
|
+
"types:watch": "tsc-absolute --watch",
|
|
36
|
+
"types": "tsc",
|
|
37
|
+
"generate:proto": "PATH=\"$PATH:./node_modules/.bin\" protoc --ts_proto_out=./src/proto --ts_proto_opt=outputServices=nice-grpc,useExactTypes=false,outputServices=generic-definitions,oneof=unions,importSuffix=.js --proto_path=../../protos spark.proto mock.proto spark_authn.proto"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@bufbuild/protobuf": "^2.2.3",
|
|
41
|
+
"@buildonspark/lrc20-sdk": "0.0.0",
|
|
42
|
+
"@buildonspark/spark-sdk": "0.0.0",
|
|
43
|
+
"@grpc/grpc-js": "^1.12.5",
|
|
44
|
+
"@noble/curves": "^1.8.0",
|
|
45
|
+
"@noble/secp256k1": "^2.2.3",
|
|
46
|
+
"@scure/btc-signer": "^1.5.0",
|
|
47
|
+
"bitcoinjs-lib": "^6.1.5",
|
|
48
|
+
"crypto-js": "^4.2.0",
|
|
49
|
+
"grpc-tools": "^1.12.4",
|
|
50
|
+
"nice-grpc": "^2.1.10",
|
|
51
|
+
"nice-grpc-common": "^2.0.2",
|
|
52
|
+
"nice-grpc-web": "^3.3.5",
|
|
53
|
+
"protobufjs": "^7.4.0",
|
|
54
|
+
"ts-proto": "^2.6.1"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@types/jest": "^29.5.14",
|
|
58
|
+
"@types/node": "^22.13.2",
|
|
59
|
+
"@types/secp256k1": "^4.0.6",
|
|
60
|
+
"@types/uuid": "^10.0.0",
|
|
61
|
+
"@types/ws": "^8",
|
|
62
|
+
"copyfiles": "^2.4.1",
|
|
63
|
+
"jest": "^29.7.0",
|
|
64
|
+
"ts-jest": "^29.2.5",
|
|
65
|
+
"ts-node": "^10.9.2",
|
|
66
|
+
"typescript": "^5.7.3",
|
|
67
|
+
"wasm-loader": "^1.3.0"
|
|
68
|
+
},
|
|
69
|
+
"browser": {
|
|
70
|
+
"assert": false,
|
|
71
|
+
"crypto": false,
|
|
72
|
+
"fs": false,
|
|
73
|
+
"fs/promises": false,
|
|
74
|
+
"nice-grpc": "nice-grpc-web",
|
|
75
|
+
"path": false,
|
|
76
|
+
"url": false
|
|
77
|
+
},
|
|
78
|
+
"packageManager": "yarn@4.5.0+sha512.837566d24eec14ec0f5f1411adb544e892b3454255e61fdef8fd05f3429480102806bac7446bc9daff3896b01ae4b62d00096c7e989f1596f2af10b927532f39"
|
|
79
|
+
}
|