@renown/sdk 6.0.0-dev.6 → 6.0.0-dev.61

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 (141) hide show
  1. package/dist/src/common.d.ts +14 -8
  2. package/dist/src/common.d.ts.map +1 -1
  3. package/dist/src/common.js +35 -27
  4. package/dist/src/common.js.map +1 -1
  5. package/dist/src/crypto/browser-key-storage.d.ts +4 -2
  6. package/dist/src/crypto/browser-key-storage.d.ts.map +1 -1
  7. package/dist/src/crypto/browser-key-storage.js +54 -51
  8. package/dist/src/crypto/browser-key-storage.js.map +1 -1
  9. package/dist/src/crypto/index.d.ts +5 -34
  10. package/dist/src/crypto/index.d.ts.map +1 -1
  11. package/dist/src/crypto/index.js +7 -128
  12. package/dist/src/crypto/index.js.map +1 -1
  13. package/dist/src/crypto/memory-key-storage.d.ts +9 -0
  14. package/dist/src/crypto/memory-key-storage.d.ts.map +1 -0
  15. package/dist/src/crypto/memory-key-storage.js +18 -0
  16. package/dist/src/crypto/memory-key-storage.js.map +1 -0
  17. package/dist/src/crypto/node-key-storage.d.ts +16 -3
  18. package/dist/src/crypto/node-key-storage.d.ts.map +1 -1
  19. package/dist/src/crypto/node-key-storage.js +82 -42
  20. package/dist/src/crypto/node-key-storage.js.map +1 -1
  21. package/dist/src/crypto/renown-crypto-builder.d.ts +11 -0
  22. package/dist/src/crypto/renown-crypto-builder.d.ts.map +1 -0
  23. package/dist/src/crypto/renown-crypto-builder.js +34 -0
  24. package/dist/src/crypto/renown-crypto-builder.js.map +1 -0
  25. package/dist/src/crypto/renown-crypto.d.ts +26 -0
  26. package/dist/src/crypto/renown-crypto.d.ts.map +1 -0
  27. package/dist/src/crypto/renown-crypto.js +56 -0
  28. package/dist/src/crypto/renown-crypto.js.map +1 -0
  29. package/dist/src/crypto/signer.d.ts +61 -8
  30. package/dist/src/crypto/signer.d.ts.map +1 -1
  31. package/dist/src/crypto/signer.js +98 -28
  32. package/dist/src/crypto/signer.js.map +1 -1
  33. package/dist/src/crypto/types.d.ts +27 -0
  34. package/dist/src/crypto/types.d.ts.map +1 -0
  35. package/dist/src/crypto/types.js +2 -0
  36. package/dist/src/crypto/types.js.map +1 -0
  37. package/dist/src/crypto/utils.d.ts +13 -0
  38. package/dist/src/crypto/utils.d.ts.map +1 -0
  39. package/dist/src/crypto/utils.js +39 -0
  40. package/dist/src/crypto/utils.js.map +1 -0
  41. package/dist/src/event/event.browser.d.ts.map +1 -1
  42. package/dist/src/event/event.node.d.ts.map +1 -1
  43. package/dist/src/event/memory.d.ts +8 -0
  44. package/dist/src/event/memory.d.ts.map +1 -0
  45. package/dist/src/event/memory.js +16 -0
  46. package/dist/src/event/memory.js.map +1 -0
  47. package/dist/src/hooks/use-user.d.ts +1 -1
  48. package/dist/src/hooks/use-user.js +1 -1
  49. package/dist/src/index.browser.d.ts +1 -1
  50. package/dist/src/index.browser.d.ts.map +1 -1
  51. package/dist/src/index.browser.js +1 -1
  52. package/dist/src/index.browser.js.map +1 -1
  53. package/dist/src/index.d.ts +3 -1
  54. package/dist/src/index.d.ts.map +1 -1
  55. package/dist/src/index.js +3 -1
  56. package/dist/src/index.js.map +1 -1
  57. package/dist/src/index.node.d.ts +1 -1
  58. package/dist/src/index.node.d.ts.map +1 -1
  59. package/dist/src/index.node.js +1 -1
  60. package/dist/src/index.node.js.map +1 -1
  61. package/dist/src/init.browser.d.ts +51 -2
  62. package/dist/src/init.browser.d.ts.map +1 -1
  63. package/dist/src/init.browser.js +62 -3
  64. package/dist/src/init.browser.js.map +1 -1
  65. package/dist/src/init.node.d.ts +28 -2
  66. package/dist/src/init.node.d.ts.map +1 -1
  67. package/dist/src/init.node.js +26 -4
  68. package/dist/src/init.node.js.map +1 -1
  69. package/dist/src/lib/renown/credential.d.ts +2 -0
  70. package/dist/src/lib/renown/credential.d.ts.map +1 -0
  71. package/dist/src/lib/renown/credential.js +68 -0
  72. package/dist/src/lib/renown/credential.js.map +1 -0
  73. package/dist/src/lib/renown/utils.d.ts +4 -4
  74. package/dist/src/lib/renown/utils.d.ts.map +1 -1
  75. package/dist/src/lib/renown/utils.js +24 -43
  76. package/dist/src/lib/renown/utils.js.map +1 -1
  77. package/dist/src/node.d.ts +5 -1
  78. package/dist/src/node.d.ts.map +1 -1
  79. package/dist/src/node.js +5 -1
  80. package/dist/src/node.js.map +1 -1
  81. package/dist/src/providers/renown-user-provider.d.ts +9 -5
  82. package/dist/src/providers/renown-user-provider.d.ts.map +1 -1
  83. package/dist/src/providers/renown-user-provider.js +25 -30
  84. package/dist/src/providers/renown-user-provider.js.map +1 -1
  85. package/dist/src/renown-builder.d.ts +60 -0
  86. package/dist/src/renown-builder.d.ts.map +1 -0
  87. package/dist/src/renown-builder.js +115 -0
  88. package/dist/src/renown-builder.js.map +1 -0
  89. package/dist/src/storage/common.d.ts +14 -10
  90. package/dist/src/storage/common.d.ts.map +1 -1
  91. package/dist/src/storage/common.js +16 -3
  92. package/dist/src/storage/common.js.map +1 -1
  93. package/dist/src/storage/storage.browser.d.ts +1 -0
  94. package/dist/src/storage/storage.browser.d.ts.map +1 -1
  95. package/dist/src/storage/storage.browser.js +3 -1
  96. package/dist/src/storage/storage.browser.js.map +1 -1
  97. package/dist/src/storage/storage.node.d.ts +1 -1
  98. package/dist/src/storage/storage.node.d.ts.map +1 -1
  99. package/dist/src/storage/storage.node.js +7 -5
  100. package/dist/src/storage/storage.node.js.map +1 -1
  101. package/dist/src/types.d.ts +28 -4
  102. package/dist/src/types.d.ts.map +1 -1
  103. package/dist/src/utils.d.ts +11 -10
  104. package/dist/src/utils.d.ts.map +1 -1
  105. package/dist/src/utils.js +8 -0
  106. package/dist/src/utils.js.map +1 -1
  107. package/dist/{tests → test}/auth.test.d.ts.map +1 -1
  108. package/dist/test/auth.test.js.map +1 -0
  109. package/dist/test/crypto/signer.test.d.ts +2 -0
  110. package/dist/test/crypto/signer.test.d.ts.map +1 -0
  111. package/dist/test/crypto/signer.test.js +184 -0
  112. package/dist/test/crypto/signer.test.js.map +1 -0
  113. package/dist/test/script.test.d.ts +2 -0
  114. package/dist/test/script.test.d.ts.map +1 -0
  115. package/dist/test/script.test.js +144 -0
  116. package/dist/test/script.test.js.map +1 -0
  117. package/dist/test/storage.node.test.d.ts +2 -0
  118. package/dist/test/storage.node.test.d.ts.map +1 -0
  119. package/dist/test/storage.node.test.js +66 -0
  120. package/dist/test/storage.node.test.js.map +1 -0
  121. package/dist/tsconfig.tsbuildinfo +1 -1
  122. package/dist/vitest.config.d.ts +3 -0
  123. package/dist/vitest.config.d.ts.map +1 -0
  124. package/dist/vitest.config.js +7 -0
  125. package/dist/vitest.config.js.map +1 -0
  126. package/package.json +14 -14
  127. package/dist/src/lib/crypto/browser.d.ts +0 -8
  128. package/dist/src/lib/crypto/browser.d.ts.map +0 -1
  129. package/dist/src/lib/crypto/browser.js +0 -73
  130. package/dist/src/lib/crypto/browser.js.map +0 -1
  131. package/dist/src/lib/crypto/index.d.ts +0 -36
  132. package/dist/src/lib/crypto/index.d.ts.map +0 -1
  133. package/dist/src/lib/crypto/index.js +0 -150
  134. package/dist/src/lib/crypto/index.js.map +0 -1
  135. package/dist/src/lib/crypto/node.d.ts +0 -8
  136. package/dist/src/lib/crypto/node.d.ts.map +0 -1
  137. package/dist/src/lib/crypto/node.js +0 -67
  138. package/dist/src/lib/crypto/node.js.map +0 -1
  139. package/dist/tests/auth.test.js.map +0 -1
  140. /package/dist/{tests → test}/auth.test.d.ts +0 -0
  141. /package/dist/{tests → test}/auth.test.js +0 -0
