@smartledger/keys 1.0.1 → 1.2.0
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/cjs/browser.d.ts +20 -0
- package/dist/cjs/browser.d.ts.map +1 -0
- package/dist/cjs/browser.js.map +1 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/sdk.d.ts +69 -0
- package/dist/cjs/sdk.d.ts.map +1 -0
- package/dist/cjs/sdk.js.map +1 -0
- package/dist/cjs/types.d.ts +117 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/browser.d.ts +20 -0
- package/dist/esm/browser.d.ts.map +1 -0
- package/dist/esm/browser.js +41 -0
- package/dist/esm/browser.js.map +1 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/sdk.d.ts +69 -0
- package/dist/esm/sdk.d.ts.map +1 -0
- package/dist/esm/sdk.js +186 -0
- package/dist/esm/sdk.js.map +1 -0
- package/dist/esm/types.d.ts +117 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +8 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/lumen-keys.js +1566 -2685
- package/dist/lumen-keys.js.map +4 -4
- package/dist/lumen-keys.min.js +2 -2
- package/dist/lumen-keys.min.js.map +4 -4
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +23 -7
- package/dist/browser.d.ts.map +0 -1
- package/dist/browser.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/sdk.d.ts.map +0 -1
- package/dist/sdk.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- /package/dist/{browser.js → cjs/browser.js} +0 -0
- /package/dist/{index.js → cjs/index.js} +0 -0
- /package/dist/{sdk.js → cjs/sdk.js} +0 -0
- /package/dist/{types.js → cjs/types.js} +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser entry point for @lumen/keys SDK
|
|
3
|
+
* Includes WASM initialization and browser-compatible exports
|
|
4
|
+
*/
|
|
5
|
+
import type { KeySDK } from './types.js';
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { InMemoryKeyStorage } from '@smartledger/crypto';
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new KeySDK instance for browser usage
|
|
10
|
+
* Handles WASM initialization automatically
|
|
11
|
+
*/
|
|
12
|
+
export declare function createKeySDK(): Promise<KeySDK>;
|
|
13
|
+
/**
|
|
14
|
+
* Browser-ready default export
|
|
15
|
+
*/
|
|
16
|
+
declare const _default: {
|
|
17
|
+
createKeySDK: typeof createKeySDK;
|
|
18
|
+
};
|
|
19
|
+
export default _default;
|
|
20
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAkBpD;AAED;;GAEG;;;;AACH,wBAEE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAoBH,oCAkBC;AApCD,qCAAyC;AACzC,gDAM6B;AAG7B,wCAAwC;AACxC,6CAA2B;AAC3B,8CAAyD;AAAhD,4GAAA,kBAAkB,OAAA;AAE3B;;;GAGG;AACI,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,IAAI,2BAAkB,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,oBAAW,CAAC,OAAO,CAAC,CAAC;IAE7C,uDAAuD;IACvD,MAAM,aAAa,GAAG,IAAI,+BAAsB,EAAE,CAAC;IACnD,aAAa,CAAC,QAAQ,CAAC,IAAI,sBAAa,EAAE,CAAC,CAAC;IAC5C,aAAa,CAAC,QAAQ,CAAC,IAAI,mBAAU,EAAE,CAAC,CAAC;IAEzC,MAAM,GAAG,GAAG,IAAI,sBAAa,CAAC;QAC5B,WAAW;QACX,aAAa;KACd,CAAC,CAAC;IAEH,2CAA2C;IAC3C,kEAAkE;IAElE,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,kBAAe;IACb,YAAY;CACb,CAAC;AAEF,8BAA8B;AAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACjC,MAAc,CAAC,SAAS,GAAG;QAC1B,YAAY;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @smartledger/keys - Key Management SDK
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for cryptographic key operations.
|
|
5
|
+
*/
|
|
6
|
+
export * from './types';
|
|
7
|
+
export * from './sdk';
|
|
8
|
+
export type { KeyMeta, CryptoProfile } from '@smartledger/crypto';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AAGtB,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,wCAAsB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default implementation of KeySDK.
|
|
3
|
+
*
|
|
4
|
+
* Integrates KeyRegistry and SignatureSuiteRegistry to provide
|
|
5
|
+
* a clean, high-level API for key operations.
|
|
6
|
+
*/
|
|
7
|
+
import { KeyRegistry, SignatureSuiteRegistry, CryptoProfile } from '@smartledger/crypto';
|
|
8
|
+
import { KeySDK, KeyRecord, CreateKeyOptions } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* Configuration for DefaultKeySDK.
|
|
11
|
+
*/
|
|
12
|
+
export interface KeySDKConfig {
|
|
13
|
+
/** Key registry instance */
|
|
14
|
+
keyRegistry: KeyRegistry;
|
|
15
|
+
/** Signature suite registry instance */
|
|
16
|
+
suiteRegistry: SignatureSuiteRegistry;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Default KeySDK implementation.
|
|
20
|
+
*
|
|
21
|
+
* Provides a simple, safe API for key operations while hiding complexity.
|
|
22
|
+
*/
|
|
23
|
+
export declare class DefaultKeySDK implements KeySDK {
|
|
24
|
+
private keyRegistry;
|
|
25
|
+
private suiteRegistry;
|
|
26
|
+
private keyCounter;
|
|
27
|
+
constructor(config: KeySDKConfig);
|
|
28
|
+
/**
|
|
29
|
+
* Create a new key for an agent.
|
|
30
|
+
*/
|
|
31
|
+
createKey(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
32
|
+
/**
|
|
33
|
+
* Get an existing key.
|
|
34
|
+
*/
|
|
35
|
+
getKey(keyId: string): Promise<KeyRecord | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Sign with a key (private key never exposed).
|
|
38
|
+
*/
|
|
39
|
+
signWithKey(keyId: string, message: Uint8Array): Promise<Uint8Array>;
|
|
40
|
+
/**
|
|
41
|
+
* Verify a signature.
|
|
42
|
+
*/
|
|
43
|
+
verifySignature(keyId: string, message: Uint8Array, signature: Uint8Array): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* List keys for an agent.
|
|
46
|
+
*/
|
|
47
|
+
listKeysForAgent(agentId: string, activeOnly?: boolean): Promise<KeyRecord[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Get active crypto profile for an agent.
|
|
50
|
+
*/
|
|
51
|
+
getActiveCryptoProfile(agentId: string): Promise<CryptoProfile | null>;
|
|
52
|
+
/**
|
|
53
|
+
* Rotate all keys for an agent.
|
|
54
|
+
*/
|
|
55
|
+
rotateAgentKeys(agentId: string): Promise<KeyRecord[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Get or create key (idempotent).
|
|
58
|
+
*/
|
|
59
|
+
getOrCreateKey(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
60
|
+
/**
|
|
61
|
+
* Helper: Get hash algorithm for a suite.
|
|
62
|
+
*/
|
|
63
|
+
private getHashAlgorithm;
|
|
64
|
+
/**
|
|
65
|
+
* Helper: Get next counter for an agent.
|
|
66
|
+
*/
|
|
67
|
+
private getNextCounter;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,sBAAsB,EAEtB,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,MAAM,EACN,SAAS,EACT,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,WAAW,EAAE,WAAW,CAAC;IAEzB,wCAAwC;IACxC,aAAa,EAAE,sBAAsB,CAAC;CACvC;AAED;;;;GAIG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAA6B;gBAEnC,MAAM,EAAE,YAAY;IAKhC;;OAEG;IACG,SAAS,CACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,CAAC;IA4BrB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAatD;;OAEG;IACG,WAAW,CACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,UAAU,CAAC;IAsBtB;;OAEG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC;IAoBnB;;OAEG;IACG,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,OAAc,GACzB,OAAO,CAAC,SAAS,EAAE,CAAC;IAwBvB;;OAEG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAkB5E;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA8B5D;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,CAAC;IAgBrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,cAAc;CAMvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @smartledger/keys - Key Management SDK
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for cryptographic key operations.
|
|
5
|
+
* Provides a clean API that hides complexity and ensures consistency.
|
|
6
|
+
*/
|
|
7
|
+
import { KeyMeta, CryptoProfile } from '@smartledger/crypto';
|
|
8
|
+
/**
|
|
9
|
+
* Public key record (safe to expose, no private key).
|
|
10
|
+
*/
|
|
11
|
+
export interface KeyRecord {
|
|
12
|
+
meta: KeyMeta;
|
|
13
|
+
publicKey: Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Key creation options.
|
|
17
|
+
*/
|
|
18
|
+
export interface CreateKeyOptions {
|
|
19
|
+
/** Optional expiration date (ISO 8601) */
|
|
20
|
+
expiresAt?: string;
|
|
21
|
+
/** Key usage (default: ['signing']) */
|
|
22
|
+
usage?: Array<'signing' | 'encryption' | 'both'>;
|
|
23
|
+
/** Crypto profile version (default: '1.0.0') */
|
|
24
|
+
cryptoProfileVersion?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Key SDK - Single interface for all key operations.
|
|
28
|
+
*
|
|
29
|
+
* Design principles:
|
|
30
|
+
* - Hide private keys from most callers
|
|
31
|
+
* - Single source of truth for suite selection
|
|
32
|
+
* - Crypto-agnostic API (suite is config, not code)
|
|
33
|
+
* - Easy to audit (all key operations go through this)
|
|
34
|
+
*/
|
|
35
|
+
export interface KeySDK {
|
|
36
|
+
/**
|
|
37
|
+
* Create a new key for an agent/module.
|
|
38
|
+
*
|
|
39
|
+
* @param agentId Agent identifier (e.g. 'agent-resonance')
|
|
40
|
+
* @param profile Crypto configuration (which suites to use)
|
|
41
|
+
* @param options Optional expiration, usage, etc.
|
|
42
|
+
* @returns KeyRecord with metadata and public key
|
|
43
|
+
*/
|
|
44
|
+
createKey(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
45
|
+
/**
|
|
46
|
+
* Get an existing key by ID.
|
|
47
|
+
*
|
|
48
|
+
* @param keyId Key identifier
|
|
49
|
+
* @returns KeyRecord or null if not found
|
|
50
|
+
*/
|
|
51
|
+
getKey(keyId: string): Promise<KeyRecord | null>;
|
|
52
|
+
/**
|
|
53
|
+
* Sign a message with a key.
|
|
54
|
+
*
|
|
55
|
+
* Private key never leaves the SDK.
|
|
56
|
+
*
|
|
57
|
+
* @param keyId Which key to sign with
|
|
58
|
+
* @param message Message to sign (will be hashed internally)
|
|
59
|
+
* @returns Signature bytes
|
|
60
|
+
*/
|
|
61
|
+
signWithKey(keyId: string, message: Uint8Array): Promise<Uint8Array>;
|
|
62
|
+
/**
|
|
63
|
+
* Verify a signature against a public key.
|
|
64
|
+
*
|
|
65
|
+
* @param keyId Which key to verify with
|
|
66
|
+
* @param message Original message
|
|
67
|
+
* @param signature Signature to verify
|
|
68
|
+
* @returns true if valid
|
|
69
|
+
*/
|
|
70
|
+
verifySignature(keyId: string, message: Uint8Array, signature: Uint8Array): Promise<boolean>;
|
|
71
|
+
/**
|
|
72
|
+
* List all keys for an agent.
|
|
73
|
+
*
|
|
74
|
+
* @param agentId Agent identifier
|
|
75
|
+
* @param activeOnly If true, only return active keys (default: true)
|
|
76
|
+
* @returns Array of KeyRecords
|
|
77
|
+
*/
|
|
78
|
+
listKeysForAgent(agentId: string, activeOnly?: boolean): Promise<KeyRecord[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Get the active crypto profile for an agent.
|
|
81
|
+
*
|
|
82
|
+
* Looks up the most recent active keys and infers the profile.
|
|
83
|
+
*
|
|
84
|
+
* @param agentId Agent identifier
|
|
85
|
+
* @returns CryptoProfile or null if no keys found
|
|
86
|
+
*/
|
|
87
|
+
getActiveCryptoProfile(agentId: string): Promise<CryptoProfile | null>;
|
|
88
|
+
/**
|
|
89
|
+
* Rotate an agent's keys.
|
|
90
|
+
*
|
|
91
|
+
* Generates new keypairs for all active keys, marks old ones as rotated.
|
|
92
|
+
*
|
|
93
|
+
* @param agentId Agent identifier
|
|
94
|
+
* @returns Array of new KeyRecords
|
|
95
|
+
*/
|
|
96
|
+
rotateAgentKeys(agentId: string): Promise<KeyRecord[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Create key if it doesn't exist, otherwise return existing.
|
|
99
|
+
*
|
|
100
|
+
* Idempotent key creation for agent setup.
|
|
101
|
+
*
|
|
102
|
+
* @param agentId Agent identifier
|
|
103
|
+
* @param profile Crypto configuration
|
|
104
|
+
* @param options Creation options
|
|
105
|
+
* @returns KeyRecord (new or existing)
|
|
106
|
+
*/
|
|
107
|
+
getOrCreateKey(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Agent metadata with crypto configuration.
|
|
111
|
+
*/
|
|
112
|
+
export interface AgentKeyConfig {
|
|
113
|
+
agentId: string;
|
|
114
|
+
version: string;
|
|
115
|
+
cryptoProfile: CryptoProfile;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,uCAAuC;IACvC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,YAAY,GAAG,MAAM,CAAC,CAAC;IAEjD,gDAAgD;IAChD,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;;OAOG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,SAAS,CAAC,CAAC;IAEtB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAEjD;;;;;;;;OAQG;IACH,WAAW,CACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;;;;;;OAOG;IACH,eAAe,CACb,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB;;;;;;OAMG;IACH,gBAAgB,CACd,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,OAAO,GACnB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAExB;;;;;;;OAOG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAEvE;;;;;;;OAOG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAEvD;;;;;;;;;OASG;IACH,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,SAAS,CAAC,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,aAAa,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser entry point for @lumen/keys SDK
|
|
3
|
+
* Includes WASM initialization and browser-compatible exports
|
|
4
|
+
*/
|
|
5
|
+
import type { KeySDK } from './types.js';
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { InMemoryKeyStorage } from '@smartledger/crypto';
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new KeySDK instance for browser usage
|
|
10
|
+
* Handles WASM initialization automatically
|
|
11
|
+
*/
|
|
12
|
+
export declare function createKeySDK(): Promise<KeySDK>;
|
|
13
|
+
/**
|
|
14
|
+
* Browser-ready default export
|
|
15
|
+
*/
|
|
16
|
+
declare const _default: {
|
|
17
|
+
createKeySDK: typeof createKeySDK;
|
|
18
|
+
};
|
|
19
|
+
export default _default;
|
|
20
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAkBpD;AAED;;GAEG;;;;AACH,wBAEE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser entry point for @lumen/keys SDK
|
|
3
|
+
* Includes WASM initialization and browser-compatible exports
|
|
4
|
+
*/
|
|
5
|
+
import { DefaultKeySDK } from './sdk.js';
|
|
6
|
+
import { InMemoryKeyStorage, KeyRegistry, SignatureSuiteRegistry, BsvEcdsaSuite, MlDsaSuite, } from '@smartledger/crypto';
|
|
7
|
+
// Re-export all types for browser usage
|
|
8
|
+
export * from './types.js';
|
|
9
|
+
export { InMemoryKeyStorage } from '@smartledger/crypto';
|
|
10
|
+
/**
|
|
11
|
+
* Creates a new KeySDK instance for browser usage
|
|
12
|
+
* Handles WASM initialization automatically
|
|
13
|
+
*/
|
|
14
|
+
export async function createKeySDK() {
|
|
15
|
+
const storage = new InMemoryKeyStorage();
|
|
16
|
+
const keyRegistry = new KeyRegistry(storage);
|
|
17
|
+
// Initialize suite registry with both ECDSA and ML-DSA
|
|
18
|
+
const suiteRegistry = new SignatureSuiteRegistry();
|
|
19
|
+
suiteRegistry.register(new BsvEcdsaSuite());
|
|
20
|
+
suiteRegistry.register(new MlDsaSuite());
|
|
21
|
+
const sdk = new DefaultKeySDK({
|
|
22
|
+
keyRegistry,
|
|
23
|
+
suiteRegistry,
|
|
24
|
+
});
|
|
25
|
+
// Pre-initialize WASM for ML-DSA if needed
|
|
26
|
+
// The dilithium-crystals library will lazy-load WASM on first use
|
|
27
|
+
return sdk;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Browser-ready default export
|
|
31
|
+
*/
|
|
32
|
+
export default {
|
|
33
|
+
createKeySDK,
|
|
34
|
+
};
|
|
35
|
+
// Global export for CDN usage
|
|
36
|
+
if (typeof window !== 'undefined') {
|
|
37
|
+
window.LumenKeys = {
|
|
38
|
+
createKeySDK,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,sBAAsB,EACtB,aAAa,EACb,UAAU,GACX,MAAM,qBAAqB,CAAC;AAG7B,wCAAwC;AACxC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAE7C,uDAAuD;IACvD,MAAM,aAAa,GAAG,IAAI,sBAAsB,EAAE,CAAC;IACnD,aAAa,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;IAC5C,aAAa,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IAEzC,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC;QAC5B,WAAW;QACX,aAAa;KACd,CAAC,CAAC;IAEH,2CAA2C;IAC3C,kEAAkE;IAElE,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,eAAe;IACb,YAAY;CACb,CAAC;AAEF,8BAA8B;AAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACjC,MAAc,CAAC,SAAS,GAAG;QAC1B,YAAY;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @smartledger/keys - Key Management SDK
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for cryptographic key operations.
|
|
5
|
+
*/
|
|
6
|
+
export * from './types';
|
|
7
|
+
export * from './sdk';
|
|
8
|
+
export type { KeyMeta, CryptoProfile } from '@smartledger/crypto';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AAGtB,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type": "module"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default implementation of KeySDK.
|
|
3
|
+
*
|
|
4
|
+
* Integrates KeyRegistry and SignatureSuiteRegistry to provide
|
|
5
|
+
* a clean, high-level API for key operations.
|
|
6
|
+
*/
|
|
7
|
+
import { KeyRegistry, SignatureSuiteRegistry, CryptoProfile } from '@smartledger/crypto';
|
|
8
|
+
import { KeySDK, KeyRecord, CreateKeyOptions } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* Configuration for DefaultKeySDK.
|
|
11
|
+
*/
|
|
12
|
+
export interface KeySDKConfig {
|
|
13
|
+
/** Key registry instance */
|
|
14
|
+
keyRegistry: KeyRegistry;
|
|
15
|
+
/** Signature suite registry instance */
|
|
16
|
+
suiteRegistry: SignatureSuiteRegistry;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Default KeySDK implementation.
|
|
20
|
+
*
|
|
21
|
+
* Provides a simple, safe API for key operations while hiding complexity.
|
|
22
|
+
*/
|
|
23
|
+
export declare class DefaultKeySDK implements KeySDK {
|
|
24
|
+
private keyRegistry;
|
|
25
|
+
private suiteRegistry;
|
|
26
|
+
private keyCounter;
|
|
27
|
+
constructor(config: KeySDKConfig);
|
|
28
|
+
/**
|
|
29
|
+
* Create a new key for an agent.
|
|
30
|
+
*/
|
|
31
|
+
createKey(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
32
|
+
/**
|
|
33
|
+
* Get an existing key.
|
|
34
|
+
*/
|
|
35
|
+
getKey(keyId: string): Promise<KeyRecord | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Sign with a key (private key never exposed).
|
|
38
|
+
*/
|
|
39
|
+
signWithKey(keyId: string, message: Uint8Array): Promise<Uint8Array>;
|
|
40
|
+
/**
|
|
41
|
+
* Verify a signature.
|
|
42
|
+
*/
|
|
43
|
+
verifySignature(keyId: string, message: Uint8Array, signature: Uint8Array): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* List keys for an agent.
|
|
46
|
+
*/
|
|
47
|
+
listKeysForAgent(agentId: string, activeOnly?: boolean): Promise<KeyRecord[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Get active crypto profile for an agent.
|
|
50
|
+
*/
|
|
51
|
+
getActiveCryptoProfile(agentId: string): Promise<CryptoProfile | null>;
|
|
52
|
+
/**
|
|
53
|
+
* Rotate all keys for an agent.
|
|
54
|
+
*/
|
|
55
|
+
rotateAgentKeys(agentId: string): Promise<KeyRecord[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Get or create key (idempotent).
|
|
58
|
+
*/
|
|
59
|
+
getOrCreateKey(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
60
|
+
/**
|
|
61
|
+
* Helper: Get hash algorithm for a suite.
|
|
62
|
+
*/
|
|
63
|
+
private getHashAlgorithm;
|
|
64
|
+
/**
|
|
65
|
+
* Helper: Get next counter for an agent.
|
|
66
|
+
*/
|
|
67
|
+
private getNextCounter;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,sBAAsB,EAEtB,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,MAAM,EACN,SAAS,EACT,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,WAAW,EAAE,WAAW,CAAC;IAEzB,wCAAwC;IACxC,aAAa,EAAE,sBAAsB,CAAC;CACvC;AAED;;;;GAIG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAA6B;gBAEnC,MAAM,EAAE,YAAY;IAKhC;;OAEG;IACG,SAAS,CACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,CAAC;IA4BrB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAatD;;OAEG;IACG,WAAW,CACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,UAAU,CAAC;IAsBtB;;OAEG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC;IAoBnB;;OAEG;IACG,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,OAAc,GACzB,OAAO,CAAC,SAAS,EAAE,CAAC;IAwBvB;;OAEG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAkB5E;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA8B5D;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,CAAC;IAgBrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,cAAc;CAMvB"}
|
package/dist/esm/sdk.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default implementation of KeySDK.
|
|
3
|
+
*
|
|
4
|
+
* Integrates KeyRegistry and SignatureSuiteRegistry to provide
|
|
5
|
+
* a clean, high-level API for key operations.
|
|
6
|
+
*/
|
|
7
|
+
import { hashBytes, } from '@smartledger/crypto';
|
|
8
|
+
/**
|
|
9
|
+
* Default KeySDK implementation.
|
|
10
|
+
*
|
|
11
|
+
* Provides a simple, safe API for key operations while hiding complexity.
|
|
12
|
+
*/
|
|
13
|
+
export class DefaultKeySDK {
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.keyCounter = new Map(); // agentId -> counter
|
|
16
|
+
this.keyRegistry = config.keyRegistry;
|
|
17
|
+
this.suiteRegistry = config.suiteRegistry;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create a new key for an agent.
|
|
21
|
+
*/
|
|
22
|
+
async createKey(agentId, profile, options = {}) {
|
|
23
|
+
// Generate key for primary suite
|
|
24
|
+
const suite = this.suiteRegistry.getSuite(profile.primarySignatureSuite);
|
|
25
|
+
const keypair = await suite.generateKeypair();
|
|
26
|
+
// Generate unique keyId
|
|
27
|
+
const counter = this.getNextCounter(agentId);
|
|
28
|
+
const suiteName = profile.primarySignatureSuite.split('-')[0]; // 'ml-dsa' or 'bsv'
|
|
29
|
+
const keyId = `${agentId}:pk-${suiteName}-${counter}`;
|
|
30
|
+
// Register key
|
|
31
|
+
const meta = await this.keyRegistry.registerKey(keyId, keypair, profile.primarySignatureSuite, {
|
|
32
|
+
expiresAt: options.expiresAt,
|
|
33
|
+
usage: options.usage || ['signing'],
|
|
34
|
+
cryptoProfileVersion: options.cryptoProfileVersion || '1.0.0',
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
meta,
|
|
38
|
+
publicKey: keypair.publicKey,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get an existing key.
|
|
43
|
+
*/
|
|
44
|
+
async getKey(keyId) {
|
|
45
|
+
const result = await this.keyRegistry.getPublicKey(keyId);
|
|
46
|
+
if (!result) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
meta: result.meta,
|
|
51
|
+
publicKey: result.publicKey,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Sign with a key (private key never exposed).
|
|
56
|
+
*/
|
|
57
|
+
async signWithKey(keyId, message) {
|
|
58
|
+
// Get full keypair (private access)
|
|
59
|
+
const result = await this.keyRegistry.getKey(keyId);
|
|
60
|
+
if (!result) {
|
|
61
|
+
throw new Error(`Key not found: ${keyId}`);
|
|
62
|
+
}
|
|
63
|
+
if (result.meta.status !== 'active') {
|
|
64
|
+
throw new Error(`Key is not active: ${keyId} (status: ${result.meta.status})`);
|
|
65
|
+
}
|
|
66
|
+
// Get suite and sign
|
|
67
|
+
const suite = this.suiteRegistry.getSuite(result.meta.suiteId);
|
|
68
|
+
// Hash the message (consistent with signAgentResponse)
|
|
69
|
+
const hashAlg = this.getHashAlgorithm(result.meta.suiteId);
|
|
70
|
+
const messageHash = await hashBytes(message, hashAlg);
|
|
71
|
+
return await suite.sign(result.keypair.privateKey, messageHash);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Verify a signature.
|
|
75
|
+
*/
|
|
76
|
+
async verifySignature(keyId, message, signature) {
|
|
77
|
+
const result = await this.keyRegistry.getPublicKey(keyId);
|
|
78
|
+
if (!result) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
const suite = this.suiteRegistry.getSuite(result.meta.suiteId);
|
|
82
|
+
// Hash the message
|
|
83
|
+
const hashAlg = this.getHashAlgorithm(result.meta.suiteId);
|
|
84
|
+
const messageHash = await hashBytes(message, hashAlg);
|
|
85
|
+
try {
|
|
86
|
+
return await suite.verify(result.publicKey, messageHash, signature);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* List keys for an agent.
|
|
94
|
+
*/
|
|
95
|
+
async listKeysForAgent(agentId, activeOnly = true) {
|
|
96
|
+
const keys = activeOnly
|
|
97
|
+
? await this.keyRegistry.listActiveKeys()
|
|
98
|
+
: await this.keyRegistry.listKeys();
|
|
99
|
+
// Filter by agentId prefix
|
|
100
|
+
const agentKeys = keys.filter(meta => meta.keyId.startsWith(`${agentId}:`));
|
|
101
|
+
// Convert to KeyRecords
|
|
102
|
+
const records = [];
|
|
103
|
+
for (const meta of agentKeys) {
|
|
104
|
+
const result = await this.keyRegistry.getPublicKey(meta.keyId);
|
|
105
|
+
if (result) {
|
|
106
|
+
records.push({
|
|
107
|
+
meta: result.meta,
|
|
108
|
+
publicKey: result.publicKey,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return records;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get active crypto profile for an agent.
|
|
116
|
+
*/
|
|
117
|
+
async getActiveCryptoProfile(agentId) {
|
|
118
|
+
const keys = await this.listKeysForAgent(agentId, true);
|
|
119
|
+
if (keys.length === 0) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
// Group by suite
|
|
123
|
+
const suites = new Set(keys.map(k => k.meta.suiteId));
|
|
124
|
+
const suiteArray = Array.from(suites);
|
|
125
|
+
// Assume first is primary, second is secondary
|
|
126
|
+
return {
|
|
127
|
+
primarySignatureSuite: suiteArray[0],
|
|
128
|
+
secondarySignatureSuite: suiteArray[1],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Rotate all keys for an agent.
|
|
133
|
+
*/
|
|
134
|
+
async rotateAgentKeys(agentId) {
|
|
135
|
+
const activeKeys = await this.listKeysForAgent(agentId, true);
|
|
136
|
+
const newKeys = [];
|
|
137
|
+
for (const keyRecord of activeKeys) {
|
|
138
|
+
// Generate new keypair
|
|
139
|
+
const suite = this.suiteRegistry.getSuite(keyRecord.meta.suiteId);
|
|
140
|
+
const newKeypair = await suite.generateKeypair();
|
|
141
|
+
// Generate new keyId (increment counter)
|
|
142
|
+
const counter = this.getNextCounter(agentId);
|
|
143
|
+
const suiteName = keyRecord.meta.suiteId.split('-')[0];
|
|
144
|
+
const newKeyId = `${agentId}:pk-${suiteName}-${counter}`;
|
|
145
|
+
// Rotate
|
|
146
|
+
const newMeta = await this.keyRegistry.rotateKey(keyRecord.meta.keyId, newKeyId, newKeypair);
|
|
147
|
+
newKeys.push({
|
|
148
|
+
meta: newMeta,
|
|
149
|
+
publicKey: newKeypair.publicKey,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return newKeys;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get or create key (idempotent).
|
|
156
|
+
*/
|
|
157
|
+
async getOrCreateKey(agentId, profile, options = {}) {
|
|
158
|
+
// Check if key exists
|
|
159
|
+
const existingKeys = await this.listKeysForAgent(agentId, true);
|
|
160
|
+
const primaryKey = existingKeys.find(k => k.meta.suiteId === profile.primarySignatureSuite);
|
|
161
|
+
if (primaryKey) {
|
|
162
|
+
return primaryKey;
|
|
163
|
+
}
|
|
164
|
+
// Create new key
|
|
165
|
+
return await this.createKey(agentId, profile, options);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Helper: Get hash algorithm for a suite.
|
|
169
|
+
*/
|
|
170
|
+
getHashAlgorithm(suiteId) {
|
|
171
|
+
if (suiteId.startsWith('ml-dsa')) {
|
|
172
|
+
return 'sha3-256';
|
|
173
|
+
}
|
|
174
|
+
return 'sha256';
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Helper: Get next counter for an agent.
|
|
178
|
+
*/
|
|
179
|
+
getNextCounter(agentId) {
|
|
180
|
+
const current = this.keyCounter.get(agentId) || 0;
|
|
181
|
+
const next = current + 1;
|
|
182
|
+
this.keyCounter.set(agentId, next);
|
|
183
|
+
return next;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"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"}
|