@didcid/keymaster 0.3.10 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -115,11 +115,10 @@ export interface PollResults {
115
115
  count: number;
116
116
  }>;
117
117
  ballots?: Array<{
118
- ballot: string;
119
- received: string;
120
118
  voter: string;
121
119
  vote: number;
122
120
  option: string;
121
+ received: string;
123
122
  }>;
124
123
  votes?: {
125
124
  eligible: number;
@@ -128,18 +127,12 @@ export interface PollResults {
128
127
  };
129
128
  final?: boolean;
130
129
  }
131
- export interface Poll {
132
- type: string;
133
- version: number;
130
+ export interface PollConfig {
131
+ version: 2;
132
+ name: string;
134
133
  description: string;
135
- roster: string;
136
134
  options: string[];
137
135
  deadline: string;
138
- ballots?: Record<string, {
139
- ballot: string;
140
- received: string;
141
- }>;
142
- results?: PollResults;
143
136
  }
144
137
  export interface ViewPollResult {
145
138
  description: string;
@@ -149,8 +142,15 @@ export interface ViewPollResult {
149
142
  isEligible: boolean;
150
143
  voteExpired: boolean;
151
144
  hasVoted: boolean;
145
+ ballots?: string[];
152
146
  results?: PollResults;
153
147
  }
148
+ export interface ViewBallotResult {
149
+ poll: string;
150
+ voter?: string;
151
+ vote?: number;
152
+ option?: string;
153
+ }
154
154
  export interface BinaryAsset {
155
155
  cid: string;
156
156
  type: string;
@@ -202,8 +202,8 @@ export interface KeymasterOptions {
202
202
  maxAliasLength?: number;
203
203
  }
204
204
  export interface EncryptedMessage {
205
- sender: string;
206
- created: string;
205
+ sender?: string;
206
+ created?: string;
207
207
  cipher_hash?: string | null;
208
208
  cipher_sender?: string | null;
209
209
  cipher_receiver?: string | null;
@@ -258,6 +258,7 @@ export interface KeymasterInterface {
258
258
  checkWallet(): Promise<CheckWalletResult>;
259
259
  fixWallet(): Promise<FixWalletResult>;
260
260
  decryptMnemonic(): Promise<string>;
261
+ changePassphrase(newPassphrase: string): Promise<boolean>;
261
262
  exportEncryptedWallet(): Promise<WalletEncFile>;
262
263
  listIds(): Promise<string[]>;
263
264
  getCurrentId(): Promise<string | undefined>;
@@ -324,20 +325,27 @@ export interface KeymasterInterface {
324
325
  retries?: number;
325
326
  delay?: number;
326
327
  }): Promise<ChallengeResponse>;
327
- pollTemplate(): Promise<Poll>;
328
- createPoll(poll: Poll, options?: CreateAssetOptions): Promise<string>;
329
- getPoll(pollId: string): Promise<Poll | null>;
328
+ pollTemplate(): Promise<PollConfig>;
329
+ createPoll(config: PollConfig, options?: VaultOptions): Promise<string>;
330
+ getPoll(pollId: string): Promise<PollConfig | null>;
331
+ testPoll(id: string): Promise<boolean>;
332
+ listPolls(owner?: string): Promise<string[]>;
330
333
  viewPoll(pollId: string): Promise<ViewPollResult>;
331
334
  votePoll(pollId: string, vote: number, options?: {
332
- spoil?: boolean;
333
335
  registry?: string;
334
336
  validUntil?: string;
335
337
  }): Promise<string>;
338
+ sendPoll(pollId: string): Promise<string>;
339
+ sendBallot(ballotDid: string, pollId: string): Promise<string>;
340
+ viewBallot(ballotDid: string): Promise<ViewBallotResult>;
336
341
  updatePoll(ballot: string): Promise<boolean>;
337
342
  publishPoll(pollId: string, options?: {
338
343
  reveal?: boolean;
339
344
  }): Promise<boolean>;
340
345
  unpublishPoll(pollId: string): Promise<boolean>;
346
+ addPollVoter(pollId: string, memberId: string): Promise<boolean>;
347
+ removePollVoter(pollId: string, memberId: string): Promise<boolean>;
348
+ listPollVoters(pollId: string): Promise<Record<string, any>>;
341
349
  createImage(data: Buffer, options?: FileAssetOptions): Promise<string>;
342
350
  updateImage(did: string, data: Buffer, options?: FileAssetOptions): Promise<boolean>;
343
351
  getImage(id: string): Promise<ImageFileAsset | null>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@didcid/keymaster",
3
- "version": "0.3.10",
3
+ "version": "0.4.1",
4
4
  "description": "Archon Keymaster",
5
5
  "type": "module",
6
6
  "module": "./dist/esm/index.js",
@@ -37,11 +37,6 @@
37
37
  "require": "./dist/cjs/keymaster-client.cjs",
38
38
  "types": "./dist/types/keymaster-client.d.ts"
39
39
  },
40
- "./encryption": {
41
- "import": "./dist/esm/encryption.js",
42
- "require": "./dist/cjs/encryption.cjs",
43
- "types": "./dist/types/encryption.d.ts"
44
- },
45
40
  "./wallet/json": {
46
41
  "import": "./dist/esm/db/json.js",
47
42
  "require": "./dist/cjs/db/json.cjs",
@@ -101,9 +96,6 @@
101
96
  "client": [
102
97
  "./dist/types/keymaster-client.d.ts"
103
98
  ],
104
- "encryption": [
105
- "./dist/types/encryption.d.ts"
106
- ],
107
99
  "wallet/json": [
108
100
  "./dist/types/db/json.d.ts"
109
101
  ],
@@ -149,9 +141,9 @@
149
141
  "author": "David McFadzean <davidmc@gmail.com>",
150
142
  "license": "MIT",
151
143
  "dependencies": {
152
- "@didcid/cipher": "^0.1.3",
144
+ "@didcid/cipher": "^0.2.1",
153
145
  "@didcid/common": "^0.1.3",
154
- "@didcid/gatekeeper": "^0.3.7",
146
+ "@didcid/gatekeeper": "^0.4.1",
155
147
  "axios": "^1.7.7",
156
148
  "commander": "^11.1.0",
157
149
  "dotenv": "^16.4.5",
@@ -166,5 +158,5 @@
166
158
  "type": "git",
167
159
  "url": "git+https://github.com/archetech/archon.git"
168
160
  },
169
- "gitHead": "bd4d25151dfe8e2b940e0691d01a34b2efdc5530"
161
+ "gitHead": "40bac9cb578004fc32d9c937c68da9179210ec23"
170
162
  }
@@ -1,59 +0,0 @@
1
- 'use strict';
2
-
3
- const ENC_ALG = 'AES-GCM';
4
- const ENC_KDF = 'PBKDF2';
5
- const ENC_HASH = 'SHA-512';
6
- const ENC_ITER_DEFAULT = 100_000;
7
- const IV_LEN = 12;
8
- const SALT_LEN = 16;
9
- function getIterations() {
10
- if (typeof process !== 'undefined' && process.env?.PBKDF2_ITERATIONS) {
11
- const parsed = parseInt(process.env.PBKDF2_ITERATIONS, 10);
12
- if (!isNaN(parsed) && parsed > 0) {
13
- return parsed;
14
- }
15
- }
16
- return ENC_ITER_DEFAULT;
17
- }
18
- async function encMnemonic(mnemonic, pass) {
19
- if (!hasSubtle()) {
20
- throw new Error('Web Cryptography API not available');
21
- }
22
- const salt = await randBytes(SALT_LEN);
23
- const iv = await randBytes(IV_LEN);
24
- const key = await deriveKey(pass, salt);
25
- const ct = await crypto.subtle.encrypt({ name: ENC_ALG, iv: iv }, key, new TextEncoder().encode(mnemonic));
26
- return { salt: b64(salt), iv: b64(iv), data: b64(new Uint8Array(ct)) };
27
- }
28
- async function decMnemonic(blob, pass) {
29
- if (!hasSubtle()) {
30
- throw new Error('Web Cryptography API not available');
31
- }
32
- const salt = ub64(blob.salt);
33
- const iv = ub64(blob.iv);
34
- const data = ub64(blob.data);
35
- const key = await deriveKey(pass, salt);
36
- const pt = await crypto.subtle.decrypt({ name: ENC_ALG, iv }, key, data);
37
- return new TextDecoder().decode(pt);
38
- }
39
- const b64 = (buf) => {
40
- return Buffer.from(buf).toString('base64');
41
- };
42
- const ub64 = (b64) => {
43
- return new Uint8Array(Buffer.from(b64, 'base64'));
44
- };
45
- const hasSubtle = () => typeof globalThis !== 'undefined' &&
46
- !!(globalThis.crypto && globalThis.crypto.subtle);
47
- async function randBytes(len) {
48
- const u8 = new Uint8Array(len);
49
- crypto.getRandomValues(u8);
50
- return u8;
51
- }
52
- async function deriveKey(pass, salt) {
53
- const enc = new TextEncoder();
54
- const passKey = await crypto.subtle.importKey('raw', enc.encode(pass), { name: ENC_KDF }, false, ['deriveKey']);
55
- return crypto.subtle.deriveKey({ name: ENC_KDF, salt: salt, iterations: getIterations(), hash: ENC_HASH }, passKey, { name: ENC_ALG, length: 256 }, false, ['encrypt', 'decrypt']);
56
- }
57
-
58
- exports.decMnemonic = decMnemonic;
59
- exports.encMnemonic = encMnemonic;
@@ -1,55 +0,0 @@
1
- const ENC_ALG = 'AES-GCM';
2
- const ENC_KDF = 'PBKDF2';
3
- const ENC_HASH = 'SHA-512';
4
- const ENC_ITER_DEFAULT = 100_000;
5
- const IV_LEN = 12;
6
- const SALT_LEN = 16;
7
- function getIterations() {
8
- if (typeof process !== 'undefined' && process.env?.PBKDF2_ITERATIONS) {
9
- const parsed = parseInt(process.env.PBKDF2_ITERATIONS, 10);
10
- if (!isNaN(parsed) && parsed > 0) {
11
- return parsed;
12
- }
13
- }
14
- return ENC_ITER_DEFAULT;
15
- }
16
- export async function encMnemonic(mnemonic, pass) {
17
- if (!hasSubtle()) {
18
- throw new Error('Web Cryptography API not available');
19
- }
20
- const salt = await randBytes(SALT_LEN);
21
- const iv = await randBytes(IV_LEN);
22
- const key = await deriveKey(pass, salt);
23
- const ct = await crypto.subtle.encrypt({ name: ENC_ALG, iv: iv }, key, new TextEncoder().encode(mnemonic));
24
- return { salt: b64(salt), iv: b64(iv), data: b64(new Uint8Array(ct)) };
25
- }
26
- export async function decMnemonic(blob, pass) {
27
- if (!hasSubtle()) {
28
- throw new Error('Web Cryptography API not available');
29
- }
30
- const salt = ub64(blob.salt);
31
- const iv = ub64(blob.iv);
32
- const data = ub64(blob.data);
33
- const key = await deriveKey(pass, salt);
34
- const pt = await crypto.subtle.decrypt({ name: ENC_ALG, iv }, key, data);
35
- return new TextDecoder().decode(pt);
36
- }
37
- const b64 = (buf) => {
38
- return Buffer.from(buf).toString('base64');
39
- };
40
- const ub64 = (b64) => {
41
- return new Uint8Array(Buffer.from(b64, 'base64'));
42
- };
43
- const hasSubtle = () => typeof globalThis !== 'undefined' &&
44
- !!(globalThis.crypto && globalThis.crypto.subtle);
45
- async function randBytes(len) {
46
- const u8 = new Uint8Array(len);
47
- crypto.getRandomValues(u8);
48
- return u8;
49
- }
50
- async function deriveKey(pass, salt) {
51
- const enc = new TextEncoder();
52
- const passKey = await crypto.subtle.importKey('raw', enc.encode(pass), { name: ENC_KDF }, false, ['deriveKey']);
53
- return crypto.subtle.deriveKey({ name: ENC_KDF, salt: salt, iterations: getIterations(), hash: ENC_HASH }, passKey, { name: ENC_ALG, length: 256 }, false, ['encrypt', 'decrypt']);
54
- }
55
- //# sourceMappingURL=encryption.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/encryption.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- export declare function encMnemonic(mnemonic: string, pass: string): Promise<{
2
- salt: string;
3
- iv: string;
4
- data: string;
5
- }>;
6
- export declare function decMnemonic(blob: {
7
- salt: string;
8
- iv: string;
9
- data: string;
10
- }, pass: string): Promise<string>;