@@ -0,0 +1,144 @@
1
+ import { ReactorBuilder, ReactorClientBuilder } from "@powerhousedao/reactor";
2
+ import { MemoryKeyStorage, RenownCryptoBuilder, RenownCryptoSigner, } from "@renown/sdk/node";
3
+ import { actions, documentModelDocumentModelModule, setName, } from "document-model";
4
+ import { describe, expect, it } from "vitest";
5
+ describe("Renown on script", () => {
6
+ it("should create a document and add a signed SET_NAME action", async () => {
7
+ // Create user directly (parsed from DID format)
8
+ const testUser = {
9
+ address: "0x9aDdcBbaA28F7eB5f75E023F7C1Fcb13C9DFD8F7",
10
+ networkId: "eip155",
11
+ chainId: 1,
12
+ };
13
+ // Create signer without network access
14
+ const keyStorage = new MemoryKeyStorage();
15
+ const crypto = await new RenownCryptoBuilder()
16
+ .withKeyPairStorage(keyStorage)
17
+ .build();
18
+ const signer = new RenownCryptoSigner(crypto, "script", testUser);
19
+ // Build reactor
20
+ const reactorBuilder = new ReactorBuilder().withDocumentModels([
21
+ documentModelDocumentModelModule,
22
+ ]);
23
+ const reactorClient = await new ReactorClientBuilder()
24
+ .withReactorBuilder(reactorBuilder)
25
+ .withSigner(signer)
26
+ .build();
27
+ // Create new document
28
+ const document = await reactorClient.createEmpty("powerhouse/document-model");
29
+ // Add SET_NAME action
30
+ const result = await reactorClient.execute(document.header.id, "main", [
31
+ setName("New name"),
32
+ ]);
33
+ // Get action signature
34
+ const operation = result.operations.global[0];
35
+ const actionSigner = operation.action.context?.signer;
36
+ expect(actionSigner?.app).toStrictEqual({
37
+ key: crypto.did,
38
+ name: "script",
39
+ });
40
+ expect(actionSigner?.user).toStrictEqual({
41
+ address: "0x9aDdcBbaA28F7eB5f75E023F7C1Fcb13C9DFD8F7",
42
+ networkId: "eip155",
43
+ chainId: 1,
44
+ });
45
+ expect(operation.action.context?.signer?.signatures
46
+ .flat()
47
+ .filter((sig) => sig.length > 0).length).toBeGreaterThan(0);
48
+ });
49
+ it("should NOT overwrite pre-signed actions with resulting-state-hash format", async () => {
50
+ // Create a test user that both signers will share
51
+ const testUser = {
52
+ address: "0x9aDdcBbaA28F7eB5f75E023F7C1Fcb13C9DFD8F7",
53
+ networkId: "eip155",
54
+ chainId: 1,
55
+ };
56
+ // Create two Renown signers with different keys (no network access needed)
57
+ const keyStorageA = new MemoryKeyStorage();
58
+ const cryptoA = await new RenownCryptoBuilder()
59
+ .withKeyPairStorage(keyStorageA)
60
+ .build();
61
+ const signerA = new RenownCryptoSigner(cryptoA, "scriptA", testUser);
62
+ const keyStorageB = new MemoryKeyStorage();
63
+ const cryptoB = await new RenownCryptoBuilder()
64
+ .withKeyPairStorage(keyStorageB)
65
+ .build();
66
+ const signerB = new RenownCryptoSigner(cryptoB, "scriptB", testUser);
67
+ // Verify different app DIDs (different keypairs = different DIDs)
68
+ expect(signerA.app.key).not.toBe(signerB.app.key);
69
+ // Build ReactorClient with signerB
70
+ const reactorBuilder = new ReactorBuilder().withDocumentModels([
71
+ documentModelDocumentModelModule,
72
+ ]);
73
+ const reactorClient = await new ReactorClientBuilder()
74
+ .withReactorBuilder(reactorBuilder)
75
+ .withSigner(signerB)
76
+ .build();
77
+ // Create a document
78
+ const doc = await reactorClient.createEmpty("powerhouse/document-model");
79
+ // Step 1: Execute a FIRST action normally to establish a real prevOpHash
80
+ // This creates operation 0 with a real resulting state hash
81
+ await reactorClient.execute(doc.header.id, "main", [setName("First Name")]);
82
+ // Get the latest operation from the store
83
+ const operations = await reactorClient.getOperations(doc.header.id, {
84
+ scopes: ["global"],
85
+ });
86
+ const latestOp = operations.results[operations.results.length - 1];
87
+ // operation.hash IS the state hash (hash of document.state after this operation)
88
+ const prevOpHash = latestOp.hash;
89
+ // Step 2: For the SECOND action, pre-sign it with signerA
90
+ // Now we have a real prevOpHash to use in the signature
91
+ const secondAction = actions.setName("Second Name");
92
+ // For resultingStateHash, we predict what the state will be after this action.
93
+ // In a real script, you'd run the reducer locally to compute this.
94
+ // For this test, we use the prevOpHash as a stand-in (it's a real hash format).
95
+ // The key is testing signature PRESERVATION, not hash validation.
96
+ const predictedResultingHash = prevOpHash; // Use real hash format for testing
97
+ // Create the action with prevOpHash in context (required for signature)
98
+ const actionWithContext = {
99
+ ...secondAction,
100
+ context: {
101
+ ...secondAction.context,
102
+ prevOpHash,
103
+ },
104
+ };
105
+ const signatureA = await signerA.signActionWithResultingState(actionWithContext, predictedResultingHash);
106
+ // Verify signature has resulting-hash format: "prevOpHash:resultingHash"
107
+ expect(signatureA[3]).toContain(":");
108
+ expect(signatureA[3]).toBe(`${prevOpHash}:${predictedResultingHash}`);
109
+ const preSignedAction = {
110
+ ...actionWithContext,
111
+ context: {
112
+ ...actionWithContext.context,
113
+ signer: {
114
+ user: signerA.user,
115
+ app: signerA.app,
116
+ signatures: [signatureA],
117
+ },
118
+ },
119
+ };
120
+ // Verify the preSignedAction has the signature before executing
121
+ expect(preSignedAction.context?.signer?.signatures).toHaveLength(1);
122
+ expect(preSignedAction.context?.signer?.app.key).toBe(signerA.app.key);
123
+ // Step 3: Execute the pre-signed action via ReactorClient (which uses signerB)
124
+ await reactorClient.execute(doc.header.id, "main", [preSignedAction]);
125
+ // Get the second operation from the store
126
+ const allOperations = await reactorClient.getOperations(doc.header.id, {
127
+ scopes: ["global"],
128
+ });
129
+ const secondOp = allOperations.results[1]; // Second SET_NAME operation
130
+ const opSigner = secondOp.action.context?.signer;
131
+ expect(opSigner).toBeDefined();
132
+ // Signature should be from signerA, not signerB
133
+ expect(opSigner?.app.key).toBe(signerA.app.key);
134
+ expect(opSigner?.app.key).not.toBe(signerB.app.key);
135
+ // Should have exactly one signature (the original from signerA)
136
+ expect(opSigner?.signatures).toHaveLength(1);
137
+ // Signature should be byte-for-byte identical to signatureA
138
+ expect(opSigner?.signatures[0]).toEqual(signatureA);
139
+ // Verify the resulting-hash format is preserved: "prevOpHash:predictedResultingHash"
140
+ expect(opSigner?.signatures[0][3]).toContain(":");
141
+ expect(opSigner?.signatures[0][3]).toBe(`${prevOpHash}:${predictedResultingHash}`);
142
+ });
143
+ });
144
+ //# sourceMappingURL=script.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script.test.js","sourceRoot":"","sources":["../../test/script.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storage.node.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.node.test.d.ts","sourceRoot":"","sources":["../../test/storage.node.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ import { NodeKeyStorage, RenownCrypto, } from "@renown/sdk/node";
2
+ import { subtle } from "node:crypto";
3
+ import { rmSync, writeFileSync } from "node:fs";
4
+ import { afterEach } from "node:test";
5
+ import { beforeEach, describe, expect, it } from "vitest";
6
+ async function generateKeyPair() {
7
+ const keyPair = await subtle.generateKey(RenownCrypto.algorithm, true, [
8
+ "sign",
9
+ "verify",
10
+ ]);
11
+ return {
12
+ publicKey: await subtle.exportKey("jwk", keyPair.publicKey),
13
+ privateKey: await subtle.exportKey("jwk", keyPair.privateKey),
14
+ };
15
+ }
16
+ describe("Node key storage", () => {
17
+ const keyPairPath = "./test/tmp/keypair.json";
18
+ beforeEach(() => {
19
+ rmSync(keyPairPath, { recursive: true, force: true });
20
+ });
21
+ afterEach(() => {
22
+ rmSync(keyPairPath, { recursive: true, force: true });
23
+ });
24
+ it("should load key pair from the provided filepath", async () => {
25
+ const keyPair = await generateKeyPair();
26
+ const keyStorage = new NodeKeyStorage(keyPairPath);
27
+ writeFileSync(keyPairPath, JSON.stringify({ keyPair })); // Save key pair
28
+ const loadedKeyPair = await keyStorage.loadKeyPair();
29
+ expect(loadedKeyPair).toStrictEqual(keyPair);
30
+ });
31
+ it("should save key pair to the provided filepath", async () => {
32
+ const keyStorage = new NodeKeyStorage(keyPairPath);
33
+ const existingKeyPair = await keyStorage.loadKeyPair();
34
+ expect(existingKeyPair).toBeUndefined();
35
+ const keyPair = await generateKeyPair();
36
+ await keyStorage.saveKeyPair(keyPair);
37
+ const loadedKeyPair = await keyStorage.loadKeyPair();
38
+ expect(loadedKeyPair).toStrictEqual(keyPair);
39
+ });
40
+ it("should load key pair from provided environment variable", async () => {
41
+ const keyPair = await generateKeyPair();
42
+ const ENV_KEY_NAME = "PH_RENOWN_PRIVATE_KEY_TEST";
43
+ process.env[ENV_KEY_NAME] = JSON.stringify({ keyPair });
44
+ const keyStorage = new NodeKeyStorage(keyPairPath, {
45
+ envKeyName: ENV_KEY_NAME,
46
+ });
47
+ process.env[ENV_KEY_NAME] = JSON.stringify(keyPair);
48
+ const loadedKeyPair = await keyStorage.loadKeyPair();
49
+ expect(loadedKeyPair).toStrictEqual(keyPair);
50
+ });
51
+ it("should load key pair from the default filepath", async () => {
52
+ const keyPair = await generateKeyPair();
53
+ const keyStorage = new NodeKeyStorage();
54
+ writeFileSync(NodeKeyStorage.DEFAULT_KEYPAIR_PATH, JSON.stringify({ keyPair }));
55
+ const loadedKeyPair = await keyStorage.loadKeyPair();
56
+ expect(loadedKeyPair).toStrictEqual(keyPair);
57
+ });
58
+ it("should load key pair from default env var if no file path is provided", async () => {
59
+ const keyPair = await generateKeyPair();
60
+ process.env[NodeKeyStorage.ENV_KEY_NAME] = JSON.stringify({ keyPair });
61
+ const keyStorage = new NodeKeyStorage();
62
+ const loadedKeyPair = await keyStorage.loadKeyPair();
63
+ expect(loadedKeyPair).toStrictEqual(keyPair);
64
+ });
65
+ });
66
+ //# sourceMappingURL=storage.node.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.node.test.js","sourceRoot":"","sources":["../../test/storage.node.test.ts"],"names":[],"mappings":"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"}