@push.rocks/smartsecret 1.4.0 → 1.5.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/.smartconfig.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "githost": "code.foss.global",
14
14
  "gitscope": "push.rocks",
15
15
  "gitrepo": "smartsecret",
16
- "description": "OS-backed secret storage plus strict Linux kernel-keyring and envelope APIs for Node.js.",
16
+ "description": "OS-backed secret storage plus strict Linux kernel-keyring, sealed-file, and envelope APIs for Node.js.",
17
17
  "npmPackagename": "@push.rocks/smartsecret",
18
18
  "license": "MIT"
19
19
  },
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartsecret',
6
- version: '1.4.0',
7
- description: 'OS-backed secret storage plus strict Linux kernel-keyring and envelope APIs for Node.js.'
6
+ version: '1.5.0',
7
+ description: 'OS-backed secret storage plus strict Linux kernel-keyring, sealed-file, and envelope APIs for Node.js.'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDBGQUEwRjtDQUN4RyxDQUFBIn0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHdHQUF3RztDQUN0SCxDQUFBIn0=
@@ -10,3 +10,6 @@ export type { ISmartSecretEnvelopeV1, TSmartSecretKeyringProfile, } from './smar
10
10
  export * from './smartsecret.kernelstore.js';
11
11
  export { SmartSecretKernelStoreError } from './smartsecret.kernel.error.js';
12
12
  export type { ISmartSecretKernelStoreErrorJson, TSmartSecretKernelStoreErrorCode, } from './smartsecret.kernel.error.js';
13
+ export * from './smartsecret.sealedfile.js';
14
+ export { SmartSecretSealedFileStoreError } from './smartsecret.sealedfile.error.js';
15
+ export type { ISmartSecretSealedFileStoreErrorJson, TSmartSecretSealedFileStoreErrorCode, } from './smartsecret.sealedfile.error.js';
package/dist_ts/index.js CHANGED
@@ -6,4 +6,6 @@ export * from './smartsecret.keyring.js';
6
6
  export { SmartSecretKeyringError } from './smartsecret.keyring.error.js';
7
7
  export * from './smartsecret.kernelstore.js';
8
8
  export { SmartSecretKernelStoreError } from './smartsecret.kernel.error.js';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFTekUsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQyJ9
