@renown/sdk 6.0.0-dev.3 → 6.0.0-dev.31
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/src/common.d.ts +14 -8
- package/dist/src/common.d.ts.map +1 -1
- package/dist/src/common.js +35 -27
- package/dist/src/common.js.map +1 -1
- package/dist/src/crypto/browser-key-storage.d.ts +4 -2
- package/dist/src/crypto/browser-key-storage.d.ts.map +1 -1
- package/dist/src/crypto/browser-key-storage.js +54 -51
- package/dist/src/crypto/browser-key-storage.js.map +1 -1
- package/dist/src/crypto/index.d.ts +5 -34
- package/dist/src/crypto/index.d.ts.map +1 -1
- package/dist/src/crypto/index.js +7 -128
- package/dist/src/crypto/index.js.map +1 -1
- package/dist/src/crypto/memory-key-storage.d.ts +9 -0
- package/dist/src/crypto/memory-key-storage.d.ts.map +1 -0
- package/dist/src/crypto/memory-key-storage.js +18 -0
- package/dist/src/crypto/memory-key-storage.js.map +1 -0
- package/dist/src/crypto/node-key-storage.d.ts +16 -3
- package/dist/src/crypto/node-key-storage.d.ts.map +1 -1
- package/dist/src/crypto/node-key-storage.js +82 -42
- package/dist/src/crypto/node-key-storage.js.map +1 -1
- package/dist/src/crypto/renown-crypto-builder.d.ts +11 -0
- package/dist/src/crypto/renown-crypto-builder.d.ts.map +1 -0
- package/dist/src/crypto/renown-crypto-builder.js +34 -0
- package/dist/src/crypto/renown-crypto-builder.js.map +1 -0
- package/dist/src/crypto/renown-crypto.d.ts +26 -0
- package/dist/src/crypto/renown-crypto.d.ts.map +1 -0
- package/dist/src/crypto/renown-crypto.js +56 -0
- package/dist/src/crypto/renown-crypto.js.map +1 -0
- package/dist/src/crypto/signer.d.ts +13 -8
- package/dist/src/crypto/signer.d.ts.map +1 -1
- package/dist/src/crypto/signer.js +27 -26
- package/dist/src/crypto/signer.js.map +1 -1
- package/dist/src/crypto/types.d.ts +27 -0
- package/dist/src/crypto/types.d.ts.map +1 -0
- package/dist/src/crypto/types.js +2 -0
- package/dist/src/crypto/types.js.map +1 -0
- package/dist/src/crypto/utils.d.ts +13 -0
- package/dist/src/crypto/utils.d.ts.map +1 -0
- package/dist/src/crypto/utils.js +39 -0
- package/dist/src/crypto/utils.js.map +1 -0
- package/dist/src/event/memory.d.ts +8 -0
- package/dist/src/event/memory.d.ts.map +1 -0
- package/dist/src/event/memory.js +16 -0
- package/dist/src/event/memory.js.map +1 -0
- package/dist/src/hooks/use-user.d.ts +1 -1
- package/dist/src/hooks/use-user.js +1 -1
- package/dist/src/index.browser.d.ts +1 -1
- package/dist/src/index.browser.d.ts.map +1 -1
- package/dist/src/index.browser.js +1 -1
- package/dist/src/index.browser.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.node.d.ts +1 -1
- package/dist/src/index.node.d.ts.map +1 -1
- package/dist/src/index.node.js +1 -1
- package/dist/src/index.node.js.map +1 -1
- package/dist/src/init.browser.d.ts +51 -2
- package/dist/src/init.browser.d.ts.map +1 -1
- package/dist/src/init.browser.js +62 -3
- package/dist/src/init.browser.js.map +1 -1
- package/dist/src/init.node.d.ts +28 -2
- package/dist/src/init.node.d.ts.map +1 -1
- package/dist/src/init.node.js +26 -4
- package/dist/src/init.node.js.map +1 -1
- package/dist/src/lib/renown/credential.d.ts +2 -0
- package/dist/src/lib/renown/credential.d.ts.map +1 -0
- package/dist/src/lib/renown/credential.js +68 -0
- package/dist/src/lib/renown/credential.js.map +1 -0
- package/dist/src/lib/renown/utils.d.ts +4 -4
- package/dist/src/lib/renown/utils.d.ts.map +1 -1
- package/dist/src/lib/renown/utils.js +24 -43
- package/dist/src/lib/renown/utils.js.map +1 -1
- package/dist/src/node.d.ts +5 -1
- package/dist/src/node.d.ts.map +1 -1
- package/dist/src/node.js +5 -1
- package/dist/src/node.js.map +1 -1
- package/dist/src/providers/renown-user-provider.d.ts +9 -5
- package/dist/src/providers/renown-user-provider.d.ts.map +1 -1
- package/dist/src/providers/renown-user-provider.js +25 -30
- package/dist/src/providers/renown-user-provider.js.map +1 -1
- package/dist/src/renown-builder.d.ts +60 -0
- package/dist/src/renown-builder.d.ts.map +1 -0
- package/dist/src/renown-builder.js +115 -0
- package/dist/src/renown-builder.js.map +1 -0
- package/dist/src/storage/common.d.ts +14 -10
- package/dist/src/storage/common.d.ts.map +1 -1
- package/dist/src/storage/common.js +16 -3
- package/dist/src/storage/common.js.map +1 -1
- package/dist/src/storage/storage.browser.d.ts +1 -0
- package/dist/src/storage/storage.browser.d.ts.map +1 -1
- package/dist/src/storage/storage.browser.js +3 -1
- package/dist/src/storage/storage.browser.js.map +1 -1
- package/dist/src/storage/storage.node.d.ts +1 -1
- package/dist/src/storage/storage.node.d.ts.map +1 -1
- package/dist/src/storage/storage.node.js +7 -5
- package/dist/src/storage/storage.node.js.map +1 -1
- package/dist/src/types.d.ts +28 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils.d.ts +11 -10
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +8 -0
- package/dist/src/utils.js.map +1 -1
- package/dist/{tests → test}/auth.test.d.ts.map +1 -1
- package/dist/test/auth.test.js.map +1 -0
- package/dist/test/script.test.d.ts +2 -0
- package/dist/test/script.test.d.ts.map +1 -0
- package/dist/test/script.test.js +45 -0
- package/dist/test/script.test.js.map +1 -0
- package/dist/test/storage.node.test.d.ts +2 -0
- package/dist/test/storage.node.test.d.ts.map +1 -0
- package/dist/test/storage.node.test.js +66 -0
- package/dist/test/storage.node.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +7 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +5 -5
- package/dist/src/lib/crypto/browser.d.ts +0 -8
- package/dist/src/lib/crypto/browser.d.ts.map +0 -1
- package/dist/src/lib/crypto/browser.js +0 -73
- package/dist/src/lib/crypto/browser.js.map +0 -1
- package/dist/src/lib/crypto/index.d.ts +0 -36
- package/dist/src/lib/crypto/index.d.ts.map +0 -1
- package/dist/src/lib/crypto/index.js +0 -150
- package/dist/src/lib/crypto/index.js.map +0 -1
- package/dist/src/lib/crypto/node.d.ts +0 -8
- package/dist/src/lib/crypto/node.d.ts.map +0 -1
- package/dist/src/lib/crypto/node.js +0 -67
- package/dist/src/lib/crypto/node.js.map +0 -1
- package/dist/tests/auth.test.js.map +0 -1
- /package/dist/{tests → test}/auth.test.d.ts +0 -0
- /package/dist/{tests → test}/auth.test.js +0 -0
package/dist/src/common.d.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import type { ISigner } from "document-model";
|
|
2
|
+
import { type IRenownCrypto } from "./crypto/index.js";
|
|
3
|
+
import { MemoryStorage } from "./storage/common.js";
|
|
4
|
+
import type { CreateBearerTokenOptions, IRenown, RenownEventEmitter, RenownEvents, RenownStorage, RenownStorageMap, User } from "./types.js";
|
|
5
|
+
export * from "./constants.js";
|
|
6
|
+
export declare class RenownMemoryStorage extends MemoryStorage<RenownStorageMap> {
|
|
7
|
+
}
|
|
4
8
|
export declare class Renown implements IRenown {
|
|
5
9
|
#private;
|
|
6
|
-
constructor(store: RenownStorage, eventEmitter: RenownEventEmitter,
|
|
10
|
+
constructor(store: RenownStorage, eventEmitter: RenownEventEmitter, crypto: IRenownCrypto, appName: string, baseUrl?: string);
|
|
11
|
+
get baseUrl(): string;
|
|
7
12
|
get user(): import("./types.js").InternalUser | undefined;
|
|
8
|
-
|
|
9
|
-
|
|
13
|
+
get signer(): ISigner;
|
|
14
|
+
get did(): `did:${string}`;
|
|
15
|
+
login(userDid: string): Promise<User>;
|
|
10
16
|
logout(): Promise<void>;
|
|
11
17
|
on<K extends keyof RenownEvents>(event: K, listener: (data: RenownEvents[K]) => void): () => void;
|
|
12
|
-
verifyBearerToken(token: string): Promise<false | import("
|
|
13
|
-
|
|
18
|
+
verifyBearerToken(token: string): Promise<false | import("./types.js").AuthVerifiedCredential>;
|
|
19
|
+
getBearerToken(options: CreateBearerTokenOptions): Promise<string>;
|
|
14
20
|
}
|
|
15
21
|
//# sourceMappingURL=common.d.ts.map
|
package/dist/src/common.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EACV,wBAAwB,EACxB,OAAO,EAEP,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,IAAI,EACL,MAAM,YAAY,CAAC;AAEpB,cAAc,gBAAgB,CAAC;AAE/B,qBAAa,mBAAoB,SAAQ,aAAa,CAAC,gBAAgB,CAAC;CAAG;AAE3E,qBAAa,MAAO,YAAW,OAAO;;gBASlC,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,kBAAkB,EAChC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,SAAqB;IAc9B,IAAI,OAAO,WAEV;IAED,IAAI,IAAI,kDAEP;IAED,IAAI,MAAM,YAET;IAED,IAAI,GAAG,oBAEN;IAWK,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC3C,MAAM;IAKN,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EAC7B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GACxC,MAAM,IAAI;IA6BP,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAI/B,cAAc,CAAC,OAAO,EAAE,wBAAwB;CAMvD"}
|
package/dist/src/common.js
CHANGED
|
@@ -1,22 +1,40 @@
|
|
|
1
1
|
import { DEFAULT_RENOWN_URL } from "./constants.js";
|
|
2
|
-
import {
|
|
2
|
+
import { RenownCryptoSigner } from "./crypto/index.js";
|
|
3
|
+
import { MemoryStorage } from "./storage/common.js";
|
|
4
|
+
import { parsePkhDid, verifyAuthBearerToken } from "./utils.js";
|
|
5
|
+
export * from "./constants.js";
|
|
6
|
+
export class RenownMemoryStorage extends MemoryStorage {
|
|
7
|
+
}
|
|
3
8
|
export class Renown {
|
|
4
9
|
#baseUrl;
|
|
5
10
|
#store;
|
|
6
|
-
#connectId;
|
|
7
11
|
#eventEmitter;
|
|
8
|
-
|
|
12
|
+
#appName;
|
|
13
|
+
#crypto;
|
|
14
|
+
#signer;
|
|
15
|
+
constructor(store, eventEmitter, crypto, appName, baseUrl = DEFAULT_RENOWN_URL) {
|
|
9
16
|
this.#store = store;
|
|
10
17
|
this.#eventEmitter = eventEmitter;
|
|
11
|
-
this.#connectId = connectId;
|
|
12
18
|
this.#baseUrl = baseUrl;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
this.#crypto = crypto;
|
|
20
|
+
this.#appName = appName;
|
|
21
|
+
this.#signer = new RenownCryptoSigner(crypto, this.#appName, this.user);
|
|
22
|
+
this.on("user", (user) => {
|
|
23
|
+
this.#signer.user = user;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
get baseUrl() {
|
|
27
|
+
return this.#baseUrl;
|
|
16
28
|
}
|
|
17
29
|
get user() {
|
|
18
30
|
return this.#store.get("user");
|
|
19
31
|
}
|
|
32
|
+
get signer() {
|
|
33
|
+
return this.#signer;
|
|
34
|
+
}
|
|
35
|
+
get did() {
|
|
36
|
+
return this.#crypto.did;
|
|
37
|
+
}
|
|
20
38
|
#updateUser(user) {
|
|
21
39
|
if (user) {
|
|
22
40
|
this.#store.set("user", user);
|
|
@@ -26,28 +44,18 @@ export class Renown {
|
|
|
26
44
|
}
|
|
27
45
|
this.#eventEmitter.emit("user", user);
|
|
28
46
|
}
|
|
29
|
-
|
|
30
|
-
this.#connectId = connectId;
|
|
31
|
-
const user = this.user;
|
|
32
|
-
this.#updateUser(undefined);
|
|
33
|
-
// tries to login with new connectId
|
|
34
|
-
if (user) {
|
|
35
|
-
this.login(user.did).catch((e) => {
|
|
36
|
-
console.log("User no longer authenticated:", e);
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
async login(did) {
|
|
47
|
+
async login(userDid) {
|
|
41
48
|
try {
|
|
42
|
-
const result = parsePkhDid(
|
|
43
|
-
const credential = await this.#getCredential(result.address, result.chainId, this.#
|
|
49
|
+
const result = parsePkhDid(userDid);
|
|
50
|
+
const credential = await this.#getCredential(result.address, result.chainId, this.#crypto.did);
|
|
44
51
|
if (!credential) {
|
|
45
52
|
this.#updateUser(undefined);
|
|
46
53
|
throw new Error("Credential not found");
|
|
47
54
|
}
|
|
48
55
|
const user = {
|
|
49
56
|
...result,
|
|
50
|
-
|
|
57
|
+
address: credential.issuer.ethereumAddress,
|
|
58
|
+
did: userDid,
|
|
51
59
|
credential,
|
|
52
60
|
};
|
|
53
61
|
// TODO
|
|
@@ -76,11 +84,11 @@ export class Renown {
|
|
|
76
84
|
on(event, listener) {
|
|
77
85
|
return this.#eventEmitter.on(event, listener);
|
|
78
86
|
}
|
|
79
|
-
async #getCredential(address, chainId,
|
|
87
|
+
async #getCredential(address, chainId, appDid) {
|
|
80
88
|
if (!this.#baseUrl) {
|
|
81
89
|
throw new Error("RENOWN_URL is not set");
|
|
82
90
|
}
|
|
83
|
-
const url = new URL(`/api/auth/credential?address=${encodeURIComponent(address)}&chainId=${encodeURIComponent(chainId)}&connectId=${encodeURIComponent(
|
|
91
|
+
const url = new URL(`/api/auth/credential?address=${encodeURIComponent(address)}&chainId=${encodeURIComponent(chainId)}&connectId=${encodeURIComponent(appDid)}`, this.#baseUrl);
|
|
84
92
|
const response = await fetch(url, {
|
|
85
93
|
method: "GET",
|
|
86
94
|
});
|
|
@@ -89,17 +97,17 @@ export class Renown {
|
|
|
89
97
|
return result.credential;
|
|
90
98
|
}
|
|
91
99
|
else {
|
|
92
|
-
throw new Error(
|
|
100
|
+
throw new Error(`Failed to get credential: ${response.status}`);
|
|
93
101
|
}
|
|
94
102
|
}
|
|
95
103
|
async verifyBearerToken(token) {
|
|
96
104
|
return verifyAuthBearerToken(token);
|
|
97
105
|
}
|
|
98
|
-
async
|
|
106
|
+
async getBearerToken(options) {
|
|
99
107
|
if (!this.user) {
|
|
100
108
|
throw new Error("User not found");
|
|
101
109
|
}
|
|
102
|
-
return
|
|
110
|
+
return this.#crypto.getBearerToken(this.user.address, options);
|
|
103
111
|
}
|
|
104
112
|
}
|
|
105
113
|
//# sourceMappingURL=common.js.map
|
package/dist/src/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type { JsonWebKeyPairStorage, JwkKeyPair } from "./
|
|
1
|
+
import type { JsonWebKeyPairStorage, JwkKeyPair } from "./types.js";
|
|
2
2
|
export declare class BrowserKeyStorage implements JsonWebKeyPairStorage {
|
|
3
3
|
#private;
|
|
4
|
-
constructor();
|
|
4
|
+
constructor(db: IDBDatabase);
|
|
5
|
+
static create(dbName?: string): Promise<BrowserKeyStorage>;
|
|
5
6
|
saveKeyPair(keyPair: JwkKeyPair): Promise<void>;
|
|
6
7
|
loadKeyPair(): Promise<JwkKeyPair | undefined>;
|
|
8
|
+
removeKeyPair(): Promise<void>;
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=browser-key-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-key-storage.d.ts","sourceRoot":"","sources":["../../../src/crypto/browser-key-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-key-storage.d.ts","sourceRoot":"","sources":["../../../src/crypto/browser-key-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAMpE,qBAAa,iBAAkB,YAAW,qBAAqB;;gBAGjD,EAAE,EAAE,WAAW;WAId,MAAM,CACjB,MAAM,GAAE,MAAwB,GAC/B,OAAO,CAAC,iBAAiB,CAAC;IA4CvB,WAAW,CAAC,OAAO,EAAE,UAAU;IAS/B,WAAW,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAa9C,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CASrC"}
|
|
@@ -1,72 +1,75 @@
|
|
|
1
|
+
const DEFAULT_DB_NAME = "renownKeyDB";
|
|
2
|
+
const STORE_NAME = "keyPairs";
|
|
3
|
+
const KEY = "keyPair";
|
|
1
4
|
export class BrowserKeyStorage {
|
|
2
|
-
static #DB_NAME = "browserKeyDB";
|
|
3
|
-
static #STORE_NAME = "keyPairs";
|
|
4
|
-
static #KEY = "keyPair";
|
|
5
5
|
#db;
|
|
6
|
-
constructor() {
|
|
7
|
-
this.#db =
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.#db = db;
|
|
8
8
|
}
|
|
9
|
-
|
|
9
|
+
static async create(dbName = DEFAULT_DB_NAME) {
|
|
10
|
+
const db = await BrowserKeyStorage.#openDatabase(dbName);
|
|
11
|
+
return new BrowserKeyStorage(db);
|
|
12
|
+
}
|
|
13
|
+
static #openDatabase(dbName) {
|
|
10
14
|
return new Promise((resolve, reject) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
const req = indexedDB.open(dbName);
|
|
16
|
+
req.onupgradeneeded = (event) => {
|
|
17
|
+
const db = event.target.result;
|
|
18
|
+
if (!db.objectStoreNames.contains(STORE_NAME)) {
|
|
19
|
+
db.createObjectStore(STORE_NAME);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
req.onsuccess = () => {
|
|
23
|
+
const db = req.result;
|
|
24
|
+
if (!db.objectStoreNames.contains(STORE_NAME)) {
|
|
25
|
+
const currentVersion = db.version;
|
|
26
|
+
db.close();
|
|
27
|
+
const upgradeReq = indexedDB.open(dbName, currentVersion + 1);
|
|
28
|
+
upgradeReq.onupgradeneeded = (event) => {
|
|
29
|
+
const upgradeDb = event.target.result;
|
|
30
|
+
if (!upgradeDb.objectStoreNames.contains(STORE_NAME)) {
|
|
31
|
+
upgradeDb.createObjectStore(STORE_NAME);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
upgradeReq.onsuccess = () => resolve(upgradeReq.result);
|
|
35
|
+
upgradeReq.onerror = () => reject(upgradeReq.error);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
resolve(db);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
15
41
|
req.onerror = () => reject(req.error);
|
|
16
42
|
});
|
|
17
43
|
}
|
|
18
|
-
#
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
#handleDatabaseSuccess = (db, resolve, reject) => {
|
|
23
|
-
if (!db.objectStoreNames.contains(BrowserKeyStorage.#STORE_NAME)) {
|
|
24
|
-
// Close and reopen with a higher version to create the missing object store
|
|
25
|
-
const currentVersion = db.version;
|
|
26
|
-
db.close();
|
|
27
|
-
const upgradeReq = indexedDB.open(BrowserKeyStorage.#DB_NAME, currentVersion + 1);
|
|
28
|
-
upgradeReq.onupgradeneeded = this.#handleDatabaseUpgrade;
|
|
29
|
-
upgradeReq.onsuccess = () => resolve(upgradeReq.result);
|
|
30
|
-
upgradeReq.onerror = () => reject(upgradeReq.error);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
resolve(db);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
#ensureObjectStoreExists(db) {
|
|
37
|
-
if (!db.objectStoreNames.contains(BrowserKeyStorage.#STORE_NAME)) {
|
|
38
|
-
db.createObjectStore(BrowserKeyStorage.#STORE_NAME);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
async #useStore(mode = "readwrite") {
|
|
42
|
-
const database = await this.#db;
|
|
43
|
-
const transaction = database.transaction(BrowserKeyStorage.#STORE_NAME, mode);
|
|
44
|
-
const store = transaction.objectStore(BrowserKeyStorage.#STORE_NAME);
|
|
45
|
-
return store;
|
|
44
|
+
#useStore(mode = "readwrite") {
|
|
45
|
+
const transaction = this.#db.transaction(STORE_NAME, mode);
|
|
46
|
+
return transaction.objectStore(STORE_NAME);
|
|
46
47
|
}
|
|
47
48
|
async saveKeyPair(keyPair) {
|
|
48
|
-
const store =
|
|
49
|
-
const request = store.put(keyPair,
|
|
49
|
+
const store = this.#useStore();
|
|
50
|
+
const request = store.put(keyPair, KEY);
|
|
50
51
|
return new Promise((resolve, reject) => {
|
|
51
|
-
request.onsuccess = () =>
|
|
52
|
-
|
|
53
|
-
};
|
|
54
|
-
request.onerror = () => {
|
|
55
|
-
reject(new Error("Failed to save key pair"));
|
|
56
|
-
};
|
|
52
|
+
request.onsuccess = () => resolve();
|
|
53
|
+
request.onerror = () => reject(new Error("Failed to save key pair"));
|
|
57
54
|
});
|
|
58
55
|
}
|
|
59
56
|
async loadKeyPair() {
|
|
60
|
-
const store =
|
|
61
|
-
const request = store.get(
|
|
57
|
+
const store = this.#useStore("readonly");
|
|
58
|
+
const request = store.get(KEY);
|
|
62
59
|
return new Promise((resolve, reject) => {
|
|
63
60
|
request.onsuccess = () => {
|
|
64
61
|
const keyPair = request.result;
|
|
65
62
|
resolve(keyPair);
|
|
66
63
|
};
|
|
67
|
-
request.onerror = () =>
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
request.onerror = () => reject(new Error("Failed to load key pair"));
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async removeKeyPair() {
|
|
68
|
+
const store = this.#useStore();
|
|
69
|
+
const request = store.delete(KEY);
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
request.onsuccess = () => resolve();
|
|
72
|
+
request.onerror = () => reject(new Error("Failed to remove key pair"));
|
|
70
73
|
});
|
|
71
74
|
}
|
|
72
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-key-storage.js","sourceRoot":"","sources":["../../../src/crypto/browser-key-storage.ts"],"names":[],"mappings":"AAEA,MAAM,
|
|
1
|
+
{"version":3,"file":"browser-key-storage.js","sourceRoot":"","sources":["../../../src/crypto/browser-key-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export type { DID, IConnectCrypto, IRenownCrypto, JsonWebKeyPairStorage, JwkKeyPair, } from "./types.js";
|
|
2
|
+
export { RenownCryptoBuilder } from "./renown-crypto-builder.js";
|
|
3
|
+
export { ConnectCrypto, RenownCrypto } from "./renown-crypto.js";
|
|
3
4
|
export { BrowserKeyStorage } from "./browser-key-storage.js";
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
privateKey: JsonWebKey;
|
|
7
|
-
};
|
|
8
|
-
export interface JsonWebKeyPairStorage {
|
|
9
|
-
loadKeyPair(): Promise<JwkKeyPair | undefined>;
|
|
10
|
-
saveKeyPair(keyPair: JwkKeyPair): Promise<void>;
|
|
11
|
-
}
|
|
12
|
-
export interface IConnectCrypto {
|
|
13
|
-
did: () => Promise<DID>;
|
|
14
|
-
regenerateDid(): Promise<void>;
|
|
15
|
-
sign: (data: Uint8Array) => Promise<Uint8Array>;
|
|
16
|
-
getIssuer: () => Promise<Issuer>;
|
|
17
|
-
getBearerToken: (driveUrl: string, address: string | undefined, refresh?: boolean, options?: CreateBearerTokenOptions) => Promise<string>;
|
|
18
|
-
}
|
|
19
|
-
export type DID = `did:${string}`;
|
|
20
|
-
export declare class ConnectCrypto implements IConnectCrypto {
|
|
21
|
-
#private;
|
|
22
|
-
static algorithm: EcKeyAlgorithm;
|
|
23
|
-
static signAlgorithm: {
|
|
24
|
-
name: string;
|
|
25
|
-
namedCurve: string;
|
|
26
|
-
hash: string;
|
|
27
|
-
};
|
|
28
|
-
constructor(keyPairStorage: JsonWebKeyPairStorage, crypto?: SubtleCrypto);
|
|
29
|
-
getBearerToken(driveUrl: string, address: string | undefined, refresh?: boolean, options?: CreateBearerTokenOptions): Promise<string>;
|
|
30
|
-
did(): Promise<`did:${string}`>;
|
|
31
|
-
regenerateDid(): Promise<void>;
|
|
32
|
-
sign(data: Uint8Array | string): Promise<Uint8Array>;
|
|
33
|
-
getIssuer(): Promise<Issuer>;
|
|
34
|
-
}
|
|
35
|
-
export { ConnectCryptoSigner, createSignatureVerifier } from "./signer.js";
|
|
5
|
+
export { MemoryKeyStorage } from "./memory-key-storage.js";
|
|
6
|
+
export { createSignatureVerifier, RenownCryptoSigner } from "./signer.js";
|
|
36
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,GAAG,EACH,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/src/crypto/index.js
CHANGED
|
@@ -1,130 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { createAuthBearerToken, } from "../utils.js";
|
|
6
|
-
// Export the proper BrowserKeyStorage implementation
|
|
1
|
+
// Classes
|
|
2
|
+
export { RenownCryptoBuilder } from "./renown-crypto-builder.js";
|
|
3
|
+
export { ConnectCrypto, RenownCrypto } from "./renown-crypto.js";
|
|
4
|
+
// Storage implementations
|
|
7
5
|
export { BrowserKeyStorage } from "./browser-key-storage.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return Array.prototype.map
|
|
12
|
-
.call(new Uint8Array(ab), (x) => ("00" + x.toString(16)).slice(-2))
|
|
13
|
-
.join("");
|
|
14
|
-
}
|
|
15
|
-
export class ConnectCrypto {
|
|
16
|
-
#subtleCrypto;
|
|
17
|
-
#keyPair;
|
|
18
|
-
#keyPairStorage;
|
|
19
|
-
#did;
|
|
20
|
-
#bearerToken;
|
|
21
|
-
static algorithm = {
|
|
22
|
-
name: "ECDSA",
|
|
23
|
-
namedCurve: "P-256",
|
|
24
|
-
};
|
|
25
|
-
static signAlgorithm = {
|
|
26
|
-
name: "ECDSA",
|
|
27
|
-
namedCurve: "P-256",
|
|
28
|
-
hash: "SHA-256",
|
|
29
|
-
};
|
|
30
|
-
constructor(keyPairStorage, crypto = globalThis.crypto.subtle) {
|
|
31
|
-
this.#keyPairStorage = keyPairStorage;
|
|
32
|
-
this.#subtleCrypto = crypto;
|
|
33
|
-
this.#did = this.#initialize();
|
|
34
|
-
}
|
|
35
|
-
// loads the key pair from storage or generates a new one if none is stored
|
|
36
|
-
async #initialize() {
|
|
37
|
-
const loadedKeyPair = await this.#keyPairStorage.loadKeyPair();
|
|
38
|
-
if (loadedKeyPair) {
|
|
39
|
-
this.#keyPair = await this.#importKeyPair(loadedKeyPair);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
this.#keyPair = await this.#generateECDSAKeyPair();
|
|
43
|
-
await this.#keyPairStorage.saveKeyPair(await this.#exportKeyPair());
|
|
44
|
-
}
|
|
45
|
-
const did = await this.#parseDid();
|
|
46
|
-
return did;
|
|
47
|
-
}
|
|
48
|
-
async getBearerToken(driveUrl, address, refresh = false, options) {
|
|
49
|
-
const issuer = await this.getIssuer();
|
|
50
|
-
if (refresh || !this.#bearerToken) {
|
|
51
|
-
this.#bearerToken = await createAuthBearerToken(Number(RENOWN_CHAIN_ID), RENOWN_NETWORK_ID, address || (await this.#did), issuer, options);
|
|
52
|
-
}
|
|
53
|
-
if (!this.#bearerToken) {
|
|
54
|
-
throw new Error("Could not create bearer token");
|
|
55
|
-
}
|
|
56
|
-
return this.#bearerToken;
|
|
57
|
-
}
|
|
58
|
-
did() {
|
|
59
|
-
return this.#did;
|
|
60
|
-
}
|
|
61
|
-
async regenerateDid() {
|
|
62
|
-
this.#keyPair = await this.#generateECDSAKeyPair();
|
|
63
|
-
await this.#keyPairStorage.saveKeyPair(await this.#exportKeyPair());
|
|
64
|
-
}
|
|
65
|
-
async #parseDid() {
|
|
66
|
-
if (!this.#keyPair) {
|
|
67
|
-
throw new Error("No key pair available");
|
|
68
|
-
}
|
|
69
|
-
const publicKeyRaw = await this.#subtleCrypto.exportKey("raw", this.#keyPair.publicKey);
|
|
70
|
-
const multicodecName = "p256-pub";
|
|
71
|
-
const rawKey = rawKeyInHexfromUncompressed(ab2hex(publicKeyRaw));
|
|
72
|
-
const compressedKey = compressedKeyInHexfromRaw(rawKey);
|
|
73
|
-
const did = encodeDIDfromHexString(multicodecName, compressedKey);
|
|
74
|
-
return did;
|
|
75
|
-
}
|
|
76
|
-
async #generateECDSAKeyPair() {
|
|
77
|
-
const keyPair = await this.#subtleCrypto.generateKey(ConnectCrypto.algorithm, true, ["sign", "verify"]);
|
|
78
|
-
return keyPair;
|
|
79
|
-
}
|
|
80
|
-
async #exportKeyPair() {
|
|
81
|
-
if (!this.#keyPair) {
|
|
82
|
-
throw new Error("No key pair available");
|
|
83
|
-
}
|
|
84
|
-
const jwkKeyPair = {
|
|
85
|
-
publicKey: await this.#subtleCrypto.exportKey("jwk", this.#keyPair.publicKey),
|
|
86
|
-
privateKey: await this.#subtleCrypto.exportKey("jwk", this.#keyPair.privateKey),
|
|
87
|
-
};
|
|
88
|
-
return jwkKeyPair;
|
|
89
|
-
}
|
|
90
|
-
async #importKeyPair(jwkKeyPair) {
|
|
91
|
-
return {
|
|
92
|
-
publicKey: await this.#subtleCrypto.importKey("jwk", jwkKeyPair.publicKey, ConnectCrypto.algorithm, true, ["verify"]),
|
|
93
|
-
privateKey: await this.#subtleCrypto.importKey("jwk", jwkKeyPair.privateKey, ConnectCrypto.algorithm, true, ["sign"]),
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
#sign = async (...args) => {
|
|
97
|
-
return await this.#subtleCrypto.sign(...args);
|
|
98
|
-
};
|
|
99
|
-
#verify = async (...args) => {
|
|
100
|
-
return await this.#subtleCrypto.verify(...args);
|
|
101
|
-
};
|
|
102
|
-
#stringToBytes(s) {
|
|
103
|
-
return fromString(s, "utf-8");
|
|
104
|
-
}
|
|
105
|
-
async sign(data) {
|
|
106
|
-
if (this.#keyPair?.privateKey) {
|
|
107
|
-
const dataBytes = typeof data === "string" ? this.#stringToBytes(data) : data;
|
|
108
|
-
const arrayBuffer = await this.#subtleCrypto.sign(ConnectCrypto.signAlgorithm, this.#keyPair.privateKey, dataBytes.buffer);
|
|
109
|
-
return new Uint8Array(arrayBuffer);
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
throw new Error("No private key available");
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
async getIssuer() {
|
|
116
|
-
if (!this.#keyPair?.privateKey) {
|
|
117
|
-
throw new Error("No private key available");
|
|
118
|
-
}
|
|
119
|
-
return {
|
|
120
|
-
did: await this.#did,
|
|
121
|
-
signer: async (data) => {
|
|
122
|
-
const signature = await this.sign(typeof data === "string" ? new TextEncoder().encode(data) : data);
|
|
123
|
-
return bytesToBase64url(signature);
|
|
124
|
-
},
|
|
125
|
-
alg: "ES256",
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
export { ConnectCryptoSigner, createSignatureVerifier } from "./signer.js";
|
|
6
|
+
export { MemoryKeyStorage } from "./memory-key-storage.js";
|
|
7
|
+
// Signer utilities
|
|
8
|
+
export { createSignatureVerifier, RenownCryptoSigner } from "./signer.js";
|
|
130
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AASA,UAAU;AACV,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,0BAA0B;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,mBAAmB;AACnB,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { JsonWebKeyPairStorage, JwkKeyPair } from "./types.js";
|
|
2
|
+
export declare class MemoryKeyStorage implements JsonWebKeyPairStorage {
|
|
3
|
+
private keyPair;
|
|
4
|
+
constructor(keyPair?: JwkKeyPair);
|
|
5
|
+
loadKeyPair(): Promise<JwkKeyPair | undefined>;
|
|
6
|
+
saveKeyPair(keyPair: JwkKeyPair): Promise<void>;
|
|
7
|
+
removeKeyPair(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=memory-key-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-key-storage.d.ts","sourceRoot":"","sources":["../../../src/crypto/memory-key-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpE,qBAAa,gBAAiB,YAAW,qBAAqB;IAC5D,OAAO,CAAC,OAAO,CAAyB;gBAE5B,OAAO,CAAC,EAAE,UAAU;IAIhC,WAAW;IAIX,WAAW,CAAC,OAAO,EAAE,UAAU;IAK/B,aAAa;CAId"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class MemoryKeyStorage {
|
|
2
|
+
keyPair;
|
|
3
|
+
constructor(keyPair) {
|
|
4
|
+
this.keyPair = keyPair;
|
|
5
|
+
}
|
|
6
|
+
loadKeyPair() {
|
|
7
|
+
return Promise.resolve(this.keyPair);
|
|
8
|
+
}
|
|
9
|
+
saveKeyPair(keyPair) {
|
|
10
|
+
this.keyPair = keyPair;
|
|
11
|
+
return Promise.resolve();
|
|
12
|
+
}
|
|
13
|
+
removeKeyPair() {
|
|
14
|
+
this.keyPair = undefined;
|
|
15
|
+
return Promise.resolve();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=memory-key-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-key-storage.js","sourceRoot":"","sources":["../../../src/crypto/memory-key-storage.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IACnB,OAAO,CAAyB;IAExC,YAAY,OAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,WAAW;QACT,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,WAAW,CAAC,OAAmB;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,aAAa;QACX,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -1,8 +1,21 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ILogger } from "../utils.js";
|
|
2
|
+
import type { JsonWebKeyPairStorage, JwkKeyPair } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Key storage that supports:
|
|
5
|
+
* 1. PH_RENOWN_PRIVATE_KEY environment variable (JSON-encoded JwkKeyPair)
|
|
6
|
+
* 2. Custom file path passed via options
|
|
7
|
+
* 3. Falls back to file storage at .ph/.keypair.json in current working directory
|
|
8
|
+
*/
|
|
2
9
|
export declare class NodeKeyStorage implements JsonWebKeyPairStorage {
|
|
3
10
|
#private;
|
|
4
|
-
|
|
5
|
-
|
|
11
|
+
static readonly DEFAULT_KEYPAIR_PATH: string;
|
|
12
|
+
static readonly ENV_KEY_NAME = "PH_RENOWN_PRIVATE_KEY";
|
|
13
|
+
constructor(filePath?: string, options?: {
|
|
14
|
+
envKeyName?: string;
|
|
15
|
+
logger?: ILogger;
|
|
16
|
+
});
|
|
6
17
|
loadKeyPair(): Promise<JwkKeyPair | undefined>;
|
|
18
|
+
saveKeyPair(keyPair: JwkKeyPair): Promise<void>;
|
|
19
|
+
removeKeyPair(): Promise<void>;
|
|
7
20
|
}
|
|
8
21
|
//# sourceMappingURL=node-key-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-key-storage.d.ts","sourceRoot":"","sources":["../../../src/crypto/node-key-storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node-key-storage.d.ts","sourceRoot":"","sources":["../../../src/crypto/node-key-storage.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKpE;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,qBAAqB;;IAK1D,MAAM,CAAC,QAAQ,CAAC,oBAAoB,SAAwB;IAC5D,MAAM,CAAC,QAAQ,CAAC,YAAY,2BAAgB;gBAG1C,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO;IAazD,WAAW,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAyBxC,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAuD/B"}
|