@renown/sdk 6.0.2-staging.2 → 6.0.2-staging.3
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/README.md +1 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +173 -0
- package/dist/index.js.map +1 -0
- package/dist/node.d.ts +136 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +305 -0
- package/dist/node.js.map +1 -0
- package/dist/renown-builder-xQpZet3I.js +816 -0
- package/dist/renown-builder-xQpZet3I.js.map +1 -0
- package/dist/utils-D7B6E7_Z.d.ts +682 -0
- package/dist/utils-D7B6E7_Z.d.ts.map +1 -0
- package/package.json +14 -13
- package/dist/src/common.d.ts +0 -23
- package/dist/src/common.d.ts.map +0 -1
- package/dist/src/common.js +0 -145
- package/dist/src/common.js.map +0 -1
- package/dist/src/constants.d.ts +0 -130
- package/dist/src/constants.d.ts.map +0 -1
- package/dist/src/constants.js +0 -40
- package/dist/src/constants.js.map +0 -1
- package/dist/src/crypto/browser-key-storage.d.ts +0 -10
- package/dist/src/crypto/browser-key-storage.d.ts.map +0 -1
- package/dist/src/crypto/browser-key-storage.js +0 -76
- package/dist/src/crypto/browser-key-storage.js.map +0 -1
- package/dist/src/crypto/common.d.ts +0 -6
- package/dist/src/crypto/common.d.ts.map +0 -1
- package/dist/src/crypto/common.js +0 -8
- package/dist/src/crypto/common.js.map +0 -1
- package/dist/src/crypto/index.d.ts +0 -3
- package/dist/src/crypto/index.d.ts.map +0 -1
- package/dist/src/crypto/index.js +0 -3
- package/dist/src/crypto/index.js.map +0 -1
- package/dist/src/crypto/memory-key-storage.d.ts +0 -9
- package/dist/src/crypto/memory-key-storage.d.ts.map +0 -1
- package/dist/src/crypto/memory-key-storage.js +0 -18
- package/dist/src/crypto/memory-key-storage.js.map +0 -1
- package/dist/src/crypto/node-key-storage.d.ts +0 -21
- package/dist/src/crypto/node-key-storage.d.ts.map +0 -1
- package/dist/src/crypto/node-key-storage.js +0 -107
- package/dist/src/crypto/node-key-storage.js.map +0 -1
- package/dist/src/crypto/node.d.ts +0 -3
- package/dist/src/crypto/node.d.ts.map +0 -1
- package/dist/src/crypto/node.js +0 -3
- package/dist/src/crypto/node.js.map +0 -1
- package/dist/src/crypto/renown-crypto-builder.d.ts +0 -11
- package/dist/src/crypto/renown-crypto-builder.d.ts.map +0 -1
- package/dist/src/crypto/renown-crypto-builder.js +0 -34
- package/dist/src/crypto/renown-crypto-builder.js.map +0 -1
- package/dist/src/crypto/renown-crypto.d.ts +0 -26
- package/dist/src/crypto/renown-crypto.d.ts.map +0 -1
- package/dist/src/crypto/renown-crypto.js +0 -56
- package/dist/src/crypto/renown-crypto.js.map +0 -1
- package/dist/src/crypto/signer.d.ts +0 -74
- package/dist/src/crypto/signer.d.ts.map +0 -1
- package/dist/src/crypto/signer.js +0 -306
- package/dist/src/crypto/signer.js.map +0 -1
- package/dist/src/crypto/types.d.ts +0 -27
- package/dist/src/crypto/types.d.ts.map +0 -1
- package/dist/src/crypto/types.js +0 -2
- package/dist/src/crypto/types.js.map +0 -1
- package/dist/src/crypto/utils.d.ts +0 -13
- package/dist/src/crypto/utils.d.ts.map +0 -1
- package/dist/src/crypto/utils.js +0 -39
- package/dist/src/crypto/utils.js.map +0 -1
- package/dist/src/event/event.browser.d.ts +0 -10
- package/dist/src/event/event.browser.d.ts.map +0 -1
- package/dist/src/event/event.browser.js +0 -24
- package/dist/src/event/event.browser.js.map +0 -1
- package/dist/src/event/event.node.d.ts +0 -8
- package/dist/src/event/event.node.d.ts.map +0 -1
- package/dist/src/event/event.node.js +0 -17
- package/dist/src/event/event.node.js.map +0 -1
- package/dist/src/event/memory.d.ts +0 -8
- package/dist/src/event/memory.d.ts.map +0 -1
- package/dist/src/event/memory.js +0 -16
- package/dist/src/event/memory.js.map +0 -1
- package/dist/src/event/types.d.ts +0 -16
- package/dist/src/event/types.d.ts.map +0 -1
- package/dist/src/event/types.js +0 -2
- package/dist/src/event/types.js.map +0 -1
- package/dist/src/index.d.ts +0 -8
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -8
- package/dist/src/index.js.map +0 -1
- package/dist/src/init.browser.d.ts +0 -52
- package/dist/src/init.browser.d.ts.map +0 -1
- package/dist/src/init.browser.js +0 -66
- package/dist/src/init.browser.js.map +0 -1
- package/dist/src/init.node.d.ts +0 -29
- package/dist/src/init.node.d.ts.map +0 -1
- package/dist/src/init.node.js +0 -30
- package/dist/src/init.node.js.map +0 -1
- package/dist/src/node.d.ts +0 -10
- package/dist/src/node.d.ts.map +0 -1
- package/dist/src/node.js +0 -10
- package/dist/src/node.js.map +0 -1
- package/dist/src/profile.d.ts +0 -3
- package/dist/src/profile.d.ts.map +0 -1
- package/dist/src/profile.js +0 -22
- package/dist/src/profile.js.map +0 -1
- package/dist/src/renown-builder.d.ts +0 -68
- package/dist/src/renown-builder.d.ts.map +0 -1
- package/dist/src/renown-builder.js +0 -130
- package/dist/src/renown-builder.js.map +0 -1
- package/dist/src/storage/common.d.ts +0 -17
- package/dist/src/storage/common.d.ts.map +0 -1
- package/dist/src/storage/common.js +0 -20
- package/dist/src/storage/common.js.map +0 -1
- package/dist/src/storage/storage.browser.d.ts +0 -10
- package/dist/src/storage/storage.browser.d.ts.map +0 -1
- package/dist/src/storage/storage.browser.js +0 -27
- package/dist/src/storage/storage.browser.js.map +0 -1
- package/dist/src/storage/storage.node.d.ts +0 -11
- package/dist/src/storage/storage.node.d.ts.map +0 -1
- package/dist/src/storage/storage.node.js +0 -42
- package/dist/src/storage/storage.node.js.map +0 -1
- package/dist/src/types.d.ts +0 -126
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -2
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.d.ts +0 -24
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js +0 -94
- package/dist/src/utils.js.map +0 -1
- package/dist/test/auth.test.d.ts +0 -2
- package/dist/test/auth.test.d.ts.map +0 -1
- package/dist/test/auth.test.js +0 -13
- package/dist/test/auth.test.js.map +0 -1
- package/dist/test/crypto/signer.test.d.ts +0 -2
- package/dist/test/crypto/signer.test.d.ts.map +0 -1
- package/dist/test/crypto/signer.test.js +0 -184
- package/dist/test/crypto/signer.test.js.map +0 -1
- package/dist/test/renown.test.d.ts +0 -2
- package/dist/test/renown.test.d.ts.map +0 -1
- package/dist/test/renown.test.js +0 -287
- package/dist/test/renown.test.js.map +0 -1
- package/dist/test/storage.node.test.d.ts +0 -2
- package/dist/test/storage.node.test.d.ts.map +0 -1
- package/dist/test/storage.node.test.js +0 -66
- package/dist/test/storage.node.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/vitest.config.d.ts +0 -3
- package/dist/vitest.config.d.ts.map +0 -1
- package/dist/vitest.config.js +0 -7
- package/dist/vitest.config.js.map +0 -1
package/dist/test/auth.test.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { generatePrivateKey } from "@didtools/key-did";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
3
|
-
import { createAuthBearerToken, getIssuer, verifyAuthBearerToken, } from "../src/utils.js";
|
|
4
|
-
describe("auth", () => {
|
|
5
|
-
it("should be able to authenticate a user", async () => {
|
|
6
|
-
const randomKey = generatePrivateKey();
|
|
7
|
-
const issuer = await getIssuer(randomKey);
|
|
8
|
-
const token = await createAuthBearerToken(1, "test", "test", issuer);
|
|
9
|
-
const verified = await verifyAuthBearerToken(token);
|
|
10
|
-
expect(verified).toBeDefined();
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
//# sourceMappingURL=auth.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../test/auth.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signer.test.d.ts","sourceRoot":"","sources":["../../../test/crypto/signer.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
import { MemoryKeyStorage, RenownCryptoBuilder, RenownCryptoSigner, createSignatureVerifier, parseSignatureHashField, extractResultingHashFromSignature, signatureHasResultingHash, } from "../../src/crypto/index.js";
|
|
2
|
-
import { deriveOperationId } from "document-model/core";
|
|
3
|
-
import { beforeEach, describe, expect, it } from "vitest";
|
|
4
|
-
const TEST_DOC_ID = "test-doc-id";
|
|
5
|
-
const TEST_BRANCH = "main";
|
|
6
|
-
const TEST_SCOPE = "global";
|
|
7
|
-
function createTestAction(options) {
|
|
8
|
-
return {
|
|
9
|
-
id: "action-1",
|
|
10
|
-
type: "TEST_ACTION",
|
|
11
|
-
timestampUtcMs: new Date().toISOString(),
|
|
12
|
-
input: { foo: "bar" },
|
|
13
|
-
scope: "global",
|
|
14
|
-
context: options?.prevOpHash
|
|
15
|
-
? { prevOpHash: options.prevOpHash }
|
|
16
|
-
: undefined,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
function createOperationWithSignature(action, signature, did) {
|
|
20
|
-
const signedAction = {
|
|
21
|
-
...action,
|
|
22
|
-
context: {
|
|
23
|
-
...action.context,
|
|
24
|
-
signer: {
|
|
25
|
-
user: { address: did, chainId: 1, networkId: "eip155" },
|
|
26
|
-
app: { name: "test-app", key: did },
|
|
27
|
-
signatures: [signature],
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
return {
|
|
32
|
-
id: deriveOperationId(TEST_DOC_ID, TEST_SCOPE, TEST_BRANCH, signedAction.id),
|
|
33
|
-
index: 0,
|
|
34
|
-
timestampUtcMs: action.timestampUtcMs,
|
|
35
|
-
hash: "",
|
|
36
|
-
skip: 0,
|
|
37
|
-
action: signedAction,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
describe("RenownCryptoSigner", () => {
|
|
41
|
-
let keyStorage;
|
|
42
|
-
let renownCrypto;
|
|
43
|
-
let signer;
|
|
44
|
-
let verifier;
|
|
45
|
-
beforeEach(async () => {
|
|
46
|
-
keyStorage = new MemoryKeyStorage();
|
|
47
|
-
renownCrypto = await new RenownCryptoBuilder()
|
|
48
|
-
.withKeyPairStorage(keyStorage)
|
|
49
|
-
.build();
|
|
50
|
-
signer = new RenownCryptoSigner(renownCrypto, "test-app");
|
|
51
|
-
verifier = createSignatureVerifier();
|
|
52
|
-
});
|
|
53
|
-
describe("signActionWithResultingState", () => {
|
|
54
|
-
it("should include resultingStateHash in signature element [3]", async () => {
|
|
55
|
-
const action = createTestAction();
|
|
56
|
-
const resultingHash = "resulting-hash-abc123";
|
|
57
|
-
const signature = await signer.signActionWithResultingState(action, resultingHash);
|
|
58
|
-
expect(signature).toHaveLength(5);
|
|
59
|
-
expect(signature[3]).toContain(":");
|
|
60
|
-
expect(signature[3]).toContain(resultingHash);
|
|
61
|
-
});
|
|
62
|
-
it("should format hashField as prevStateHash:resultingStateHash", async () => {
|
|
63
|
-
const action = createTestAction({ prevOpHash: "prev-hash-xyz" });
|
|
64
|
-
const resultingHash = "resulting-hash-abc123";
|
|
65
|
-
const signature = await signer.signActionWithResultingState(action, resultingHash);
|
|
66
|
-
expect(signature[3]).toBe("prev-hash-xyz:resulting-hash-abc123");
|
|
67
|
-
});
|
|
68
|
-
it("should handle empty prevStateHash", async () => {
|
|
69
|
-
const action = createTestAction(); // no prevOpHash
|
|
70
|
-
const resultingHash = "resulting-hash-abc123";
|
|
71
|
-
const signature = await signer.signActionWithResultingState(action, resultingHash);
|
|
72
|
-
expect(signature[3]).toBe(":resulting-hash-abc123");
|
|
73
|
-
});
|
|
74
|
-
it("should produce verifiable signatures", async () => {
|
|
75
|
-
const action = createTestAction();
|
|
76
|
-
const resultingHash = "resulting-hash-abc123";
|
|
77
|
-
const signature = await signer.signActionWithResultingState(action, resultingHash);
|
|
78
|
-
// The signature should still be cryptographically valid
|
|
79
|
-
// (verification rebuilds message from params[0-3])
|
|
80
|
-
const operation = createOperationWithSignature(action, signature, signer.app.key);
|
|
81
|
-
const result = await verifier(operation, signer.app.key);
|
|
82
|
-
expect(result).toBe(true);
|
|
83
|
-
});
|
|
84
|
-
it("should abort when signal is aborted before starting", async () => {
|
|
85
|
-
const action = createTestAction();
|
|
86
|
-
const controller = new AbortController();
|
|
87
|
-
controller.abort();
|
|
88
|
-
await expect(signer.signActionWithResultingState(action, "hash", controller.signal)).rejects.toThrow("Signing aborted");
|
|
89
|
-
});
|
|
90
|
-
it("should produce different signatures than signAction for same action", async () => {
|
|
91
|
-
const action = createTestAction({ prevOpHash: "prev-hash" });
|
|
92
|
-
const resultingHash = "resulting-hash";
|
|
93
|
-
const sig1 = await signer.signAction(action);
|
|
94
|
-
const sig2 = await signer.signActionWithResultingState(action, resultingHash);
|
|
95
|
-
// Element [3] should differ
|
|
96
|
-
expect(sig1[3]).toBe("prev-hash");
|
|
97
|
-
expect(sig2[3]).toBe("prev-hash:resulting-hash");
|
|
98
|
-
// Signature hex [4] should differ (different message signed)
|
|
99
|
-
expect(sig1[4]).not.toBe(sig2[4]);
|
|
100
|
-
});
|
|
101
|
-
it("should handle empty resultingStateHash", async () => {
|
|
102
|
-
const action = createTestAction({ prevOpHash: "prev-hash" });
|
|
103
|
-
const signature = await signer.signActionWithResultingState(action, "");
|
|
104
|
-
expect(signature[3]).toBe("prev-hash:");
|
|
105
|
-
});
|
|
106
|
-
it("should handle both empty hashes", async () => {
|
|
107
|
-
const action = createTestAction(); // no prevOpHash
|
|
108
|
-
const signature = await signer.signActionWithResultingState(action, "");
|
|
109
|
-
expect(signature[3]).toBe(":");
|
|
110
|
-
});
|
|
111
|
-
it("should include valid timestamp", async () => {
|
|
112
|
-
const action = createTestAction();
|
|
113
|
-
const beforeTimestamp = Math.floor(Date.now() / 1000);
|
|
114
|
-
const signature = await signer.signActionWithResultingState(action, "hash");
|
|
115
|
-
// Allow 2 second tolerance for timing variations
|
|
116
|
-
const afterTimestamp = Math.floor(Date.now() / 1000) + 2;
|
|
117
|
-
const signatureTimestamp = parseInt(signature[0], 10);
|
|
118
|
-
expect(signatureTimestamp).toBeGreaterThanOrEqual(beforeTimestamp);
|
|
119
|
-
expect(signatureTimestamp).toBeLessThanOrEqual(afterTimestamp);
|
|
120
|
-
});
|
|
121
|
-
it("should include signer DID in element [1]", async () => {
|
|
122
|
-
const action = createTestAction();
|
|
123
|
-
const signature = await signer.signActionWithResultingState(action, "hash");
|
|
124
|
-
expect(signature[1]).toBe(renownCrypto.did);
|
|
125
|
-
expect(signature[1].startsWith("did:key:z")).toBe(true);
|
|
126
|
-
});
|
|
127
|
-
it("should include action hash in element [2]", async () => {
|
|
128
|
-
const action = createTestAction();
|
|
129
|
-
const signature = await signer.signActionWithResultingState(action, "hash");
|
|
130
|
-
// Hash should be a non-empty base64 string
|
|
131
|
-
expect(signature[2]).toBeDefined();
|
|
132
|
-
expect(signature[2].length).toBeGreaterThan(0);
|
|
133
|
-
});
|
|
134
|
-
it("should include hex signature in element [4]", async () => {
|
|
135
|
-
const action = createTestAction();
|
|
136
|
-
const signature = await signer.signActionWithResultingState(action, "hash");
|
|
137
|
-
expect(signature[4].startsWith("0x")).toBe(true);
|
|
138
|
-
expect(signature[4].length).toBeGreaterThan(2);
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
describe("parseSignatureHashField", () => {
|
|
143
|
-
it("should parse old format (no resulting hash)", () => {
|
|
144
|
-
const result = parseSignatureHashField("prev-hash-abc");
|
|
145
|
-
expect(result.prevStateHash).toBe("prev-hash-abc");
|
|
146
|
-
expect(result.resultingStateHash).toBeUndefined();
|
|
147
|
-
});
|
|
148
|
-
it("should parse new format (with resulting hash)", () => {
|
|
149
|
-
const result = parseSignatureHashField("prev-hash:resulting-hash");
|
|
150
|
-
expect(result.prevStateHash).toBe("prev-hash");
|
|
151
|
-
expect(result.resultingStateHash).toBe("resulting-hash");
|
|
152
|
-
});
|
|
153
|
-
it("should handle empty prevStateHash", () => {
|
|
154
|
-
const result = parseSignatureHashField(":resulting-hash");
|
|
155
|
-
expect(result.prevStateHash).toBe("");
|
|
156
|
-
expect(result.resultingStateHash).toBe("resulting-hash");
|
|
157
|
-
});
|
|
158
|
-
it("should handle empty string", () => {
|
|
159
|
-
const result = parseSignatureHashField("");
|
|
160
|
-
expect(result.prevStateHash).toBe("");
|
|
161
|
-
expect(result.resultingStateHash).toBeUndefined();
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
describe("extractResultingHashFromSignature", () => {
|
|
165
|
-
it("should return undefined for old format signatures", () => {
|
|
166
|
-
const signature = ["ts", "did", "hash", "prevHash", "0xsig"];
|
|
167
|
-
expect(extractResultingHashFromSignature(signature)).toBeUndefined();
|
|
168
|
-
});
|
|
169
|
-
it("should return resulting hash for new format signatures", () => {
|
|
170
|
-
const signature = ["ts", "did", "hash", "prev:result", "0xsig"];
|
|
171
|
-
expect(extractResultingHashFromSignature(signature)).toBe("result");
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
describe("signatureHasResultingHash", () => {
|
|
175
|
-
it("should return false for old format", () => {
|
|
176
|
-
const signature = ["ts", "did", "hash", "prevHash", "0xsig"];
|
|
177
|
-
expect(signatureHasResultingHash(signature)).toBe(false);
|
|
178
|
-
});
|
|
179
|
-
it("should return true for new format", () => {
|
|
180
|
-
const signature = ["ts", "did", "hash", "prev:result", "0xsig"];
|
|
181
|
-
expect(signatureHasResultingHash(signature)).toBe(true);
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
//# sourceMappingURL=signer.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signer.test.js","sourceRoot":"","sources":["../../../test/crypto/signer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renown.test.d.ts","sourceRoot":"","sources":["../../test/renown.test.ts"],"names":[],"mappings":""}
|
package/dist/test/renown.test.js
DELETED
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { Renown, RenownMemoryStorage } from "../src/common.js";
|
|
3
|
-
import { MemoryKeyStorage, RenownCryptoBuilder } from "../src/crypto/index.js";
|
|
4
|
-
import { MemoryEventEmitter } from "../src/event/memory.js";
|
|
5
|
-
import { fetchRenownProfile } from "../src/profile.js";
|
|
6
|
-
const TEST_BASE_URL = "https://test.renown.id";
|
|
7
|
-
const TEST_ADDRESS = "0x9aDdcBbaA28F7eB5f75E023F7C1Fcb13C9DFD8F7";
|
|
8
|
-
const TEST_USER_DID = `did:pkh:eip155:1:${TEST_ADDRESS}`;
|
|
9
|
-
function createMockCredential(userDid, appDid) {
|
|
10
|
-
return {
|
|
11
|
-
"@context": ["https://www.w3.org/2018/credentials/v1"],
|
|
12
|
-
id: "test-credential-id",
|
|
13
|
-
type: ["VerifiableCredential"],
|
|
14
|
-
issuer: {
|
|
15
|
-
id: userDid,
|
|
16
|
-
ethereumAddress: TEST_ADDRESS,
|
|
17
|
-
},
|
|
18
|
-
issuanceDate: new Date().toISOString(),
|
|
19
|
-
credentialSubject: {
|
|
20
|
-
id: appDid,
|
|
21
|
-
app: "test-app",
|
|
22
|
-
},
|
|
23
|
-
credentialSchema: {
|
|
24
|
-
id: "https://schema.org",
|
|
25
|
-
type: "JsonSchemaValidator2018",
|
|
26
|
-
},
|
|
27
|
-
proof: {
|
|
28
|
-
verificationMethod: "test",
|
|
29
|
-
ethereumAddress: TEST_ADDRESS,
|
|
30
|
-
created: new Date().toISOString(),
|
|
31
|
-
proofPurpose: "assertionMethod",
|
|
32
|
-
type: "EthereumEip712Signature2021",
|
|
33
|
-
proofValue: "0xtest",
|
|
34
|
-
eip712: {
|
|
35
|
-
domain: {
|
|
36
|
-
name: "Renown",
|
|
37
|
-
version: "1",
|
|
38
|
-
chainId: 1,
|
|
39
|
-
verifyingContract: "0x0000000000000000000000000000000000000000",
|
|
40
|
-
},
|
|
41
|
-
types: {},
|
|
42
|
-
primaryType: "VerifiableCredential",
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
const MOCK_PROFILE = {
|
|
48
|
-
documentId: "doc-123",
|
|
49
|
-
username: "testuser",
|
|
50
|
-
ethAddress: TEST_ADDRESS,
|
|
51
|
-
userImage: "https://example.com/avatar.png",
|
|
52
|
-
createdAt: "2025-01-01T00:00:00Z",
|
|
53
|
-
updatedAt: "2025-01-01T00:00:00Z",
|
|
54
|
-
};
|
|
55
|
-
describe("Renown login flow", () => {
|
|
56
|
-
let renown;
|
|
57
|
-
let appDid;
|
|
58
|
-
beforeEach(async () => {
|
|
59
|
-
const keyStorage = new MemoryKeyStorage();
|
|
60
|
-
const crypto = await new RenownCryptoBuilder()
|
|
61
|
-
.withKeyPairStorage(keyStorage)
|
|
62
|
-
.build();
|
|
63
|
-
appDid = crypto.did;
|
|
64
|
-
renown = new Renown(new RenownMemoryStorage(), new MemoryEventEmitter(), crypto, "test-app", TEST_BASE_URL, fetchRenownProfile);
|
|
65
|
-
});
|
|
66
|
-
afterEach(() => {
|
|
67
|
-
vi.restoreAllMocks();
|
|
68
|
-
});
|
|
69
|
-
function mockFetch(options) {
|
|
70
|
-
const { credential, profile = MOCK_PROFILE, credentialStatus = 200, profileStatus = 200, } = options;
|
|
71
|
-
vi.spyOn(globalThis, "fetch").mockImplementation(async (input) => {
|
|
72
|
-
const url = input instanceof URL ? input.toString() : String(input);
|
|
73
|
-
if (url.includes("/api/auth/credential")) {
|
|
74
|
-
if (credentialStatus !== 200 || credential === null) {
|
|
75
|
-
return new Response(null, { status: credentialStatus || 404 });
|
|
76
|
-
}
|
|
77
|
-
return Response.json({ credential });
|
|
78
|
-
}
|
|
79
|
-
if (url.includes("/api/profile")) {
|
|
80
|
-
if (profileStatus !== 200 || profile === null) {
|
|
81
|
-
return new Response(null, { status: profileStatus || 404 });
|
|
82
|
-
}
|
|
83
|
-
return Response.json({ profile });
|
|
84
|
-
}
|
|
85
|
-
return new Response(null, { status: 404 });
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
describe("successful login", () => {
|
|
89
|
-
it("should authenticate user and transition through status states", async () => {
|
|
90
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
91
|
-
mockFetch({ credential });
|
|
92
|
-
const statuses = [];
|
|
93
|
-
renown.on("status", (status) => statuses.push(status));
|
|
94
|
-
expect(renown.status).toBe("initial");
|
|
95
|
-
const user = await renown.login(TEST_USER_DID);
|
|
96
|
-
expect(user.did).toBe(TEST_USER_DID);
|
|
97
|
-
expect(user.address).toBe(TEST_ADDRESS);
|
|
98
|
-
expect(user.networkId).toBe("eip155");
|
|
99
|
-
expect(user.chainId).toBe(1);
|
|
100
|
-
expect(user.credential).toStrictEqual(credential);
|
|
101
|
-
expect(renown.status).toBe("authorized");
|
|
102
|
-
expect(statuses).toEqual(["checking", "authorized"]);
|
|
103
|
-
});
|
|
104
|
-
it("should emit user event on login", async () => {
|
|
105
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
106
|
-
mockFetch({ credential });
|
|
107
|
-
const users = [];
|
|
108
|
-
renown.on("user", (user) => users.push(user));
|
|
109
|
-
await renown.login(TEST_USER_DID);
|
|
110
|
-
expect(users).toHaveLength(1);
|
|
111
|
-
expect(users[0]?.did).toBe(TEST_USER_DID);
|
|
112
|
-
});
|
|
113
|
-
it("should persist user in storage", async () => {
|
|
114
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
115
|
-
mockFetch({ credential });
|
|
116
|
-
await renown.login(TEST_USER_DID);
|
|
117
|
-
expect(renown.user).toBeDefined();
|
|
118
|
-
expect(renown.user?.did).toBe(TEST_USER_DID);
|
|
119
|
-
});
|
|
120
|
-
it("should call credential API with correct parameters", async () => {
|
|
121
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
122
|
-
mockFetch({ credential });
|
|
123
|
-
await renown.login(TEST_USER_DID);
|
|
124
|
-
expect(globalThis.fetch).toHaveBeenCalledWith(expect.objectContaining({
|
|
125
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
126
|
-
href: expect.stringContaining("/api/auth/credential"),
|
|
127
|
-
}), expect.objectContaining({ method: "GET" }));
|
|
128
|
-
const fetchCall = vi.mocked(globalThis.fetch).mock.calls[0];
|
|
129
|
-
const url = fetchCall[0];
|
|
130
|
-
const params = new URL(url.toString()).searchParams;
|
|
131
|
-
expect(params.get("address")).toBe(TEST_ADDRESS);
|
|
132
|
-
expect(params.get("chainId")).toBe("1");
|
|
133
|
-
expect(params.get("connectId")).toBe(appDid);
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
describe("profile fetching", () => {
|
|
137
|
-
it("should enrich user with profile data in the background", async () => {
|
|
138
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
139
|
-
mockFetch({ credential });
|
|
140
|
-
await renown.login(TEST_USER_DID);
|
|
141
|
-
// Wait for background profile fetch
|
|
142
|
-
await vi.waitFor(() => {
|
|
143
|
-
expect(renown.user?.profile).toBeDefined();
|
|
144
|
-
});
|
|
145
|
-
expect(renown.user?.profile?.documentId).toBe("doc-123");
|
|
146
|
-
expect(renown.user?.profile?.username).toBe("testuser");
|
|
147
|
-
expect(renown.user?.ens?.name).toBe("testuser");
|
|
148
|
-
expect(renown.user?.ens?.avatarUrl).toBe("https://example.com/avatar.png");
|
|
149
|
-
});
|
|
150
|
-
it("should emit a second user event after profile fetch", async () => {
|
|
151
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
152
|
-
mockFetch({ credential });
|
|
153
|
-
const users = [];
|
|
154
|
-
renown.on("user", (user) => users.push(user));
|
|
155
|
-
await renown.login(TEST_USER_DID);
|
|
156
|
-
await vi.waitFor(() => {
|
|
157
|
-
expect(users).toHaveLength(2);
|
|
158
|
-
});
|
|
159
|
-
// First emission: user without profile
|
|
160
|
-
expect(users[0]?.profile).toBeUndefined();
|
|
161
|
-
// Second emission: user with profile
|
|
162
|
-
expect(users[1]?.profile?.documentId).toBe("doc-123");
|
|
163
|
-
});
|
|
164
|
-
it("should call profile API with correct parameters", async () => {
|
|
165
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
166
|
-
mockFetch({ credential });
|
|
167
|
-
await renown.login(TEST_USER_DID);
|
|
168
|
-
await vi.waitFor(() => {
|
|
169
|
-
expect(renown.user?.profile).toBeDefined();
|
|
170
|
-
});
|
|
171
|
-
const profileCall = vi
|
|
172
|
-
.mocked(globalThis.fetch)
|
|
173
|
-
.mock.calls.find((call) => String(call[0]).includes("/api/profile"));
|
|
174
|
-
expect(profileCall).toBeDefined();
|
|
175
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
176
|
-
const body = JSON.parse(profileCall[1].body);
|
|
177
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
178
|
-
expect(body.ethAddress).toBe(TEST_ADDRESS);
|
|
179
|
-
});
|
|
180
|
-
it("should handle profile fetch failure gracefully", async () => {
|
|
181
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
182
|
-
mockFetch({ credential, profileStatus: 500 });
|
|
183
|
-
const user = await renown.login(TEST_USER_DID);
|
|
184
|
-
// Login should succeed even if profile fails
|
|
185
|
-
expect(user.did).toBe(TEST_USER_DID);
|
|
186
|
-
expect(renown.status).toBe("authorized");
|
|
187
|
-
// Give time for background fetch to complete
|
|
188
|
-
await new Promise((r) => setTimeout(r, 50));
|
|
189
|
-
// Profile should remain undefined
|
|
190
|
-
expect(renown.user?.profile).toBeUndefined();
|
|
191
|
-
});
|
|
192
|
-
it("should not update user if they logged out before profile returns", async () => {
|
|
193
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
194
|
-
// Make profile fetch slow
|
|
195
|
-
vi.spyOn(globalThis, "fetch").mockImplementation(async (input) => {
|
|
196
|
-
const url = String(input);
|
|
197
|
-
if (url.includes("/api/auth/credential")) {
|
|
198
|
-
return Response.json({ credential });
|
|
199
|
-
}
|
|
200
|
-
if (url.includes("/api/profile")) {
|
|
201
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
202
|
-
return Response.json({ profile: MOCK_PROFILE });
|
|
203
|
-
}
|
|
204
|
-
return new Response(null, { status: 404 });
|
|
205
|
-
});
|
|
206
|
-
await renown.login(TEST_USER_DID);
|
|
207
|
-
await renown.logout();
|
|
208
|
-
// Wait for slow profile fetch to resolve
|
|
209
|
-
await new Promise((r) => setTimeout(r, 200));
|
|
210
|
-
// User should remain undefined after logout
|
|
211
|
-
expect(renown.user).toBeUndefined();
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
describe("login errors", () => {
|
|
215
|
-
it("should throw when credential is not found", async () => {
|
|
216
|
-
mockFetch({ credential: null, credentialStatus: 404 });
|
|
217
|
-
await expect(renown.login(TEST_USER_DID)).rejects.toThrow("Failed to get credential: 404");
|
|
218
|
-
expect(renown.status).toBe("not-authorized");
|
|
219
|
-
expect(renown.user).toBeUndefined();
|
|
220
|
-
});
|
|
221
|
-
it("should throw when credential issuer does not match userDid", async () => {
|
|
222
|
-
const credential = createMockCredential("did:pkh:eip155:1:0xDEADBEEF", appDid);
|
|
223
|
-
mockFetch({ credential });
|
|
224
|
-
await expect(renown.login(TEST_USER_DID)).rejects.toThrow("Invalid credential");
|
|
225
|
-
expect(renown.status).toBe("not-authorized");
|
|
226
|
-
});
|
|
227
|
-
it("should throw when credential subject does not match app DID", async () => {
|
|
228
|
-
const credential = createMockCredential(TEST_USER_DID, "did:key:wrong");
|
|
229
|
-
mockFetch({ credential });
|
|
230
|
-
await expect(renown.login(TEST_USER_DID)).rejects.toThrow("Invalid credential");
|
|
231
|
-
expect(renown.status).toBe("not-authorized");
|
|
232
|
-
});
|
|
233
|
-
it("should throw for invalid DID format", async () => {
|
|
234
|
-
await expect(renown.login("invalid-did")).rejects.toThrow("Invalid pkh did");
|
|
235
|
-
expect(renown.status).toBe("not-authorized");
|
|
236
|
-
});
|
|
237
|
-
it("should emit status and user events on failure", async () => {
|
|
238
|
-
mockFetch({ credential: null, credentialStatus: 404 });
|
|
239
|
-
const statuses = [];
|
|
240
|
-
const users = [];
|
|
241
|
-
renown.on("status", (s) => statuses.push(s));
|
|
242
|
-
renown.on("user", (u) => users.push(u));
|
|
243
|
-
await expect(renown.login(TEST_USER_DID)).rejects.toThrow();
|
|
244
|
-
expect(statuses).toEqual(["checking", "not-authorized"]);
|
|
245
|
-
expect(users).toEqual([undefined]);
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
describe("logout", () => {
|
|
249
|
-
it("should clear user and set status to not-authorized", async () => {
|
|
250
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
251
|
-
mockFetch({ credential });
|
|
252
|
-
await renown.login(TEST_USER_DID);
|
|
253
|
-
expect(renown.user).toBeDefined();
|
|
254
|
-
expect(renown.status).toBe("authorized");
|
|
255
|
-
await renown.logout();
|
|
256
|
-
expect(renown.user).toBeUndefined();
|
|
257
|
-
expect(renown.status).toBe("not-authorized");
|
|
258
|
-
});
|
|
259
|
-
it("should emit user and status events on logout", async () => {
|
|
260
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
261
|
-
mockFetch({ credential });
|
|
262
|
-
await renown.login(TEST_USER_DID);
|
|
263
|
-
const statuses = [];
|
|
264
|
-
const users = [];
|
|
265
|
-
renown.on("status", (s) => statuses.push(s));
|
|
266
|
-
renown.on("user", (u) => users.push(u));
|
|
267
|
-
await renown.logout();
|
|
268
|
-
expect(statuses).toEqual(["not-authorized"]);
|
|
269
|
-
expect(users).toEqual([undefined]);
|
|
270
|
-
});
|
|
271
|
-
});
|
|
272
|
-
describe("event subscriptions", () => {
|
|
273
|
-
it("should return unsubscribe function from on()", async () => {
|
|
274
|
-
const credential = createMockCredential(TEST_USER_DID, appDid);
|
|
275
|
-
mockFetch({ credential });
|
|
276
|
-
const statuses = [];
|
|
277
|
-
const unsubscribe = renown.on("status", (s) => statuses.push(s));
|
|
278
|
-
await renown.login(TEST_USER_DID);
|
|
279
|
-
expect(statuses).toEqual(["checking", "authorized"]);
|
|
280
|
-
unsubscribe();
|
|
281
|
-
await renown.logout();
|
|
282
|
-
// Should not receive the "not-authorized" event after unsubscribe
|
|
283
|
-
expect(statuses).toEqual(["checking", "authorized"]);
|
|
284
|
-
});
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
//# sourceMappingURL=renown.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renown.test.js","sourceRoot":"","sources":["../../test/renown.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.node.test.d.ts","sourceRoot":"","sources":["../../test/storage.node.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,66 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.node.test.js","sourceRoot":"","sources":["../../test/storage.node.test.ts"],"names":[],"mappings":"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"}
|