9
+ export * from './smartsecret.sealedfile.js';
10
+ export { SmartSecretSealedFileStoreError } from './smartsecret.sealedfile.error.js';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFTekUsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUs1RSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDIn0=
@@ -0,0 +1,40 @@
1
+ import { type ISmartSecretKernelOperationOptions } from './smartsecret.kernel.protocol.js';
2
+ export declare const smartSecretSealedFileMaximumEntryBytes: number;
3
+ export interface ISmartSecretSealedFileKernelStore {
4
+ readonly service: string;
5
+ getEntry(accountArg: string, optionsArg?: ISmartSecretKernelOperationOptions): Promise<Uint8Array | null>;
6
+ setEntry(accountArg: string, valueArg: Uint8Array, optionsArg?: ISmartSecretKernelOperationOptions): Promise<void>;
7
+ deleteEntry(accountArg: string, optionsArg?: ISmartSecretKernelOperationOptions): Promise<boolean>;
8
+ }
9
+ export interface ISmartSecretSealedFileStoreOptions {
10
+ kernelStore: ISmartSecretSealedFileKernelStore;
11
+ storeId: string;
12
+ directoryPath: string;
13
+ }
14
+ /**
15
+ * Stores one small master key in a strict kernel store and authenticated
16
+ * ciphertext in a caller-owned private directory. The kernel store lifecycle
17
+ * remains owned by the caller.
18
+ */
19
+ export declare class SmartSecretSealedFileStore {
20
+ private readonly options;
21
+ private readonly masterKey;
22
+ readonly service: string;
23
+ readonly storeId: string;
24
+ readonly directoryPath: string;
25
+ private lifecycleState;
26
+ private operationTail;
27
+ private pendingOperations;
28
+ private closePromise?;
29
+ private constructor();
30
+ static create(optionsArg: ISmartSecretSealedFileStoreOptions): Promise<SmartSecretSealedFileStore>;
31
+ /** Explicitly discards this store's ciphertext and kernel master key. */
32
+ static reset(optionsArg: ISmartSecretSealedFileStoreOptions): Promise<SmartSecretSealedFileStore>;
33
+ getEntry(accountArg: string): Promise<Uint8Array | null>;
34
+ setEntry(accountArg: string, valueArg: Uint8Array): Promise<void>;
35
+ deleteEntry(accountArg: string): Promise<boolean>;
36
+ close(): Promise<void>;
37
+ private reserveOperation;
38
+ private withLease;
39
+ private verifyManifest;
40
+ }
@@ -0,0 +1,17 @@
1
+ export type TSmartSecretSealedFileStoreErrorCode = 'AUTHENTICATION_FAILED' | 'ENVELOPE_INVALID' | 'FILESYSTEM_FAILED' | 'INVALID_ARGUMENT' | 'KERNEL_UNAVAILABLE' | 'MASTER_KEY_CONFLICT' | 'MASTER_KEY_UNAVAILABLE' | 'MUTATION_OUTCOME_UNKNOWN' | 'MUTEX_FAILED' | 'OPERATION_LIMIT_REACHED' | 'SIZE_LIMIT_EXCEEDED' | 'STORE_CLOSED';
2
+ export interface ISmartSecretSealedFileStoreErrorJson {
3
+ name: 'SmartSecretSealedFileStoreError';
4
+ code: TSmartSecretSealedFileStoreErrorCode;
5
+ message: string;
6
+ }
7
+ declare const inspectSymbol: unique symbol;
8
+ /** A code-only error that intentionally retains no secret values or causes. */
9
+ export declare class SmartSecretSealedFileStoreError extends Error {
10
+ readonly code: TSmartSecretSealedFileStoreErrorCode;
11
+ readonly cause: undefined;
12
+ constructor(codeArg: TSmartSecretSealedFileStoreErrorCode);
13
+ toJSON(): ISmartSecretSealedFileStoreErrorJson;
14
+ [inspectSymbol](): ISmartSecretSealedFileStoreErrorJson;
15
+ }
16
+ export declare const createSmartSecretSealedFileStoreError: (codeArg: TSmartSecretSealedFileStoreErrorCode) => SmartSecretSealedFileStoreError;
17
+ export {};
@@ -0,0 +1,44 @@
1
+ const inspectSymbol = Symbol.for('nodejs.util.inspect.custom');
2
+ const errorCodes = new Set([
3
+ 'AUTHENTICATION_FAILED',
4
+ 'ENVELOPE_INVALID',
5
+ 'FILESYSTEM_FAILED',
6
+ 'INVALID_ARGUMENT',
7
+ 'KERNEL_UNAVAILABLE',
8
+ 'MASTER_KEY_CONFLICT',
9
+ 'MASTER_KEY_UNAVAILABLE',
10
+ 'MUTATION_OUTCOME_UNKNOWN',
11
+ 'MUTEX_FAILED',
12
+ 'OPERATION_LIMIT_REACHED',
13
+ 'SIZE_LIMIT_EXCEEDED',
14
+ 'STORE_CLOSED',
15
+ ]);
16
+ /** A code-only error that intentionally retains no secret values or causes. */
17
+ export class SmartSecretSealedFileStoreError extends Error {
18
+ constructor(codeArg) {
19
+ const code = errorCodes.has(codeArg) ? codeArg : 'INVALID_ARGUMENT';
20
+ const message = `SmartSecret sealed file store operation failed (${code}).`;
21
+ super(message);
22
+ this.name = 'SmartSecretSealedFileStoreError';
23
+ this.code = code;
24
+ this.stack = `${this.name}: ${message}`;
25
+ Object.defineProperty(this, 'cause', {
26
+ configurable: false,
27
+ enumerable: false,
28
+ value: undefined,
29
+ writable: false,
30
+ });
31
+ }
32
+ toJSON() {
33
+ return {
34
+ name: 'SmartSecretSealedFileStoreError',
35
+ code: this.code,
36
+ message: this.message,
37
+ };
38
+ }
39
+ [inspectSymbol]() {
40
+ return this.toJSON();
41
+ }
42
+ }
43
+ export const createSmartSecretSealedFileStoreError = (codeArg) => new SmartSecretSealedFileStoreError(codeArg);
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzZWNyZXQuc2VhbGVkZmlsZS5lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c2VjcmV0LnNlYWxlZGZpbGUuZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0JBLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBdUM7SUFDL0QsdUJBQXVCO0lBQ3ZCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsd0JBQXdCO0lBQ3hCLDBCQUEwQjtJQUMxQixjQUFjO0lBQ2QseUJBQXlCO0lBQ3pCLHFCQUFxQjtJQUNyQixjQUFjO0NBQ2YsQ0FBQyxDQUFDO0FBRUgsK0VBQStFO0FBQy9FLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxLQUFLO0lBSXhELFlBQVksT0FBNkM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUNwRSxNQUFNLE9BQU8sR0FBRyxtREFBbUQsSUFBSSxJQUFJLENBQUM7UUFDNUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxpQ0FBaUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN4QyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7WUFDbkMsWUFBWSxFQUFFLEtBQUs7WUFDbkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPO1lBQ0wsSUFBSSxFQUFFLGlDQUFpQztZQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFTSxDQUFDLGFBQWEsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxDQUNuRCxPQUE2QyxFQUNaLEVBQUUsQ0FBQyxJQUFJLCtCQUErQixDQUFDLE9BQU8sQ0FBQyxDQUFDIn0=