@renown/sdk 6.0.0-dev.153 → 6.0.0-dev.155
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/index.d.ts +67 -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 +67 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +151 -0
- package/dist/node.js.map +1 -0
- package/dist/renown-builder-C5Y9S3o2.js +825 -0
- package/dist/renown-builder-C5Y9S3o2.js.map +1 -0
- package/dist/utils-CFyCudfg.d.ts +549 -0
- package/dist/utils-CFyCudfg.d.ts.map +1 -0
- package/package.json +13 -11
- 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
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { Renown } from "./common.js";
|
|
2
|
-
import { BrowserEventEmitter } from "./event/event.browser.js";
|
|
3
|
-
import { BaseRenownBuilder } from "./renown-builder.js";
|
|
4
|
-
import { BrowserStorage } from "./storage/storage.browser.js";
|
|
5
|
-
import type { RenownEvents, RenownStorageMap } from "./types.js";
|
|
6
|
-
export declare class BrowserRenownStorage extends BrowserStorage<RenownStorageMap> {
|
|
7
|
-
}
|
|
8
|
-
export declare class BrowserRenownEventEmitter extends BrowserEventEmitter<RenownEvents> {
|
|
9
|
-
}
|
|
10
|
-
export interface BrowserRenownBuilderOptions {
|
|
11
|
-
/** Base path for storage keys (e.g., "/app" for multi-tenant apps) */
|
|
12
|
-
basename?: string;
|
|
13
|
-
/** Renown server URL. Defaults to https://www.renown.id */
|
|
14
|
-
baseUrl?: string;
|
|
15
|
-
/** IndexedDB database name for key storage. Defaults to "renownKeyDB" */
|
|
16
|
-
keyDbName?: string;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Browser-specific Renown builder with pre-configured defaults.
|
|
20
|
-
* Uses localStorage for user data and IndexedDB for key storage.
|
|
21
|
-
*/
|
|
22
|
-
export declare class RenownBuilder extends BaseRenownBuilder {
|
|
23
|
-
#private;
|
|
24
|
-
/**
|
|
25
|
-
* @param appName - Application name used for signing context
|
|
26
|
-
* @param options - Browser-specific configuration options
|
|
27
|
-
*/
|
|
28
|
-
constructor(appName: string, options?: BrowserRenownBuilderOptions);
|
|
29
|
-
/**
|
|
30
|
-
* Set base path for storage keys (e.g., "/app" for multi-tenant apps).
|
|
31
|
-
*/
|
|
32
|
-
withBasename(basename: string): this;
|
|
33
|
-
/**
|
|
34
|
-
* Set IndexedDB database name for key storage.
|
|
35
|
-
* Defaults to "renownKeyDB".
|
|
36
|
-
*/
|
|
37
|
-
withKeyDbName(keyDbName: string): this;
|
|
38
|
-
/**
|
|
39
|
-
* Build and initialize the Renown instance.
|
|
40
|
-
* Initializes IndexedDB for key storage before building.
|
|
41
|
-
*/
|
|
42
|
-
build(): Promise<Renown>;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* @deprecated Use RenownBuilder directly instead.
|
|
46
|
-
* Initialize a browser-specific Renown instance.
|
|
47
|
-
* @param appName - Application name used for signing context
|
|
48
|
-
* @param options - Browser-specific configuration options
|
|
49
|
-
* @returns Initialized Renown instance
|
|
50
|
-
*/
|
|
51
|
-
export declare function initRenown(appName: string, options?: BrowserRenownBuilderOptions): Promise<Renown>;
|
|
52
|
-
//# sourceMappingURL=init.browser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.browser.d.ts","sourceRoot":"","sources":["../../src/init.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEjE,qBAAa,oBAAqB,SAAQ,cAAc,CAAC,gBAAgB,CAAC;CAAG;AAC7E,qBAAa,yBAA0B,SAAQ,mBAAmB,CAAC,YAAY,CAAC;CAAG;AAEnF,MAAM,WAAW,2BAA2B;IAC1C,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,iBAAiB;;IAIlD;;;OAGG;gBACS,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,2BAAgC;IAWtE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMpC;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKtC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAK/B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,2BAAgC,mBAG1C"}
|
package/dist/src/init.browser.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { BrowserKeyStorage } from "./crypto/browser-key-storage.js";
|
|
2
|
-
import { BrowserEventEmitter } from "./event/event.browser.js";
|
|
3
|
-
import { BaseRenownBuilder } from "./renown-builder.js";
|
|
4
|
-
import { BrowserStorage } from "./storage/storage.browser.js";
|
|
5
|
-
export class BrowserRenownStorage extends BrowserStorage {
|
|
6
|
-
}
|
|
7
|
-
export class BrowserRenownEventEmitter extends BrowserEventEmitter {
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Browser-specific Renown builder with pre-configured defaults.
|
|
11
|
-
* Uses localStorage for user data and IndexedDB for key storage.
|
|
12
|
-
*/
|
|
13
|
-
export class RenownBuilder extends BaseRenownBuilder {
|
|
14
|
-
#basename;
|
|
15
|
-
#keyDbName;
|
|
16
|
-
/**
|
|
17
|
-
* @param appName - Application name used for signing context
|
|
18
|
-
* @param options - Browser-specific configuration options
|
|
19
|
-
*/
|
|
20
|
-
constructor(appName, options = {}) {
|
|
21
|
-
super(appName);
|
|
22
|
-
this.#basename = options.basename;
|
|
23
|
-
this.#keyDbName = options.keyDbName;
|
|
24
|
-
this.withStorage(new BrowserRenownStorage("renown", this.#basename));
|
|
25
|
-
this.withEventEmitter(new BrowserRenownEventEmitter());
|
|
26
|
-
if (options.baseUrl) {
|
|
27
|
-
this.withBaseUrl(options.baseUrl);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Set base path for storage keys (e.g., "/app" for multi-tenant apps).
|
|
32
|
-
*/
|
|
33
|
-
withBasename(basename) {
|
|
34
|
-
this.#basename = basename;
|
|
35
|
-
this.withStorage(new BrowserRenownStorage("renown", this.#basename));
|
|
36
|
-
return this;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Set IndexedDB database name for key storage.
|
|
40
|
-
* Defaults to "renownKeyDB".
|
|
41
|
-
*/
|
|
42
|
-
withKeyDbName(keyDbName) {
|
|
43
|
-
this.#keyDbName = keyDbName;
|
|
44
|
-
return this;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Build and initialize the Renown instance.
|
|
48
|
-
* Initializes IndexedDB for key storage before building.
|
|
49
|
-
*/
|
|
50
|
-
async build() {
|
|
51
|
-
const keyStorage = await BrowserKeyStorage.create(this.#keyDbName);
|
|
52
|
-
this.withKeyPairStorage(keyStorage);
|
|
53
|
-
return super.build();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* @deprecated Use RenownBuilder directly instead.
|
|
58
|
-
* Initialize a browser-specific Renown instance.
|
|
59
|
-
* @param appName - Application name used for signing context
|
|
60
|
-
* @param options - Browser-specific configuration options
|
|
61
|
-
* @returns Initialized Renown instance
|
|
62
|
-
*/
|
|
63
|
-
export function initRenown(appName, options = {}) {
|
|
64
|
-
return new RenownBuilder(appName, options).build();
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=init.browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.browser.js","sourceRoot":"","sources":["../../src/init.browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D,MAAM,OAAO,oBAAqB,SAAQ,cAAgC;CAAG;AAC7E,MAAM,OAAO,yBAA0B,SAAQ,mBAAiC;CAAG;AAWnF;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,iBAAiB;IAClD,SAAS,CAAU;IACnB,UAAU,CAAU;IAEpB;;;OAGG;IACH,YAAY,OAAe,EAAE,UAAuC,EAAE;QACpE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,IAAI,yBAAyB,EAAE,CAAC,CAAC;QACvD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnE,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,UAAuC,EAAE;IAEzC,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;AACrD,CAAC"}
|
package/dist/src/init.node.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { NodeEventEmitter } from "./event/event.node.js";
|
|
2
|
-
import { BaseRenownBuilder } from "./renown-builder.js";
|
|
3
|
-
import { NodeStorage } from "./storage/storage.node.js";
|
|
4
|
-
import type { RenownEvents, RenownStorageMap } from "./types.js";
|
|
5
|
-
export declare class NodeRenownEventEmitter extends NodeEventEmitter<RenownEvents> {
|
|
6
|
-
}
|
|
7
|
-
export declare class NodeRenownStorage extends NodeStorage<RenownStorageMap> {
|
|
8
|
-
}
|
|
9
|
-
export declare const DEFAULT_RENOWN_STORAGE_PATH = "./.ph/.renown.json";
|
|
10
|
-
export interface NodeRenownBuilderOptions {
|
|
11
|
-
/** File path for user storage. Defaults to ".ph/.renown.json" in cwd */
|
|
12
|
-
storagePath?: string;
|
|
13
|
-
/** File path for keypair storage. Defaults to ".ph/.keypair.json" in cwd */
|
|
14
|
-
keyPath?: string;
|
|
15
|
-
/** Renown server URL. Defaults to https://www.renown.id */
|
|
16
|
-
baseUrl?: string;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Node.js-specific Renown builder with pre-configured defaults.
|
|
20
|
-
* Uses file-based storage for both user data and key storage.
|
|
21
|
-
*/
|
|
22
|
-
export declare class RenownBuilder extends BaseRenownBuilder {
|
|
23
|
-
/**
|
|
24
|
-
* @param appName - Application name used for signing context
|
|
25
|
-
* @param options - Node.js-specific configuration options
|
|
26
|
-
*/
|
|
27
|
-
constructor(appName: string, options?: NodeRenownBuilderOptions);
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=init.node.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.node.d.ts","sourceRoot":"","sources":["../../src/init.node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEjE,qBAAa,sBAAuB,SAAQ,gBAAgB,CAAC,YAAY,CAAC;CAAG;AAC7E,qBAAa,iBAAkB,SAAQ,WAAW,CAAC,gBAAgB,CAAC;CAAG;AAEvE,eAAO,MAAM,2BAA2B,uBAAuB,CAAC;AAEhE,MAAM,WAAW,wBAAwB;IACvC,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,iBAAiB;IAClD;;;OAGG;gBACS,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B;CAgBpE"}
|
package/dist/src/init.node.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { NodeKeyStorage } from "./crypto/node-key-storage.js";
|
|
2
|
-
import { NodeEventEmitter } from "./event/event.node.js";
|
|
3
|
-
import { BaseRenownBuilder } from "./renown-builder.js";
|
|
4
|
-
import { NodeStorage } from "./storage/storage.node.js";
|
|
5
|
-
export class NodeRenownEventEmitter extends NodeEventEmitter {
|
|
6
|
-
}
|
|
7
|
-
export class NodeRenownStorage extends NodeStorage {
|
|
8
|
-
}
|
|
9
|
-
export const DEFAULT_RENOWN_STORAGE_PATH = "./.ph/.renown.json";
|
|
10
|
-
/**
|
|
11
|
-
* Node.js-specific Renown builder with pre-configured defaults.
|
|
12
|
-
* Uses file-based storage for both user data and key storage.
|
|
13
|
-
*/
|
|
14
|
-
export class RenownBuilder extends BaseRenownBuilder {
|
|
15
|
-
/**
|
|
16
|
-
* @param appName - Application name used for signing context
|
|
17
|
-
* @param options - Node.js-specific configuration options
|
|
18
|
-
*/
|
|
19
|
-
constructor(appName, options = {}) {
|
|
20
|
-
super(appName);
|
|
21
|
-
const { storagePath = DEFAULT_RENOWN_STORAGE_PATH, keyPath, baseUrl, } = options;
|
|
22
|
-
this.withKeyPairStorage(new NodeKeyStorage(keyPath));
|
|
23
|
-
this.withStorage(new NodeRenownStorage(storagePath));
|
|
24
|
-
this.withEventEmitter(new NodeRenownEventEmitter());
|
|
25
|
-
if (baseUrl) {
|
|
26
|
-
this.withBaseUrl(baseUrl);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=init.node.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.node.js","sourceRoot":"","sources":["../../src/init.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,MAAM,OAAO,sBAAuB,SAAQ,gBAA8B;CAAG;AAC7E,MAAM,OAAO,iBAAkB,SAAQ,WAA6B;CAAG;AAEvE,MAAM,CAAC,MAAM,2BAA2B,GAAG,oBAAoB,CAAC;AAWhE;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,iBAAiB;IAClD;;;OAGG;IACH,YAAY,OAAe,EAAE,UAAoC,EAAE;QACjE,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,MAAM,EACJ,WAAW,GAAG,2BAA2B,EACzC,OAAO,EACP,OAAO,GACR,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,kBAAkB,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,CAAC,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF"}
|
package/dist/src/node.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export * from "./common.js";
|
|
2
|
-
export * from "./crypto/node.js";
|
|
3
|
-
export * from "./event/event.node.js";
|
|
4
|
-
export * from "./init.node.js";
|
|
5
|
-
export * from "./profile.js";
|
|
6
|
-
export * from "./renown-builder.js";
|
|
7
|
-
export * from "./storage/storage.node.js";
|
|
8
|
-
export * from "./types.js";
|
|
9
|
-
export * from "./utils.js";
|
|
10
|
-
//# sourceMappingURL=node.d.ts.map
|
package/dist/src/node.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
package/dist/src/node.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export * from "./common.js";
|
|
2
|
-
export * from "./crypto/node.js";
|
|
3
|
-
export * from "./event/event.node.js";
|
|
4
|
-
export * from "./init.node.js";
|
|
5
|
-
export * from "./profile.js";
|
|
6
|
-
export * from "./renown-builder.js";
|
|
7
|
-
export * from "./storage/storage.node.js";
|
|
8
|
-
export * from "./types.js";
|
|
9
|
-
export * from "./utils.js";
|
|
10
|
-
//# sourceMappingURL=node.js.map
|
package/dist/src/node.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
package/dist/src/profile.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAEhE,eAAO,MAAM,kBAAkB,EAAE,cAwBhC,CAAC"}
|
package/dist/src/profile.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export const fetchRenownProfile = async (user, baseUrl) => {
|
|
2
|
-
try {
|
|
3
|
-
const response = await fetch(`${baseUrl}/api/profile`, {
|
|
4
|
-
method: "POST",
|
|
5
|
-
headers: {
|
|
6
|
-
"Content-Type": "application/json",
|
|
7
|
-
},
|
|
8
|
-
body: JSON.stringify({
|
|
9
|
-
ethAddress: user.address,
|
|
10
|
-
}),
|
|
11
|
-
});
|
|
12
|
-
if (!response.ok) {
|
|
13
|
-
return undefined;
|
|
14
|
-
}
|
|
15
|
-
const result = (await response.json());
|
|
16
|
-
return result.profile ?? undefined;
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=profile.js.map
|
package/dist/src/profile.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/profile.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAmB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IACxE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,cAAc,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU,EAAE,IAAI,CAAC,OAAO;aACzB,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAEpC,CAAC;QAEF,OAAO,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { Renown } from "./common.js";
|
|
2
|
-
import type { IRenownCrypto, JsonWebKeyPairStorage } from "./crypto/types.js";
|
|
3
|
-
import type { ProfileFetcher, RenownEventEmitter, RenownStorage } from "./types.js";
|
|
4
|
-
export interface RenownBuilderOptions {
|
|
5
|
-
appName: string;
|
|
6
|
-
storage?: RenownStorage;
|
|
7
|
-
eventEmitter?: RenownEventEmitter;
|
|
8
|
-
crypto?: IRenownCrypto;
|
|
9
|
-
keyPairStorage?: JsonWebKeyPairStorage;
|
|
10
|
-
baseUrl?: string;
|
|
11
|
-
profileFetcher?: ProfileFetcher;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Base builder for creating Renown instances.
|
|
15
|
-
* Use platform-specific builders (RenownBuilder from init.browser.js or init.node.js)
|
|
16
|
-
* for pre-configured defaults.
|
|
17
|
-
*/
|
|
18
|
-
export declare class BaseRenownBuilder {
|
|
19
|
-
#private;
|
|
20
|
-
/**
|
|
21
|
-
* @param appName - Application name used for signing context
|
|
22
|
-
*/
|
|
23
|
-
constructor(appName: string);
|
|
24
|
-
/**
|
|
25
|
-
* Set custom storage for user data persistence.
|
|
26
|
-
* Defaults to in-memory storage if not set.
|
|
27
|
-
*/
|
|
28
|
-
withStorage(storage: RenownStorage): this;
|
|
29
|
-
/**
|
|
30
|
-
* Set custom event emitter for user state changes.
|
|
31
|
-
* Defaults to in-memory event emitter if not set.
|
|
32
|
-
*/
|
|
33
|
-
withEventEmitter(eventEmitter: RenownEventEmitter): this;
|
|
34
|
-
/**
|
|
35
|
-
* Set a pre-built crypto instance.
|
|
36
|
-
* Either crypto or keyPairStorage must be provided.
|
|
37
|
-
*/
|
|
38
|
-
withCrypto(crypto: IRenownCrypto): this;
|
|
39
|
-
/**
|
|
40
|
-
* Set key pair storage for cryptographic keys.
|
|
41
|
-
* A crypto instance will be built from this storage.
|
|
42
|
-
* Either crypto or keyPairStorage must be provided.
|
|
43
|
-
*/
|
|
44
|
-
withKeyPairStorage(keyPairStorage: JsonWebKeyPairStorage): this;
|
|
45
|
-
/**
|
|
46
|
-
* Set the Renown server URL for credential verification.
|
|
47
|
-
* Defaults to https://www.renown.id
|
|
48
|
-
*/
|
|
49
|
-
withBaseUrl(baseUrl: string): this;
|
|
50
|
-
/**
|
|
51
|
-
* Set a profile fetcher strategy for enriching user data after login.
|
|
52
|
-
* The fetcher receives the authenticated user and the base URL,
|
|
53
|
-
* and returns a RenownProfile. Called in the background after each login.
|
|
54
|
-
* Defaults to fetchRenownProfile which calls the Renown API.
|
|
55
|
-
*/
|
|
56
|
-
withProfileFetcher(profileFetcher: ProfileFetcher): this;
|
|
57
|
-
/**
|
|
58
|
-
* Build and initialize the Renown instance.
|
|
59
|
-
* If a user is stored, attempts to re-authenticate them.
|
|
60
|
-
* @throws Error if neither crypto nor keyPairStorage is provided
|
|
61
|
-
*/
|
|
62
|
-
build(): Promise<Renown>;
|
|
63
|
-
/**
|
|
64
|
-
* Create a BaseRenownBuilder from options object for a more concise API
|
|
65
|
-
*/
|
|
66
|
-
static from(options: RenownBuilderOptions): BaseRenownBuilder;
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=renown-builder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renown-builder.d.ts","sourceRoot":"","sources":["../../src/renown-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAuB,MAAM,aAAa,CAAC;AAG1D,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG9E,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;;IAS5B;;OAEG;gBACS,OAAO,EAAE,MAAM;IAI3B;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKzC;;;OAGG;IACH,gBAAgB,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAKxD;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAKvC;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,qBAAqB,GAAG,IAAI;IAK/D;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlC;;;;;OAKG;IACH,kBAAkB,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;IAKxD;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAsC9B;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,GAAG,iBAAiB;CAwB9D"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { Renown, RenownMemoryStorage } from "./common.js";
|
|
2
|
-
import { DEFAULT_RENOWN_URL } from "./constants.js";
|
|
3
|
-
import { RenownCryptoBuilder } from "./crypto/renown-crypto-builder.js";
|
|
4
|
-
import { MemoryEventEmitter } from "./event/memory.js";
|
|
5
|
-
import { fetchRenownProfile } from "./profile.js";
|
|
6
|
-
/**
|
|
7
|
-
* Base builder for creating Renown instances.
|
|
8
|
-
* Use platform-specific builders (RenownBuilder from init.browser.js or init.node.js)
|
|
9
|
-
* for pre-configured defaults.
|
|
10
|
-
*/
|
|
11
|
-
export class BaseRenownBuilder {
|
|
12
|
-
#appName;
|
|
13
|
-
#storage;
|
|
14
|
-
#eventEmitter;
|
|
15
|
-
#crypto;
|
|
16
|
-
#keyPairStorage;
|
|
17
|
-
#baseUrl;
|
|
18
|
-
#profileFetcher;
|
|
19
|
-
/**
|
|
20
|
-
* @param appName - Application name used for signing context
|
|
21
|
-
*/
|
|
22
|
-
constructor(appName) {
|
|
23
|
-
this.#appName = appName;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Set custom storage for user data persistence.
|
|
27
|
-
* Defaults to in-memory storage if not set.
|
|
28
|
-
*/
|
|
29
|
-
withStorage(storage) {
|
|
30
|
-
this.#storage = storage;
|
|
31
|
-
return this;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Set custom event emitter for user state changes.
|
|
35
|
-
* Defaults to in-memory event emitter if not set.
|
|
36
|
-
*/
|
|
37
|
-
withEventEmitter(eventEmitter) {
|
|
38
|
-
this.#eventEmitter = eventEmitter;
|
|
39
|
-
return this;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Set a pre-built crypto instance.
|
|
43
|
-
* Either crypto or keyPairStorage must be provided.
|
|
44
|
-
*/
|
|
45
|
-
withCrypto(crypto) {
|
|
46
|
-
this.#crypto = crypto;
|
|
47
|
-
return this;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Set key pair storage for cryptographic keys.
|
|
51
|
-
* A crypto instance will be built from this storage.
|
|
52
|
-
* Either crypto or keyPairStorage must be provided.
|
|
53
|
-
*/
|
|
54
|
-
withKeyPairStorage(keyPairStorage) {
|
|
55
|
-
this.#keyPairStorage = keyPairStorage;
|
|
56
|
-
return this;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Set the Renown server URL for credential verification.
|
|
60
|
-
* Defaults to https://www.renown.id
|
|
61
|
-
*/
|
|
62
|
-
withBaseUrl(baseUrl) {
|
|
63
|
-
this.#baseUrl = baseUrl;
|
|
64
|
-
return this;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Set a profile fetcher strategy for enriching user data after login.
|
|
68
|
-
* The fetcher receives the authenticated user and the base URL,
|
|
69
|
-
* and returns a RenownProfile. Called in the background after each login.
|
|
70
|
-
* Defaults to fetchRenownProfile which calls the Renown API.
|
|
71
|
-
*/
|
|
72
|
-
withProfileFetcher(profileFetcher) {
|
|
73
|
-
this.#profileFetcher = profileFetcher;
|
|
74
|
-
return this;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Build and initialize the Renown instance.
|
|
78
|
-
* If a user is stored, attempts to re-authenticate them.
|
|
79
|
-
* @throws Error if neither crypto nor keyPairStorage is provided
|
|
80
|
-
*/
|
|
81
|
-
async build() {
|
|
82
|
-
if (!this.#crypto && !this.#keyPairStorage) {
|
|
83
|
-
throw new Error("Either crypto or keyPairStorage is required. Use withCrypto() or withKeyPairStorage() to set one.");
|
|
84
|
-
}
|
|
85
|
-
const crypto = this.#crypto ??
|
|
86
|
-
(await new RenownCryptoBuilder()
|
|
87
|
-
.withKeyPairStorage(this.#keyPairStorage)
|
|
88
|
-
.build());
|
|
89
|
-
const storage = this.#storage ?? new RenownMemoryStorage();
|
|
90
|
-
const eventEmitter = this.#eventEmitter ?? new MemoryEventEmitter();
|
|
91
|
-
const baseUrl = this.#baseUrl ?? DEFAULT_RENOWN_URL;
|
|
92
|
-
const renown = new Renown(storage, eventEmitter, crypto, this.#appName, baseUrl, this.#profileFetcher ?? fetchRenownProfile);
|
|
93
|
-
// Re-authenticate stored user if present
|
|
94
|
-
if (renown.user) {
|
|
95
|
-
try {
|
|
96
|
-
await renown.login(renown.user.did);
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
console.error("Failed to re-authenticate user:", error);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return renown;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Create a BaseRenownBuilder from options object for a more concise API
|
|
106
|
-
*/
|
|
107
|
-
static from(options) {
|
|
108
|
-
const builder = new BaseRenownBuilder(options.appName);
|
|
109
|
-
if (options.storage) {
|
|
110
|
-
builder.withStorage(options.storage);
|
|
111
|
-
}
|
|
112
|
-
if (options.eventEmitter) {
|
|
113
|
-
builder.withEventEmitter(options.eventEmitter);
|
|
114
|
-
}
|
|
115
|
-
if (options.crypto) {
|
|
116
|
-
builder.withCrypto(options.crypto);
|
|
117
|
-
}
|
|
118
|
-
if (options.keyPairStorage) {
|
|
119
|
-
builder.withKeyPairStorage(options.keyPairStorage);
|
|
120
|
-
}
|
|
121
|
-
if (options.baseUrl) {
|
|
122
|
-
builder.withBaseUrl(options.baseUrl);
|
|
123
|
-
}
|
|
124
|
-
if (options.profileFetcher) {
|
|
125
|
-
builder.withProfileFetcher(options.profileFetcher);
|
|
126
|
-
}
|
|
127
|
-
return builder;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=renown-builder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renown-builder.js","sourceRoot":"","sources":["../../src/renown-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export interface IStorage<T extends Record<string, unknown> = Record<string, unknown>, Key extends keyof T = keyof T> {
|
|
2
|
-
get(key: Key): T[Key] | undefined;
|
|
3
|
-
set(key: Key, value?: T[Key]): void;
|
|
4
|
-
delete(key: Key): void;
|
|
5
|
-
}
|
|
6
|
-
export declare abstract class BaseStorage<T extends Record<string, unknown> = Record<string, unknown>, Key extends keyof T = keyof T> implements IStorage<T> {
|
|
7
|
-
abstract get(key: Key): T[Key] | undefined;
|
|
8
|
-
abstract set(key: Key, value?: T[Key]): void;
|
|
9
|
-
abstract delete(key: Key): void;
|
|
10
|
-
}
|
|
11
|
-
export declare class MemoryStorage<T extends Record<string, unknown> = Record<string, unknown>, Key extends keyof T = keyof T> extends BaseStorage<T> {
|
|
12
|
-
private readonly data;
|
|
13
|
-
get(key: Key): T[Key] | undefined;
|
|
14
|
-
set(key: Key, value?: T[Key]): void;
|
|
15
|
-
delete(key: Key): void;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=common.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/storage/common.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ,CACvB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,GAAG,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC;IAE7B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAClC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACpC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;CACxB;AAED,8BAAsB,WAAW,CAC/B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,GAAG,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,CAC7B,YAAW,QAAQ,CAAC,CAAC,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;IAC1C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAC5C,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;CAChC;AAED,qBAAa,aAAa,CACxB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,GAAG,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,CAC7B,SAAQ,WAAW,CAAC,CAAC,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAE/C,GAAG,CAAC,GAAG,EAAE,GAAG;IAIZ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAQnC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;CAGvB"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export class BaseStorage {
|
|
2
|
-
}
|
|
3
|
-
export class MemoryStorage extends BaseStorage {
|
|
4
|
-
data = new Map();
|
|
5
|
-
get(key) {
|
|
6
|
-
return this.data.get(key);
|
|
7
|
-
}
|
|
8
|
-
set(key, value) {
|
|
9
|
-
if (value === undefined) {
|
|
10
|
-
this.data.delete(key);
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
this.data.set(key, value);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
delete(key) {
|
|
17
|
-
this.data.delete(key);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=common.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/storage/common.ts"],"names":[],"mappings":"AASA,MAAM,OAAgB,WAAW;CAOhC;AAED,MAAM,OAAO,aAGX,SAAQ,WAAc;IACL,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC;IAE/C,GAAG,CAAC,GAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,GAAQ,EAAE,KAAc;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAQ;QACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { BaseStorage } from "./common.js";
|
|
2
|
-
export declare class BrowserStorage<T extends Record<string, unknown> = Record<string, unknown>> extends BaseStorage<T> {
|
|
3
|
-
#private;
|
|
4
|
-
private readonly namespace;
|
|
5
|
-
constructor(namespace: string, basename: string | undefined);
|
|
6
|
-
get<Key extends keyof T>(key: Key): T[Key] | undefined;
|
|
7
|
-
set<Key extends keyof T>(key: Key, value?: T[Key]): void;
|
|
8
|
-
delete(key: keyof T): void;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=storage.browser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.browser.d.ts","sourceRoot":"","sources":["../../../src/storage/storage.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,cAAc,CACzB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC3D,SAAQ,WAAW,CAAC,CAAC,CAAC;;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS;IAQ3D,GAAG,CAAC,GAAG,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;IAQtD,GAAG,CAAC,GAAG,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAMxD,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI;CAG3B"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { BaseStorage } from "./common.js";
|
|
2
|
-
export class BrowserStorage extends BaseStorage {
|
|
3
|
-
namespace;
|
|
4
|
-
constructor(namespace, basename) {
|
|
5
|
-
super();
|
|
6
|
-
this.namespace = `${basename}:${namespace}`;
|
|
7
|
-
}
|
|
8
|
-
#buildKey(key) {
|
|
9
|
-
return `${this.namespace}:${key.toString()}`;
|
|
10
|
-
}
|
|
11
|
-
get(key) {
|
|
12
|
-
const value = localStorage.getItem(this.#buildKey(key));
|
|
13
|
-
if (value) {
|
|
14
|
-
return JSON.parse(value);
|
|
15
|
-
}
|
|
16
|
-
return undefined;
|
|
17
|
-
}
|
|
18
|
-
set(key, value) {
|
|
19
|
-
return value
|
|
20
|
-
? localStorage.setItem(this.#buildKey(key), JSON.stringify(value))
|
|
21
|
-
: localStorage.removeItem(this.#buildKey(key));
|
|
22
|
-
}
|
|
23
|
-
delete(key) {
|
|
24
|
-
return localStorage.removeItem(this.#buildKey(key));
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=storage.browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.browser.js","sourceRoot":"","sources":["../../../src/storage/storage.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,OAAO,cAEX,SAAQ,WAAc;IACL,SAAS,CAAS;IAEnC,YAAY,SAAiB,EAAE,QAA4B;QACzD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;IAC9C,CAAC;IAED,SAAS,CAAC,GAAY;QACpB,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC/C,CAAC;IACD,GAAG,CAAsB,GAAQ;QAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAW,CAAC;QACrC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,GAAG,CAAsB,GAAQ,EAAE,KAAc;QAC/C,OAAO,KAAK;YACV,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAClE,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,GAAY;QACjB,OAAO,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;CACF"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { BaseStorage } from "./common.js";
|
|
2
|
-
export declare class NodeStorage<T extends Record<string, unknown> = Record<string, unknown>> extends BaseStorage<T> {
|
|
3
|
-
private readonly filePath;
|
|
4
|
-
constructor(filePath: string);
|
|
5
|
-
private readData;
|
|
6
|
-
private writeData;
|
|
7
|
-
get<Key extends keyof T>(key: Key): T[Key] | undefined;
|
|
8
|
-
set<Key extends keyof T>(key: Key, value?: T[Key]): void;
|
|
9
|
-
delete(key: keyof T): void;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=storage.node.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.node.d.ts","sourceRoot":"","sources":["../../../src/storage/storage.node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,WAAW,CACtB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC3D,SAAQ,WAAW,CAAC,CAAC,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,EAAE,MAAM;IAY5B,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS;IAIjB,GAAG,CAAC,GAAG,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;IAKtD,GAAG,CAAC,GAAG,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAUxD,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI;CAK3B"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { dirname } from "node:path";
|
|
3
|
-
import { BaseStorage } from "./common.js";
|
|
4
|
-
export class NodeStorage extends BaseStorage {
|
|
5
|
-
filePath;
|
|
6
|
-
constructor(filePath) {
|
|
7
|
-
super();
|
|
8
|
-
this.filePath = filePath;
|
|
9
|
-
const parentFolder = dirname(this.filePath);
|
|
10
|
-
mkdirSync(parentFolder, { recursive: true });
|
|
11
|
-
if (!existsSync(this.filePath)) {
|
|
12
|
-
writeFileSync(this.filePath, JSON.stringify({}));
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
readData() {
|
|
16
|
-
const data = readFileSync(this.filePath, "utf-8");
|
|
17
|
-
return JSON.parse(data);
|
|
18
|
-
}
|
|
19
|
-
writeData(data) {
|
|
20
|
-
writeFileSync(this.filePath, JSON.stringify(data, null, 2));
|
|
21
|
-
}
|
|
22
|
-
get(key) {
|
|
23
|
-
const data = this.readData();
|
|
24
|
-
return data[key];
|
|
25
|
-
}
|
|
26
|
-
set(key, value) {
|
|
27
|
-
const data = this.readData();
|
|
28
|
-
if (value === undefined) {
|
|
29
|
-
delete data[key];
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
data[key] = value;
|
|
33
|
-
}
|
|
34
|
-
this.writeData(data);
|
|
35
|
-
}
|
|
36
|
-
delete(key) {
|
|
37
|
-
const data = this.readData();
|
|
38
|
-
delete data[key];
|
|
39
|
-
this.writeData(data);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=storage.node.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.node.js","sourceRoot":"","sources":["../../../src/storage/storage.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,OAAO,WAEX,SAAQ,WAAc;IACL,QAAQ,CAAS;IAElC,YAAY,QAAgB;QAC1B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEO,QAAQ;QACd,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;IAC/B,CAAC;IAEO,SAAS,CAAC,IAAO;QACvB,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,GAAG,CAAsB,GAAQ;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,GAAG,CAAsB,GAAQ,EAAE,KAAc;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,GAAY;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;CACF"}
|