@push.rocks/smartsecret 1.1.0 → 1.2.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.
package/.smartconfig.json CHANGED
@@ -1,4 +1,11 @@
1
1
  {
2
+ "@git.zone/tsrust": {
3
+ "targets": [
4
+ "linux_amd64"
5
+ ],
6
+ "static": true,
7
+ "remapLocalPaths": true
8
+ },
2
9
  "@git.zone/cli": {
3
10
  "schemaVersion": 2,
4
11
  "projectType": "npm",
@@ -6,7 +13,7 @@
6
13
  "githost": "code.foss.global",
7
14
  "gitscope": "push.rocks",
8
15
  "gitrepo": "smartsecret",
9
- "description": "OS keychain-based secret storage with encrypted-file fallback for Node.js.",
16
+ "description": "OS-backed secret storage plus strict Linux kernel-keyring and envelope APIs for Node.js.",
10
17
  "npmPackagename": "@push.rocks/smartsecret",
11
18
  "license": "MIT"
12
19
  },
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartsecret',
6
- version: '1.1.0',
7
- description: 'OS keychain-based secret storage with encrypted-file fallback for Node.js.'
6
+ version: '1.2.1',
7
+ description: 'OS-backed secret storage plus strict Linux kernel-keyring and envelope APIs for Node.js.'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDRFQUE0RTtDQUMxRixDQUFBIn0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDBGQUEwRjtDQUN4RyxDQUFBIn0=
@@ -7,3 +7,6 @@ export * from './smartsecret.keyring.js';
7
7
  export { SmartSecretKeyringError } from './smartsecret.keyring.error.js';
8
8
  export type { ISmartSecretKeyringErrorJson, TSmartSecretKeyringErrorCode, } from './smartsecret.keyring.error.js';
9
9
  export type { ISmartSecretEnvelopeV1, TSmartSecretKeyringProfile, } from './smartsecret.keyring.protocol.js';
10
+ export * from './smartsecret.kernelstore.js';
11
+ export { SmartSecretKernelStoreError } from './smartsecret.kernel.error.js';
12
+ export type { ISmartSecretKernelStoreErrorJson, TSmartSecretKernelStoreErrorCode, } from './smartsecret.kernel.error.js';
package/dist_ts/index.js CHANGED
@@ -4,4 +4,6 @@ export { LinuxSecretServiceBackend } from './smartsecret.backends.linux.js';
4
4
  export { FileEncryptedBackend } from './smartsecret.backends.file.js';
5
5
  export * from './smartsecret.keyring.js';
6
6
  export { SmartSecretKeyringError } from './smartsecret.keyring.error.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUMifQ==
7
+ export * from './smartsecret.kernelstore.js';
8
+ export { SmartSecretKernelStoreError } from './smartsecret.kernel.error.js';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFTekUsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQyJ9
@@ -0,0 +1,17 @@
1
+ export type TSmartSecretKernelStoreErrorCode = 'ENTRY_CORRUPT' | 'INVALID_ARGUMENT' | 'KERNEL_UNAVAILABLE' | 'MUTATION_OUTCOME_UNKNOWN' | 'MUTEX_FAILED' | 'OPERATION_ABORTED' | 'OPERATION_TIMEOUT' | 'RECEIPT_INVALID' | 'ROOT_CONFLICT' | 'SOURCE_CHANGED' | 'STORE_CLOSED' | 'STORE_POISONED' | 'UNSUPPORTED_RUNTIME' | 'WORKER_INTEGRITY_FAILED' | 'WORKER_UNAVAILABLE';
2
+ export interface ISmartSecretKernelStoreErrorJson {
3
+ name: 'SmartSecretKernelStoreError';
4
+ code: TSmartSecretKernelStoreErrorCode;
5
+ message: string;
6
+ }
7
+ declare const inspectSymbol: unique symbol;
8
+ /** A code-only error that intentionally retains no operation values or causes. */
9
+ export declare class SmartSecretKernelStoreError extends Error {
10
+ readonly code: TSmartSecretKernelStoreErrorCode;
11
+ readonly cause: undefined;
12
+ constructor(codeArg: TSmartSecretKernelStoreErrorCode);
13
+ toJSON(): ISmartSecretKernelStoreErrorJson;
14
+ [inspectSymbol](): ISmartSecretKernelStoreErrorJson;
15
+ }
16
+ export declare const createSmartSecretKernelStoreError: (codeArg: TSmartSecretKernelStoreErrorCode) => SmartSecretKernelStoreError;
17
+ export {};
@@ -0,0 +1,47 @@
1
+ const inspectSymbol = Symbol.for('nodejs.util.inspect.custom');
2
+ const errorCodes = new Set([
3
+ 'ENTRY_CORRUPT',
4
+ 'INVALID_ARGUMENT',
5
+ 'KERNEL_UNAVAILABLE',
6
+ 'MUTATION_OUTCOME_UNKNOWN',
7
+ 'MUTEX_FAILED',
8
+ 'OPERATION_ABORTED',
9
+ 'OPERATION_TIMEOUT',
10
+ 'RECEIPT_INVALID',
11
+ 'ROOT_CONFLICT',
12
+ 'SOURCE_CHANGED',
13
+ 'STORE_CLOSED',
14
+ 'STORE_POISONED',
15
+ 'UNSUPPORTED_RUNTIME',
16
+ 'WORKER_INTEGRITY_FAILED',
17
+ 'WORKER_UNAVAILABLE',
18
+ ]);
19
+ /** A code-only error that intentionally retains no operation values or causes. */
20
+ export class SmartSecretKernelStoreError extends Error {
21
+ constructor(codeArg) {
22
+ const code = errorCodes.has(codeArg) ? codeArg : 'INVALID_ARGUMENT';
23
+ const message = `SmartSecret kernel store operation failed (${code}).`;
24
+ super(message);
25
+ this.name = 'SmartSecretKernelStoreError';
26
+ this.code = code;
27
+ this.stack = `${this.name}: ${message}`;
28
+ Object.defineProperty(this, 'cause', {
29
+ configurable: false,
30
+ enumerable: false,
31
+ value: undefined,
32
+ writable: false,
33
+ });
34
+ }
35
+ toJSON() {
36
+ return {
37
+ name: 'SmartSecretKernelStoreError',
38
+ code: this.code,
39
+ message: this.message,
40
+ };
41
+ }
42
+ [inspectSymbol]() {
43
+ return this.toJSON();
44
+ }
45
+ }
46
+ export const createSmartSecretKernelStoreError = (codeArg) => new SmartSecretKernelStoreError(codeArg);
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzZWNyZXQua2VybmVsLmVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzZWNyZXQua2VybmVsLmVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVCQSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDL0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQW1DO0lBQzNELGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsb0JBQW9CO0lBQ3BCLDBCQUEwQjtJQUMxQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLHFCQUFxQjtJQUNyQix5QkFBeUI7SUFDekIsb0JBQW9CO0NBQ3JCLENBQUMsQ0FBQztBQUVILGtGQUFrRjtBQUNsRixNQUFNLE9BQU8sMkJBQTRCLFNBQVEsS0FBSztJQUlwRCxZQUFZLE9BQXlDO1FBQ25ELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7UUFDcEUsTUFBTSxPQUFPLEdBQUcsOENBQThDLElBQUksSUFBSSxDQUFDO1FBQ3ZFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsNkJBQTZCLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDeEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ25DLFlBQVksRUFBRSxLQUFLO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLEtBQUssRUFBRSxTQUFTO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTztZQUNMLElBQUksRUFBRSw2QkFBNkI7WUFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRU0sQ0FBQyxhQUFhLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsQ0FDL0MsT0FBeUMsRUFDWixFQUFFLENBQUMsSUFBSSwyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyJ9
@@ -0,0 +1,159 @@
1
+ export declare const smartSecretKernelDefaultTimeoutMs = 5000;
2
+ export declare const smartSecretKernelMaximumTimeoutMs = 60000;
3
+ export declare const smartSecretKernelMaximumEntryBytes = 1024;
4
+ export declare const smartSecretKernelMaximumLegacyBytes: number;
5
+ export declare const smartSecretKernelMaximumMessageBytes: number;
6
+ export declare const smartSecretKernelLegacyService = "global.idp.devidp";
7
+ export type TSmartSecretKernelDomainErrorCode = 'ENTRY_CORRUPT' | 'INVALID_REQUEST' | 'KERNEL_UNAVAILABLE' | 'MUTATION_OUTCOME_UNKNOWN' | 'ROOT_CONFLICT' | 'SOURCE_CHANGED';
8
+ export interface ISmartSecretKernelDomainErrorResult {
9
+ outcome: 'domainError';
10
+ code: TSmartSecretKernelDomainErrorCode;
11
+ }
12
+ export interface ISmartSecretKernelOperationOptions {
13
+ timeoutMs?: number;
14
+ signal?: AbortSignal;
15
+ }
16
+ export interface ISmartSecretKernelStoreOptions {
17
+ service: string;
18
+ }
19
+ export interface INormalizedSmartSecretKernelOperationOptions {
20
+ timeoutMs: number;
21
+ signal?: AbortSignal;
22
+ }
23
+ export interface ISmartSecretKernelGetSuccessAbsent {
24
+ outcome: 'success';
25
+ found: false;
26
+ }
27
+ export interface ISmartSecretKernelGetSuccessPresent {
28
+ outcome: 'success';
29
+ found: true;
30
+ value: string;
31
+ }
32
+ export type TSmartSecretKernelGetResult = ISmartSecretKernelDomainErrorResult | ISmartSecretKernelGetSuccessAbsent | ISmartSecretKernelGetSuccessPresent;
33
+ export interface ISmartSecretKernelMutationSuccess {
34
+ outcome: 'success';
35
+ }
36
+ export type TSmartSecretKernelSetResult = ISmartSecretKernelDomainErrorResult | ISmartSecretKernelMutationSuccess;
37
+ export interface ISmartSecretKernelDeleteSuccess {
38
+ outcome: 'success';
39
+ deleted: boolean;
40
+ }
41
+ export type TSmartSecretKernelDeleteResult = ISmartSecretKernelDomainErrorResult | ISmartSecretKernelDeleteSuccess;
42
+ export interface ISmartSecretKernelLegacySuccessAbsent {
43
+ outcome: 'success';
44
+ found: false;
45
+ }
46
+ export interface ISmartSecretKernelLegacySuccessPresent {
47
+ outcome: 'success';
48
+ found: true;
49
+ value: string;
50
+ sourceSerial: number;
51
+ sessionRootSerial: number | null;
52
+ persistentRootSerial: number;
53
+ foundInSession: boolean;
54
+ foundInPersistent: boolean;
55
+ byteLength: number;
56
+ sha256: string;
57
+ }
58
+ export type TSmartSecretKernelLegacyReadResult = ISmartSecretKernelDomainErrorResult | ISmartSecretKernelLegacySuccessAbsent | ISmartSecretKernelLegacySuccessPresent;
59
+ export interface ISmartSecretKernelLegacyDeleteSuccess {
60
+ outcome: 'success';
61
+ status: 'deleted' | 'alreadyAbsent';
62
+ }
63
+ export type TSmartSecretKernelLegacyDeleteResult = ISmartSecretKernelDomainErrorResult | ISmartSecretKernelLegacyDeleteSuccess;
64
+ export interface ISmartSecretKernelLegacyDeleteParams {
65
+ account: string;
66
+ sourceSerial: number;
67
+ sessionRootSerial: number | null;
68
+ persistentRootSerial: number;
69
+ foundInSession: boolean;
70
+ foundInPersistent: boolean;
71
+ byteLength: number;
72
+ sha256: string;
73
+ }
74
+ export type TSmartSecretKernelCommands = {
75
+ getEntry: {
76
+ params: {
77
+ description: string;
78
+ };
79
+ result: TSmartSecretKernelGetResult;
80
+ };
81
+ setEntry: {
82
+ params: {
83
+ description: string;
84
+ value: string;
85
+ };
86
+ result: TSmartSecretKernelSetResult;
87
+ };
88
+ deleteEntry: {
89
+ params: {
90
+ description: string;
91
+ };
92
+ result: TSmartSecretKernelDeleteResult;
93
+ };
94
+ readDevIdpV1Legacy: {
95
+ params: {
96
+ account: string;
97
+ };
98
+ result: TSmartSecretKernelLegacyReadResult;
99
+ };
100
+ deleteDevIdpV1Legacy: {
101
+ params: ISmartSecretKernelLegacyDeleteParams;
102
+ result: TSmartSecretKernelLegacyDeleteResult;
103
+ };
104
+ };
105
+ export declare const normalizeSmartSecretKernelService: (valueArg: unknown) => string;
106
+ export declare const normalizeSmartSecretKernelStoreOptions: (valueArg: unknown) => ISmartSecretKernelStoreOptions;
107
+ export declare const normalizeSmartSecretKernelAccount: (valueArg: unknown) => string;
108
+ export declare const normalizeDevIdpV1LegacyAccount: (valueArg: unknown) => string;
109
+ export declare const deriveSmartSecretKernelServiceDescription: (serviceArg: string) => string;
110
+ export declare const deriveSmartSecretKernelEntryDescription: (serviceArg: string, accountArg: string) => string;
111
+ export declare const deriveSmartSecretKernelMutexNamespace: (serviceArg: string) => string;
112
+ export declare const deriveDevIdpV1LegacyDescription: (accountArg: string) => string;
113
+ export declare const normalizeSmartSecretKernelValue: (valueArg: unknown) => Uint8Array;
114
+ export declare const encodeCanonicalBase64Url: (valueArg: Uint8Array) => string;
115
+ export declare const normalizeSmartSecretKernelOperationOptions: (valueArg: ISmartSecretKernelOperationOptions | undefined) => INormalizedSmartSecretKernelOperationOptions;
116
+ export declare const parseSmartSecretKernelGetResult: (valueArg: unknown) => {
117
+ kind: "domainError";
118
+ domainError: ISmartSecretKernelDomainErrorResult;
119
+ } | {
120
+ kind: "success";
121
+ found: false;
122
+ } | {
123
+ kind: "success";
124
+ found: true;
125
+ value: Uint8Array;
126
+ };
127
+ export declare const parseSmartSecretKernelSetResult: (valueArg: unknown) => {
128
+ kind: "domainError";
129
+ domainError: ISmartSecretKernelDomainErrorResult;
130
+ } | {
131
+ kind: "success";
132
+ };
133
+ export declare const parseSmartSecretKernelDeleteResult: (valueArg: unknown) => {
134
+ kind: "domainError";
135
+ domainError: ISmartSecretKernelDomainErrorResult;
136
+ } | {
137
+ kind: "success";
138
+ deleted: boolean;
139
+ };
140
+ export type TParsedSmartSecretKernelLegacyRead = {
141
+ kind: 'domainError';
142
+ domainError: ISmartSecretKernelDomainErrorResult;
143
+ } | {
144
+ kind: 'success';
145
+ found: false;
146
+ } | {
147
+ kind: 'success';
148
+ found: true;
149
+ value: Uint8Array;
150
+ receiptParams: ISmartSecretKernelLegacyDeleteParams;
151
+ };
152
+ export declare const parseSmartSecretKernelLegacyReadResult: (valueArg: unknown, accountArg: string) => TParsedSmartSecretKernelLegacyRead;
153
+ export declare const parseSmartSecretKernelLegacyDeleteResult: (valueArg: unknown) => {
154
+ kind: "domainError";
155
+ domainError: ISmartSecretKernelDomainErrorResult;
156
+ } | {
157
+ kind: "success";
158
+ status: "deleted" | "alreadyAbsent";
159
+ };