@powerhousedao/connect 5.1.0 → 5.2.0-staging.1

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 (124) hide show
  1. package/.env +1 -0
  2. package/dist/assets/AddDriveModal-CMhY7EXt.js +1 -0
  3. package/dist/assets/ClearStorageModal-DFtnMF37.js +1 -0
  4. package/dist/assets/CookiesPolicyModal-wKn_crAz.js +1 -0
  5. package/dist/assets/CreateDocumentModal-axk-Gv87.js +1 -0
  6. package/dist/assets/{DebugSettingsModal-CooFY-Go.js → DebugSettingsModal-B8EImEik.js} +1 -1
  7. package/dist/assets/{DeleteDriveModal-BOdu1bg5.js → DeleteDriveModal-CDBGjFVT.js} +1 -1
  8. package/dist/assets/DeleteItemModal--lW49X7Z.js +1 -0
  9. package/dist/assets/DisclaimerModal-Cwlnu4SD.js +1 -0
  10. package/dist/assets/DriveSettingsModal-DLSYwH01.js +1 -0
  11. package/dist/assets/{ExportDocumentWithErrorsModal-BzgGSmxg.js → ExportDocumentWithErrorsModal-sNmpWNiL.js} +1 -1
  12. package/dist/assets/SettingsModal-BI_PIj3P.js +1 -0
  13. package/dist/assets/UpgradeDriveModal-fS2KcP5T.js +1 -0
  14. package/dist/assets/{design_system-DGYPpUGa.js → design_system-DRiFz7P7.js} +1 -1
  15. package/dist/assets/design_system_connect-D7mJC7XF.js +45 -0
  16. package/dist/assets/design_system_ui-7P3ayrQ9.js +1 -0
  17. package/dist/assets/{document_drive-BEIKnuGM.js → document_drive-BuVpBb4l.js} +25 -14
  18. package/dist/assets/{document_engineering-B49PhCDR.js → document_engineering-CXK5S1hf.js} +1 -1
  19. package/dist/assets/{document_model-DXcLJEjZ.js → document_model-DB4SzBSe.js} +3 -3
  20. package/dist/assets/document_model_editor-C7-Rcfye.js +23 -0
  21. package/dist/assets/{drive_explorer-d0kn77Nx.js → drive_explorer-xuI0xiNd.js} +2 -2
  22. package/dist/assets/{graphql-editor-CSkqTexL.js → graphql-editor-BpQTpuKO.js} +2 -2
  23. package/dist/assets/{hooks-D4Uas2SG.js → hooks-CAyBWwxg.js} +1 -1
  24. package/dist/assets/index-BchTCSNf.js +20 -0
  25. package/dist/assets/index-BilHslhO.css +1 -0
  26. package/dist/assets/index-CJrSFr5V.js +25 -0
  27. package/dist/assets/json-editor-CtpJfU25.js +1 -0
  28. package/dist/assets/nodefs-CNM_9qdV.js +1 -0
  29. package/dist/assets/opfs-ahp-D-CiKXE2.js +3 -0
  30. package/dist/assets/pg_dump-CW0pN9tG.wasm +0 -0
  31. package/dist/assets/postgres-CkP7QCDB.data +0 -0
  32. package/dist/assets/postgres-CyuUVpXN.wasm +0 -0
  33. package/dist/assets/reactor_browser-CV2asu7c.js +127 -0
  34. package/dist/assets/state-schemas-DXZotcNp.js +2 -0
  35. package/dist/assets/zod-BpTyxkjy.js +20 -0
  36. package/dist/index.html +11 -11
  37. package/heroku/Dockerfile +4 -1
  38. package/lib/package.copy.json +14 -8
  39. package/lib/src/components/app-skeleton.js +1 -1
  40. package/lib/src/components/app-skeleton.js.map +1 -1
  41. package/lib/src/components/modal/modals/AddDriveModal.d.ts.map +1 -1
  42. package/lib/src/components/modal/modals/AddDriveModal.js +35 -27
  43. package/lib/src/components/modal/modals/AddDriveModal.js.map +1 -1
  44. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.d.ts +2 -0
  45. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.d.ts.map +1 -0
  46. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.js +26 -0
  47. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.js.map +1 -0
  48. package/lib/src/components/modal/modals/InspectorModal/index.d.ts +2 -0
  49. package/lib/src/components/modal/modals/InspectorModal/index.d.ts.map +1 -0
  50. package/lib/src/components/modal/modals/InspectorModal/index.js +2 -0
  51. package/lib/src/components/modal/modals/InspectorModal/index.js.map +1 -0
  52. package/lib/src/components/modal/modals/InspectorModal/useDbExplorer.d.ts +32 -0
  53. package/lib/src/components/modal/modals/InspectorModal/useDbExplorer.d.ts.map +1 -0
  54. package/lib/src/components/modal/modals/InspectorModal/useDbExplorer.js +108 -0
  55. package/lib/src/components/modal/modals/InspectorModal/useDbExplorer.js.map +1 -0
  56. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.d.ts +4 -0
  57. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.d.ts.map +1 -0
  58. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.js +12 -0
  59. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.js.map +1 -0
  60. package/lib/src/components/modal/modals-container.d.ts.map +1 -1
  61. package/lib/src/components/modal/modals-container.js +4 -0
  62. package/lib/src/components/modal/modals-container.js.map +1 -1
  63. package/lib/src/components/root.js +1 -1
  64. package/lib/src/components/root.js.map +1 -1
  65. package/lib/src/components/sidebar.d.ts.map +1 -1
  66. package/lib/src/components/sidebar.js +6 -2
  67. package/lib/src/components/sidebar.js.map +1 -1
  68. package/lib/src/connect.config.d.ts +2 -0
  69. package/lib/src/connect.config.d.ts.map +1 -1
  70. package/lib/src/connect.config.js +1 -0
  71. package/lib/src/connect.config.js.map +1 -1
  72. package/lib/src/feature-flags.d.ts +22 -3
  73. package/lib/src/feature-flags.d.ts.map +1 -1
  74. package/lib/src/feature-flags.js +48 -3
  75. package/lib/src/feature-flags.js.map +1 -1
  76. package/lib/src/hooks/useClientErrorHandler.d.ts.map +1 -1
  77. package/lib/src/hooks/useClientErrorHandler.js +13 -2
  78. package/lib/src/hooks/useClientErrorHandler.js.map +1 -1
  79. package/lib/src/pages/demo/atlas-import.js +2 -2
  80. package/lib/src/pages/demo/atlas-import.js.map +1 -1
  81. package/lib/src/store/reactor.d.ts.map +1 -1
  82. package/lib/src/store/reactor.js +102 -51
  83. package/lib/src/store/reactor.js.map +1 -1
  84. package/lib/src/utils/reactor.d.ts +7 -0
  85. package/lib/src/utils/reactor.d.ts.map +1 -1
  86. package/lib/src/utils/reactor.js +35 -2
  87. package/lib/src/utils/reactor.js.map +1 -1
  88. package/lib/src/utils/signer.d.ts +18 -0
  89. package/lib/src/utils/signer.d.ts.map +1 -0
  90. package/lib/src/utils/signer.js +215 -0
  91. package/lib/src/utils/signer.js.map +1 -0
  92. package/lib/test/utils/signer.test.d.ts +2 -0
  93. package/lib/test/utils/signer.test.d.ts.map +1 -0
  94. package/lib/test/utils/signer.test.js +319 -0
  95. package/lib/test/utils/signer.test.js.map +1 -0
  96. package/lib/tsconfig.tsbuildinfo +1 -1
  97. package/lib/vite.config.d.ts.map +1 -1
  98. package/lib/vite.config.js +4 -0
  99. package/lib/vite.config.js.map +1 -1
  100. package/lib/vitest.config.d.ts +3 -0
  101. package/lib/vitest.config.d.ts.map +1 -0
  102. package/lib/vitest.config.js +8 -0
  103. package/lib/vitest.config.js.map +1 -0
  104. package/nginx.conf +7 -0
  105. package/package.copy.json +14 -8
  106. package/package.json +21 -15
  107. package/dist/assets/AddDriveModal-_XSf2ZlN.js +0 -1
  108. package/dist/assets/ClearStorageModal-CbfJTlAo.js +0 -1
  109. package/dist/assets/CookiesPolicyModal-DTRuUeM_.js +0 -1
  110. package/dist/assets/CreateDocumentModal-DUTbfZYr.js +0 -1
  111. package/dist/assets/DeleteItemModal-D8MlQS3W.js +0 -1
  112. package/dist/assets/DisclaimerModal-RBBaiKyO.js +0 -1
  113. package/dist/assets/DriveSettingsModal-BHBZfzaY.js +0 -1
  114. package/dist/assets/SettingsModal-BXDXscnR.js +0 -1
  115. package/dist/assets/UpgradeDriveModal-15TBzq11.js +0 -1
  116. package/dist/assets/design_system_connect-Vb8XBnLs.js +0 -45
  117. package/dist/assets/design_system_ui-Dnwc_Xm9.js +0 -1
  118. package/dist/assets/document_model_editor-lmHQ6HZy.js +0 -23
  119. package/dist/assets/index-Br7E7qjt.css +0 -1
  120. package/dist/assets/index-CK2Jk_ho.js +0 -18
  121. package/dist/assets/json-editor-CQKAVxat.js +0 -1
  122. package/dist/assets/reactor_browser-BGn_P-dn.js +0 -25
  123. package/dist/assets/state-schemas-36mF-wEI.js +0 -2
  124. package/dist/assets/zod-C6yxFxyo.js +0 -1
@@ -0,0 +1,319 @@
1
+ import { ConnectCrypto, } from "@renown/sdk";
2
+ import { beforeEach, describe, expect, it } from "vitest";
3
+ import { ConnectCryptoSigner, createSignatureVerifier, } from "../../src/utils/signer.js";
4
+ class InMemoryKeyStorage {
5
+ keyPair;
6
+ loadKeyPair() {
7
+ return Promise.resolve(this.keyPair);
8
+ }
9
+ saveKeyPair(keyPair) {
10
+ this.keyPair = keyPair;
11
+ return Promise.resolve();
12
+ }
13
+ }
14
+ describe("ConnectCryptoSigner and Verifier Integration", () => {
15
+ let keyStorage;
16
+ let connectCrypto;
17
+ let signer;
18
+ let verifier;
19
+ beforeEach(async () => {
20
+ keyStorage = new InMemoryKeyStorage();
21
+ connectCrypto = new ConnectCrypto(keyStorage);
22
+ signer = new ConnectCryptoSigner(connectCrypto);
23
+ verifier = createSignatureVerifier();
24
+ await connectCrypto.did();
25
+ });
26
+ it("signs an action and produces a valid signature format", async () => {
27
+ const action = {
28
+ id: "action-1",
29
+ type: "TEST_ACTION",
30
+ timestampUtcMs: new Date().toISOString(),
31
+ input: { foo: "bar" },
32
+ scope: "global",
33
+ };
34
+ const signature = await signer.sign(action);
35
+ expect(signature).toHaveLength(5);
36
+ const [timestamp, signerKey, hash, prevStateHash, signatureHex] = signature;
37
+ expect(timestamp).toMatch(/^\d+$/);
38
+ expect(signerKey.startsWith("did:key:z")).toBe(true);
39
+ expect(hash).toBeDefined();
40
+ expect(prevStateHash).toBe("");
41
+ expect(signatureHex.startsWith("0x")).toBe(true);
42
+ expect(signatureHex.length).toBeGreaterThan(2);
43
+ });
44
+ it("verifies a signature created by ConnectCryptoSigner", async () => {
45
+ const did = await connectCrypto.did();
46
+ const action = {
47
+ id: "action-1",
48
+ type: "TEST_ACTION",
49
+ timestampUtcMs: new Date().toISOString(),
50
+ input: { foo: "bar" },
51
+ scope: "global",
52
+ };
53
+ const signature = await signer.sign(action);
54
+ const signedAction = {
55
+ ...action,
56
+ context: {
57
+ signer: {
58
+ user: { address: did, chainId: 1, networkId: "eip155" },
59
+ app: { name: "test-app", key: did },
60
+ signatures: [signature],
61
+ },
62
+ },
63
+ };
64
+ const operation = {
65
+ index: 0,
66
+ timestampUtcMs: action.timestampUtcMs,
67
+ hash: "",
68
+ skip: 0,
69
+ action: signedAction,
70
+ };
71
+ const isValid = await verifier(operation, did);
72
+ expect(isValid).toBe(true);
73
+ });
74
+ it("rejects a tampered signature", async () => {
75
+ const did = await connectCrypto.did();
76
+ const action = {
77
+ id: "action-1",
78
+ type: "TEST_ACTION",
79
+ timestampUtcMs: new Date().toISOString(),
80
+ input: { foo: "bar" },
81
+ scope: "global",
82
+ };
83
+ const signature = await signer.sign(action);
84
+ const [timestamp, signerKey, hash, prevStateHash] = signature;
85
+ const tamperedSignature = [
86
+ timestamp,
87
+ signerKey,
88
+ hash,
89
+ prevStateHash,
90
+ "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
91
+ ];
92
+ const signedAction = {
93
+ ...action,
94
+ context: {
95
+ signer: {
96
+ user: { address: did, chainId: 1, networkId: "eip155" },
97
+ app: { name: "test-app", key: did },
98
+ signatures: [tamperedSignature],
99
+ },
100
+ },
101
+ };
102
+ const operation = {
103
+ index: 0,
104
+ timestampUtcMs: action.timestampUtcMs,
105
+ hash: "",
106
+ skip: 0,
107
+ action: signedAction,
108
+ };
109
+ const isValid = await verifier(operation, did);
110
+ expect(isValid).toBe(false);
111
+ });
112
+ it("rejects verification when public key does not match", async () => {
113
+ const did = await connectCrypto.did();
114
+ const action = {
115
+ id: "action-1",
116
+ type: "TEST_ACTION",
117
+ timestampUtcMs: new Date().toISOString(),
118
+ input: { foo: "bar" },
119
+ scope: "global",
120
+ };
121
+ const signature = await signer.sign(action);
122
+ const signedAction = {
123
+ ...action,
124
+ context: {
125
+ signer: {
126
+ user: { address: did, chainId: 1, networkId: "eip155" },
127
+ app: { name: "test-app", key: did },
128
+ signatures: [signature],
129
+ },
130
+ },
131
+ };
132
+ const operation = {
133
+ index: 0,
134
+ timestampUtcMs: action.timestampUtcMs,
135
+ hash: "",
136
+ skip: 0,
137
+ action: signedAction,
138
+ };
139
+ const wrongDid = "did:key:zDnaerDaTF5BXEavCrfRZEk316dpbLsfPDZ3WJ5hRTPFU2169";
140
+ const isValid = await verifier(operation, wrongDid);
141
+ expect(isValid).toBe(false);
142
+ });
143
+ it("returns true for operations without signer context", async () => {
144
+ const action = {
145
+ id: "action-1",
146
+ type: "TEST_ACTION",
147
+ timestampUtcMs: new Date().toISOString(),
148
+ input: { foo: "bar" },
149
+ scope: "global",
150
+ };
151
+ const operation = {
152
+ index: 0,
153
+ timestampUtcMs: action.timestampUtcMs,
154
+ hash: "",
155
+ skip: 0,
156
+ action: action,
157
+ };
158
+ const isValid = await verifier(operation, "any-key");
159
+ expect(isValid).toBe(true);
160
+ });
161
+ it("returns false for operations with signer but no signatures", async () => {
162
+ const did = await connectCrypto.did();
163
+ const action = {
164
+ id: "action-1",
165
+ type: "TEST_ACTION",
166
+ timestampUtcMs: new Date().toISOString(),
167
+ input: { foo: "bar" },
168
+ scope: "global",
169
+ context: {
170
+ signer: {
171
+ user: { address: did, chainId: 1, networkId: "eip155" },
172
+ app: { name: "test-app", key: did },
173
+ signatures: [],
174
+ },
175
+ },
176
+ };
177
+ const operation = {
178
+ index: 0,
179
+ timestampUtcMs: action.timestampUtcMs,
180
+ hash: "",
181
+ skip: 0,
182
+ action: action,
183
+ };
184
+ const isValid = await verifier(operation, did);
185
+ expect(isValid).toBe(false);
186
+ });
187
+ it("handles actions with prevOpHash in context", async () => {
188
+ const did = await connectCrypto.did();
189
+ const action = {
190
+ id: "action-1",
191
+ type: "TEST_ACTION",
192
+ timestampUtcMs: new Date().toISOString(),
193
+ input: { foo: "bar" },
194
+ scope: "global",
195
+ context: {
196
+ prevOpHash: "abc123",
197
+ },
198
+ };
199
+ const signature = await signer.sign(action);
200
+ const signedAction = {
201
+ ...action,
202
+ context: {
203
+ ...action.context,
204
+ signer: {
205
+ user: { address: did, chainId: 1, networkId: "eip155" },
206
+ app: { name: "test-app", key: did },
207
+ signatures: [signature],
208
+ },
209
+ },
210
+ };
211
+ const operation = {
212
+ index: 0,
213
+ timestampUtcMs: action.timestampUtcMs,
214
+ hash: "",
215
+ skip: 0,
216
+ action: signedAction,
217
+ };
218
+ const isValid = await verifier(operation, did);
219
+ expect(isValid).toBe(true);
220
+ expect(signature[3]).toBe("abc123");
221
+ });
222
+ it("handles complex action inputs", async () => {
223
+ const did = await connectCrypto.did();
224
+ const action = {
225
+ id: "action-1",
226
+ type: "COMPLEX_ACTION",
227
+ timestampUtcMs: new Date().toISOString(),
228
+ input: {
229
+ nested: {
230
+ deeply: {
231
+ value: [1, 2, 3],
232
+ unicode: "\u00e9\u00e0\u00f9",
233
+ },
234
+ },
235
+ array: ["a", "b", "c"],
236
+ nullValue: null,
237
+ booleans: { yes: true, no: false },
238
+ },
239
+ scope: "document",
240
+ };
241
+ const signature = await signer.sign(action);
242
+ const signedAction = {
243
+ ...action,
244
+ context: {
245
+ signer: {
246
+ user: { address: did, chainId: 1, networkId: "eip155" },
247
+ app: { name: "test-app", key: did },
248
+ signatures: [signature],
249
+ },
250
+ },
251
+ };
252
+ const operation = {
253
+ index: 0,
254
+ timestampUtcMs: action.timestampUtcMs,
255
+ hash: "",
256
+ skip: 0,
257
+ action: signedAction,
258
+ };
259
+ const isValid = await verifier(operation, did);
260
+ expect(isValid).toBe(true);
261
+ });
262
+ it("produces different signatures for different actions", async () => {
263
+ const action1 = {
264
+ id: "action-1",
265
+ type: "TEST_ACTION",
266
+ timestampUtcMs: new Date().toISOString(),
267
+ input: { value: 1 },
268
+ scope: "global",
269
+ };
270
+ const action2 = {
271
+ id: "action-2",
272
+ type: "TEST_ACTION",
273
+ timestampUtcMs: new Date().toISOString(),
274
+ input: { value: 2 },
275
+ scope: "global",
276
+ };
277
+ const signature1 = await signer.sign(action1);
278
+ const signature2 = await signer.sign(action2);
279
+ expect(signature1[2]).not.toBe(signature2[2]);
280
+ expect(signature1[4]).not.toBe(signature2[4]);
281
+ });
282
+ it("signatures from different keys fail verification", async () => {
283
+ const did1 = await connectCrypto.did();
284
+ const action = {
285
+ id: "action-1",
286
+ type: "TEST_ACTION",
287
+ timestampUtcMs: new Date().toISOString(),
288
+ input: { foo: "bar" },
289
+ scope: "global",
290
+ };
291
+ const signature = await signer.sign(action);
292
+ const newKeyStorage = new InMemoryKeyStorage();
293
+ const newConnectCrypto = new ConnectCrypto(newKeyStorage);
294
+ const did2 = await newConnectCrypto.did();
295
+ expect(did1).not.toBe(did2);
296
+ const signedAction = {
297
+ ...action,
298
+ context: {
299
+ signer: {
300
+ user: { address: did1, chainId: 1, networkId: "eip155" },
301
+ app: { name: "test-app", key: did1 },
302
+ signatures: [signature],
303
+ },
304
+ },
305
+ };
306
+ const operation = {
307
+ index: 0,
308
+ timestampUtcMs: action.timestampUtcMs,
309
+ hash: "",
310
+ skip: 0,
311
+ action: signedAction,
312
+ };
313
+ const isValidWithOriginalKey = await verifier(operation, did1);
314
+ expect(isValidWithOriginalKey).toBe(true);
315
+ const isValidWithDifferentKey = await verifier(operation, did2);
316
+ expect(isValidWithDifferentKey).toBe(false);
317
+ });
318
+ });
319
+ //# sourceMappingURL=signer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.test.js","sourceRoot":"","sources":["../../../test/utils/signer.test.ts"],"names":[],"mappings":"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"}