@shellicar/core-config 0.1.0 → 1.0.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/README.md +14 -126
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +62 -6
- package/dist/index.d.ts +62 -6
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/CHANGELOG.md +0 -7
- package/dist/SecureConnectionString.cjs +0 -1
- package/dist/SecureConnectionString.cjs.map +0 -1
- package/dist/SecureConnectionString.d.cts +0 -16
- package/dist/SecureConnectionString.d.ts +0 -16
- package/dist/SecureConnectionString.js +0 -1
- package/dist/SecureConnectionString.js.map +0 -1
- package/dist/SecureString.cjs +0 -1
- package/dist/SecureString.cjs.map +0 -1
- package/dist/SecureString.d.cts +0 -15
- package/dist/SecureString.d.ts +0 -15
- package/dist/SecureString.js +0 -1
- package/dist/SecureString.js.map +0 -1
- package/dist/SecureURL.cjs +0 -1
- package/dist/SecureURL.cjs.map +0 -1
- package/dist/SecureURL.d.cts +0 -18
- package/dist/SecureURL.d.ts +0 -18
- package/dist/SecureURL.js +0 -1
- package/dist/SecureURL.js.map +0 -1
- package/dist/chunk-3GMWIOOZ.cjs +0 -1
- package/dist/chunk-3GMWIOOZ.cjs.map +0 -1
- package/dist/chunk-5UKICLVE.cjs +0 -1
- package/dist/chunk-5UKICLVE.cjs.map +0 -1
- package/dist/chunk-7QVYU63E.js +0 -1
- package/dist/chunk-7QVYU63E.js.map +0 -1
- package/dist/chunk-EQYTBWBL.js +0 -1
- package/dist/chunk-EQYTBWBL.js.map +0 -1
- package/dist/chunk-HK6ZXU7J.js +0 -1
- package/dist/chunk-HK6ZXU7J.js.map +0 -1
- package/dist/chunk-M2AZ3CIA.cjs +0 -1
- package/dist/chunk-M2AZ3CIA.cjs.map +0 -1
- package/dist/chunk-MA2X5MES.cjs +0 -1
- package/dist/chunk-MA2X5MES.cjs.map +0 -1
- package/dist/chunk-PK6SKIKE.cjs +0 -1
- package/dist/chunk-PK6SKIKE.cjs.map +0 -1
- package/dist/chunk-RBCLW5Z3.js +0 -1
- package/dist/chunk-RBCLW5Z3.js.map +0 -1
- package/dist/chunk-SAA2XVPV.js +0 -1
- package/dist/chunk-SAA2XVPV.js.map +0 -1
- package/dist/chunk-W5TZC6JS.cjs +0 -1
- package/dist/chunk-W5TZC6JS.cjs.map +0 -1
- package/dist/chunk-WO3QMJL2.js +0 -1
- package/dist/chunk-WO3QMJL2.js.map +0 -1
- package/dist/chunk-XHBKWGZG.js +0 -1
- package/dist/chunk-XHBKWGZG.js.map +0 -1
- package/dist/chunk-Z4KAMDJN.cjs +0 -1
- package/dist/chunk-Z4KAMDJN.cjs.map +0 -1
- package/dist/defaults.cjs +0 -1
- package/dist/defaults.cjs.map +0 -1
- package/dist/defaults.d.cts +0 -3
- package/dist/defaults.d.ts +0 -3
- package/dist/defaults.js +0 -1
- package/dist/defaults.js.map +0 -1
- package/dist/sha256.cjs +0 -1
- package/dist/sha256.cjs.map +0 -1
- package/dist/sha256.d.cts +0 -3
- package/dist/sha256.d.ts +0 -3
- package/dist/sha256.js +0 -1
- package/dist/sha256.js.map +0 -1
- package/dist/types.cjs +0 -1
- package/dist/types.cjs.map +0 -1
- package/dist/types.d.cts +0 -10
- package/dist/types.d.ts +0 -10
- package/dist/types.js +0 -1
- package/dist/types.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,140 +1,28 @@
|
|
|
1
1
|
# @shellicar/core-config
|
|
2
2
|
|
|
3
|
-
A library for securely handling sensitive configuration values like connection strings, URLs, and secrets.
|
|
3
|
+
> A library for securely handling sensitive configuration values like connection strings, URLs, and secrets.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://npmjs.com/package/@shellicar/core-config)
|
|
6
|
+
[](https://github.com/shellicar/core-config/actions/workflows/node.js.yml)
|
|
6
7
|
|
|
7
|
-
##
|
|
8
|
-
|
|
9
|
-
### Core Libraries
|
|
10
|
-
|
|
11
|
-
- [`@shellicar/core-config`](https://github.com/shellicar/core-config) - A library for securely handling sensitive configuration values like connection strings, URLs, and secrets.
|
|
12
|
-
- [`@shellicar/core-di`](https://github.com/shellicar/core-di) - A basic dependency injection library.
|
|
13
|
-
- [`@shellicar/core-foundation`](https://github.com/shellicar/core-foundation) - A comprehensive starter repository.
|
|
14
|
-
|
|
15
|
-
### Build Tools
|
|
16
|
-
|
|
17
|
-
- [`@shellicar/build-version`](https://github.com/shellicar/build-version) - Build plugin that calculates and exposes version information through a virtual module import.
|
|
18
|
-
- [`@shellicar/build-graphql`](https://github.com/shellicar/build-graphql) - Build plugin that loads GraphQL files and makes them available through a virtual module import.
|
|
19
|
-
|
|
20
|
-
### Framework Adapters
|
|
21
|
-
|
|
22
|
-
- [`@shellicar/svelte-adapter-azure-functions`](https://github.com/shellicar/svelte-adapter-azure-functions) - A [SvelteKit adapter](https://kit.svelte.dev/docs/adapters) that builds your app into an Azure Function.
|
|
23
|
-
|
|
24
|
-
### Logging & Monitoring
|
|
25
|
-
|
|
26
|
-
- [`@shellicar/winston-azure-application-insights`](https://github.com/shellicar/winston-azure-application-insights) - An [Azure Application Insights](https://azure.microsoft.com/en-us/services/application-insights/) transport for [Winston](https://github.com/winstonjs/winston) logging library.
|
|
27
|
-
- [`@shellicar/pino-applicationinsights-transport`](https://github.com/shellicar/pino-applicationinsights-transport) - [Azure Application Insights](https://azure.microsoft.com/en-us/services/application-insights) transport for [pino](https://github.com/pinojs/pino)
|
|
28
|
-
|
|
29
|
-
<!-- END_ECOSYSTEM -->
|
|
30
|
-
|
|
31
|
-
## Features
|
|
32
|
-
|
|
33
|
-
- 🔐 **SecureString** - Safely handle sensitive string values with automatic hashing for logs and serialization
|
|
34
|
-
- 🔗 **SecureConnectionString** - Parse and protect connection strings with configurable secret key detection
|
|
35
|
-
- 🌐 **SecureURL** - Handle URLs while protecting sensitive components like passwords
|
|
36
|
-
|
|
37
|
-
## Usage
|
|
8
|
+
## Installation & Quick Start
|
|
38
9
|
|
|
39
10
|
```sh
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### SecureString
|
|
44
|
-
|
|
45
|
-
Securely handle sensitive string values:
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
import { SecureString } from '@shellicar/core-config';
|
|
49
|
-
|
|
50
|
-
const secret = SecureString.from('myPassword123');
|
|
51
|
-
|
|
52
|
-
console.log(secret.toString());
|
|
53
|
-
// sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716
|
|
54
|
-
|
|
55
|
-
console.log(JSON.stringify({ secret }));
|
|
56
|
-
// {"secret":"sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716"}
|
|
11
|
+
npm i --save @shellicar/core-config
|
|
57
12
|
```
|
|
58
13
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
Handle connection strings with automatic secret protection:
|
|
62
|
-
|
|
63
|
-
```typescript
|
|
64
|
-
import { SecureConnectionString } from '@shellicar/core-config';
|
|
65
|
-
|
|
66
|
-
const conn = SecureConnectionString.from('Server=myserver;Password=myPassword123');
|
|
67
|
-
console.log(conn.toString());
|
|
68
|
-
// Server=myserver;Password=sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716
|
|
69
|
-
|
|
70
|
-
// Custom secret keys
|
|
71
|
-
console.log(SecureConnectionString.from('Server=myserver;SuperSecretKey=myPassword123', 'SuperSecretKey'));
|
|
72
|
-
// {
|
|
73
|
-
// Server: 'myserver',
|
|
74
|
-
// SuperSecretKey: 'sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716'
|
|
75
|
-
// }
|
|
14
|
+
```sh
|
|
15
|
+
pnpm add @shellicar/core-config
|
|
76
16
|
```
|
|
77
17
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
Safely handle URLs containing sensitive information:
|
|
18
|
+
```ts
|
|
19
|
+
import { SecureString, SecureConnectionString, SecureURL } from '@shellicar/core-config';
|
|
81
20
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const url = new URL('https://user:myPassword123@example.com?key=value');
|
|
86
|
-
const secureUrl = SecureURL.from(url);
|
|
87
|
-
|
|
88
|
-
console.log(secureUrl.toString());
|
|
89
|
-
// https://user:sha256%3A71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716@example.com/?key=value
|
|
90
|
-
|
|
91
|
-
console.log(secureUrl);
|
|
92
|
-
// {
|
|
93
|
-
// href: 'https://user@example.com/',
|
|
94
|
-
// password: 'sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716',
|
|
95
|
-
// searchParams: { key: 'value' }
|
|
96
|
-
// }
|
|
21
|
+
console.log(SecureString.from('myPassword123'));
|
|
22
|
+
console.log(SecureConnectionString.from('Server=myserver.uri;Password=myPassword123'));
|
|
23
|
+
console.log(SecureURL.from(new URL('http://myuser:myPassword123@myserver.uri')));
|
|
97
24
|
```
|
|
98
25
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
For a list of default secure keys for connection strings, see [defaults.ts](./packages/core-config/src/defaults.ts).
|
|
102
|
-
|
|
103
|
-
### Secure Output
|
|
104
|
-
|
|
105
|
-
All secure types implement proper toString(), toJSON(), and inspect() methods to ensure sensitive data is never accidentally exposed through logs or serialization.
|
|
106
|
-
|
|
107
|
-
### Real World Example
|
|
108
|
-
|
|
109
|
-
Using with Zod for environment variable validation:
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
import { z } from 'zod';
|
|
113
|
-
import { SecureString, SecureURL, SecureConnectionString } from '@shellicar/core-config';
|
|
114
|
-
|
|
115
|
-
const envSchema = z.object({
|
|
116
|
-
// MongoDB connection string with username/password
|
|
117
|
-
MONGODB_URL: z.string().url().transform(url => SecureURL.from(new URL(url))),
|
|
118
|
-
|
|
119
|
-
// API key for external service
|
|
120
|
-
API_KEY: z.string().min(1).transform(SecureString.from),
|
|
121
|
-
|
|
122
|
-
// SQL Server connection string
|
|
123
|
-
SQL_CONNECTION: z.string().transform(SecureConnectionString.from),
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
// Parse environment variables
|
|
127
|
-
const config = envSchema.parse(process.env);
|
|
128
|
-
|
|
129
|
-
// Values are now strongly typed and secured
|
|
130
|
-
console.log(config.MONGODB_URL.toString());
|
|
131
|
-
// https://myuser@mongodb.example.com/
|
|
132
|
-
|
|
133
|
-
console.log(config.API_KEY.toString());
|
|
134
|
-
// sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716
|
|
135
|
-
|
|
136
|
-
console.log(config.SQL_CONNECTION.toString());
|
|
137
|
-
// Server=myserver;Database=mydb;User Id=admin;Password=sha256:71d4ec...
|
|
138
|
-
```
|
|
26
|
+
## Documentation
|
|
139
27
|
|
|
140
|
-
|
|
28
|
+
For full documentation, visit [here](https://github.com/shellicar/core-config).
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var t=require("util"),e=require("crypto");function r(t){return t&&t.__esModule?t:{default:t}}var s=r(t),a=Object.defineProperty,n=(t,e)=>a(t,"name",{value:e,configurable:!0}),o={sha256:n((()=>({hash:n((t=>e.createHash("sha256").update(t).digest("hex")),"hash"),prefix:"sha256"})),"sha256"),hs256:n((t=>({hash:n((r=>e.createHmac("sha256",t).update(r).digest("hex")),"hash"),prefix:"hs256"})),"hs256")},i=n((t=>void 0===t?o.sha256():o.hs256(t)),"getAlgorithm"),c=n(((t,e)=>{const r=i(e),s=r.hash(t);return`${r.prefix}:${s}`}),"hash"),u=class{static{n(this,"BaseObject")}},h=class t extends u{static{n(this,"SecureString")}#t;#e;get secretValue(){return this.#t}constructor(t,e){super(),this.#t=t,this.#e=c(t,e)}static factory(e){return r=>t.from(r,e)}static from(e,r){return null===e?null:void 0!==e?new t(e,r):void 0}toString(){return this.#e}toJSON(){return this.toString()}[s.default.inspect.custom](t,e,r){if(t<0)return"[SecureString]";const s=Object.assign({},e,{depth:null==e.depth?null:e.depth-1});return r(this.toJSON(),s)}},l=["AccessKey","SharedAccessKey","Password","AccountKey","Secret","SecretKey","ApiKey","Token","Key","MasterKey","PrimaryKey","SecondaryKey"],d=class t extends u{static{n(this,"SecureConnectionString")}#t;#r;get secretValue(){return this.#t}constructor(t,e,r){super(),this.#t=t,this.#r=this.parseConnectionString(t,e.map((t=>t.toLocaleLowerCase())),r)}parseConnectionString(t,e,r){return t.split(";").filter(Boolean).map((t=>{const[s,a]=t.split("="),n=a??"",o=e.includes(s.toLocaleLowerCase())?h.from(n,r):n;return[s,o]}))}static factory(e,r){return s=>t.from(s,r,e)}static from(e,r,s){return null===e?null:void 0!==e?new t(e,r??l,s):void 0}toString(){return this.#r.map((([t,e])=>`${t}=${e}`)).join(";")}toJSON(){return Object.fromEntries(this.#r)}[s.default.inspect.custom](t,e,r){if(t<0)return"[SecureConnectionString]";const s=Object.assign({},e,{depth:null==e.depth?null:e.depth-1});return r(this.toJSON(),s)}},p=class t extends u{static{n(this,"SecureURL")}#t;#s;get secretValue(){return this.#t}constructor(t,e){super(),this.#t=t,this.#s=h.from(t.password||null,e)}static factory(e){return r=>t.from(r,e)}static from(e,r){return null===e?null:void 0!==e?new t(e,r):void 0}toString(){const t=new URL(this.#t.href);return null!==this.#s&&(t.password=this.#s.toString()),t.href}toJSON(){const t=new URL(this.#t.href);t.password="";const e=new URLSearchParams(t.searchParams);let r;t.search="",null!==this.#s&&(r=this.#s.toString());const s={href:t.href};return void 0!==r&&(s.password=r),e.size>0&&(s.searchParams=Object.fromEntries(e)),s}[s.default.inspect.custom](t,e,r){if(t<0)return"[SecureURL]";const s=Object.assign({},e,{depth:null==e.depth?null:e.depth-1});return r(this.toJSON(),s)}},f=n((t=>({string:h.factory(t),connectionString:d.factory(t),url:p.factory(t)})),"createFactory");exports.SecureConnectionString=d,exports.SecureString=h,exports.SecureURL=p,exports.createFactory=f,exports.defaultSecureKeys=l;//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
|
1
|
+
{"version":3,"sources":["../src/hash.ts","../src/types.ts","../src/SecureString.ts","../src/defaults.ts","../src/SecureConnectionString.ts","../src/SecureURL.ts","../src/createFactory.ts"],"names":["createHash","createHmac","hash","util","value"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createHash, createHmac } from 'node:crypto';\n\ntype HashAlgorithm = {\n hash: (x: string) => string;\n prefix: string;\n};\n\nconst algorithms = {\n sha256: () => ({\n hash: (x: string) => createHash('sha256').update(x).digest('hex'),\n prefix: 'sha256',\n }),\n hs256: (secret: string) => ({\n hash: (x: string) => createHmac('sha256', secret).update(x).digest('hex'),\n prefix: 'hs256',\n }),\n} as const;\n\nconst getAlgorithm = (secret?: string): HashAlgorithm => {\n return secret === undefined ? algorithms.sha256() : algorithms.hs256(secret);\n};\n\nexport const hash = (input: string, secret?: string) => {\n const alg = getAlgorithm(secret);\n const hash = alg.hash(input);\n return `${alg.prefix}:${hash}`;\n};\n","import util, { type InspectOptions } from 'node:util';\nimport type { SecureConnectionString } from './SecureConnectionString';\nimport type { SecureString } from './SecureString';\nimport type { SecureURL } from './SecureURL';\n\nexport type InspectFunction = typeof util.inspect;\n\nexport abstract class BaseObject {\n public abstract toString(): string;\n public abstract toJSON(): string | object;\n public abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;\n}\n\nexport type SecureFactory = {\n string: (value: string) => SecureString;\n connectionString: (value: string, secretKeys?: readonly string[]) => SecureConnectionString;\n url: (value: URL) => SecureURL;\n};\n\nexport type SecureKeys = readonly string[];\n","import util, { type InspectOptions } from 'node:util';\nimport { hash } from './hash';\nimport { BaseObject, type InspectFunction } from './types';\n\nexport class SecureString extends BaseObject {\n readonly #value: string;\n readonly #hash: string;\n\n public get secretValue(): string {\n return this.#value;\n }\n\n private constructor(value: string, secret?: string) {\n super();\n this.#value = value;\n this.#hash = hash(value, secret);\n }\n\n static factory(secret: string | undefined): (value: string) => SecureString {\n return (value: string) => SecureString.from(value, secret);\n }\n\n public static from<T extends string | null | undefined>(value: T, secret?: string): T extends string ? SecureString : T {\n if (value === null) {\n return null as T extends string ? SecureString : T;\n }\n if (value === undefined) {\n return undefined as T extends string ? SecureString : T;\n }\n return new SecureString(value, secret) as T extends string ? SecureString : T;\n }\n\n public override toString() {\n return this.#hash;\n }\n public override toJSON() {\n return this.toString();\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureString]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n","import type { SecureKeys } from './types';\n\nexport const defaultSecureKeys = ['AccessKey', 'SharedAccessKey', 'Password', 'AccountKey', 'Secret', 'SecretKey', 'ApiKey', 'Token', 'Key', 'MasterKey', 'PrimaryKey', 'SecondaryKey'] as const satisfies SecureKeys;\n","import util, { type InspectOptions } from 'node:util';\nimport { SecureString } from './SecureString';\nimport { defaultSecureKeys } from './defaults';\nimport { BaseObject, type InspectFunction, type SecureKeys } from './types';\n\nexport class SecureConnectionString extends BaseObject {\n readonly #value: string;\n readonly #data: [string, string | SecureString][];\n\n public get secretValue(): string {\n return this.#value;\n }\n\n private constructor(value: string, secretKeys: SecureKeys, secret: string | undefined) {\n super();\n this.#value = value;\n this.#data = this.parseConnectionString(\n value,\n secretKeys.map((x) => x.toLocaleLowerCase()),\n secret,\n );\n }\n\n private parseConnectionString(value: string, secretKeys: SecureKeys, secret: string | undefined): [string, string | SecureString][] {\n return value\n .split(';')\n .filter(Boolean)\n .map((pair) => {\n const [key, value] = pair.split('=');\n const v = value ?? '';\n const val = secretKeys.includes(key.toLocaleLowerCase()) ? SecureString.from(v, secret) : v;\n return [key, val];\n });\n }\n\n static factory(secret: string | undefined, secretKeys?: SecureKeys): (value: string) => SecureConnectionString {\n return (value: string) => SecureConnectionString.from(value, secretKeys, secret);\n }\n\n public static from<T extends string | null | undefined>(value: T, secretKeys?: SecureKeys, secret?: string): T extends string ? SecureConnectionString : T {\n if (value === null) {\n return null as T extends string ? SecureConnectionString : T;\n }\n if (value === undefined) {\n return undefined as T extends string ? SecureConnectionString : T;\n }\n return new SecureConnectionString(value, secretKeys ?? defaultSecureKeys, secret) as T extends string ? SecureConnectionString : T;\n }\n\n public override toString(): string {\n return this.#data.map(([key, value]) => `${key}=${value}`).join(';');\n }\n\n public override toJSON(): object {\n return Object.fromEntries(this.#data);\n }\n\n public override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureConnectionString]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n","import util, { type InspectOptions } from 'node:util';\nimport { SecureString } from './SecureString';\nimport { BaseObject, type InspectFunction } from './types';\n\ntype UrlObject = {\n href: string;\n password?: string;\n searchParams?: Record<string, string>;\n};\n\n/**\n * SecureURL obfuscates the password from the URL.\n */\nexport class SecureURL extends BaseObject {\n readonly #value: URL;\n readonly #password: SecureString | null;\n\n public get secretValue(): URL {\n return this.#value;\n }\n\n private constructor(value: URL, secret: string | undefined) {\n super();\n this.#value = value;\n this.#password = SecureString.from(value.password || null, secret);\n }\n\n static factory(secret: string | undefined): (value: URL) => SecureURL {\n return (value: URL) => SecureURL.from(value, secret);\n }\n\n public static from<T extends URL | null | undefined>(value: T, secret?: string): T extends URL ? SecureURL : T {\n if (value === null) {\n return null as T extends URL ? SecureURL : T;\n }\n if (value === undefined) {\n return undefined as T extends URL ? SecureURL : T;\n }\n return new SecureURL(value, secret) as T extends URL ? SecureURL : T;\n }\n\n override toString(): string {\n const newUrl = new URL(this.#value.href);\n if (this.#password !== null) {\n newUrl.password = this.#password.toString();\n }\n return newUrl.href;\n }\n\n override toJSON(): UrlObject {\n const newUrl = new URL(this.#value.href);\n newUrl.password = '';\n\n const searchParams = new URLSearchParams(newUrl.searchParams);\n newUrl.search = '';\n\n let password: string | undefined;\n if (this.#password !== null) {\n password = this.#password.toString();\n }\n\n const result: UrlObject = {\n href: newUrl.href,\n };\n if (password !== undefined) {\n result.password = password;\n }\n if (searchParams.size > 0) {\n result.searchParams = Object.fromEntries(searchParams);\n }\n return result;\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureURL]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n","import { SecureConnectionString } from './SecureConnectionString';\nimport { SecureString } from './SecureString';\nimport { SecureURL } from './SecureURL';\nimport type { SecureFactory } from './types';\n\nexport const createFactory = (secret?: string): SecureFactory => {\n return {\n string: SecureString.factory(secret),\n connectionString: SecureConnectionString.factory(secret),\n url: SecureURL.factory(secret),\n };\n};\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import util, { InspectOptions } from 'node:util';
|
|
2
|
+
|
|
3
|
+
declare class SecureString extends BaseObject {
|
|
4
|
+
#private;
|
|
5
|
+
get secretValue(): string;
|
|
6
|
+
private constructor();
|
|
7
|
+
static factory(secret: string | undefined): (value: string) => SecureString;
|
|
8
|
+
static from<T extends string | null | undefined>(value: T, secret?: string): T extends string ? SecureString : T;
|
|
9
|
+
toString(): string;
|
|
10
|
+
toJSON(): string;
|
|
11
|
+
[util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type UrlObject = {
|
|
15
|
+
href: string;
|
|
16
|
+
password?: string;
|
|
17
|
+
searchParams?: Record<string, string>;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* SecureURL obfuscates the password from the URL.
|
|
21
|
+
*/
|
|
22
|
+
declare class SecureURL extends BaseObject {
|
|
23
|
+
#private;
|
|
24
|
+
get secretValue(): URL;
|
|
25
|
+
private constructor();
|
|
26
|
+
static factory(secret: string | undefined): (value: URL) => SecureURL;
|
|
27
|
+
static from<T extends URL | null | undefined>(value: T, secret?: string): T extends URL ? SecureURL : T;
|
|
28
|
+
toString(): string;
|
|
29
|
+
toJSON(): UrlObject;
|
|
30
|
+
[util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type InspectFunction = typeof util.inspect;
|
|
34
|
+
declare abstract class BaseObject {
|
|
35
|
+
abstract toString(): string;
|
|
36
|
+
abstract toJSON(): string | object;
|
|
37
|
+
abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
38
|
+
}
|
|
39
|
+
type SecureFactory = {
|
|
40
|
+
string: (value: string) => SecureString;
|
|
41
|
+
connectionString: (value: string, secretKeys?: readonly string[]) => SecureConnectionString;
|
|
42
|
+
url: (value: URL) => SecureURL;
|
|
43
|
+
};
|
|
44
|
+
type SecureKeys = readonly string[];
|
|
45
|
+
|
|
46
|
+
declare class SecureConnectionString extends BaseObject {
|
|
47
|
+
#private;
|
|
48
|
+
get secretValue(): string;
|
|
49
|
+
private constructor();
|
|
50
|
+
private parseConnectionString;
|
|
51
|
+
static factory(secret: string | undefined, secretKeys?: SecureKeys): (value: string) => SecureConnectionString;
|
|
52
|
+
static from<T extends string | null | undefined>(value: T, secretKeys?: SecureKeys, secret?: string): T extends string ? SecureConnectionString : T;
|
|
53
|
+
toString(): string;
|
|
54
|
+
toJSON(): object;
|
|
55
|
+
[util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
declare const createFactory: (secret?: string) => SecureFactory;
|
|
59
|
+
|
|
60
|
+
declare const defaultSecureKeys: readonly ["AccessKey", "SharedAccessKey", "Password", "AccountKey", "Secret", "SecretKey", "ApiKey", "Token", "Key", "MasterKey", "PrimaryKey", "SecondaryKey"];
|
|
61
|
+
|
|
62
|
+
export { SecureConnectionString, SecureString, SecureURL, createFactory, defaultSecureKeys };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import util, { InspectOptions } from 'node:util';
|
|
2
|
+
|
|
3
|
+
declare class SecureString extends BaseObject {
|
|
4
|
+
#private;
|
|
5
|
+
get secretValue(): string;
|
|
6
|
+
private constructor();
|
|
7
|
+
static factory(secret: string | undefined): (value: string) => SecureString;
|
|
8
|
+
static from<T extends string | null | undefined>(value: T, secret?: string): T extends string ? SecureString : T;
|
|
9
|
+
toString(): string;
|
|
10
|
+
toJSON(): string;
|
|
11
|
+
[util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type UrlObject = {
|
|
15
|
+
href: string;
|
|
16
|
+
password?: string;
|
|
17
|
+
searchParams?: Record<string, string>;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* SecureURL obfuscates the password from the URL.
|
|
21
|
+
*/
|
|
22
|
+
declare class SecureURL extends BaseObject {
|
|
23
|
+
#private;
|
|
24
|
+
get secretValue(): URL;
|
|
25
|
+
private constructor();
|
|
26
|
+
static factory(secret: string | undefined): (value: URL) => SecureURL;
|
|
27
|
+
static from<T extends URL | null | undefined>(value: T, secret?: string): T extends URL ? SecureURL : T;
|
|
28
|
+
toString(): string;
|
|
29
|
+
toJSON(): UrlObject;
|
|
30
|
+
[util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type InspectFunction = typeof util.inspect;
|
|
34
|
+
declare abstract class BaseObject {
|
|
35
|
+
abstract toString(): string;
|
|
36
|
+
abstract toJSON(): string | object;
|
|
37
|
+
abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
38
|
+
}
|
|
39
|
+
type SecureFactory = {
|
|
40
|
+
string: (value: string) => SecureString;
|
|
41
|
+
connectionString: (value: string, secretKeys?: readonly string[]) => SecureConnectionString;
|
|
42
|
+
url: (value: URL) => SecureURL;
|
|
43
|
+
};
|
|
44
|
+
type SecureKeys = readonly string[];
|
|
45
|
+
|
|
46
|
+
declare class SecureConnectionString extends BaseObject {
|
|
47
|
+
#private;
|
|
48
|
+
get secretValue(): string;
|
|
49
|
+
private constructor();
|
|
50
|
+
private parseConnectionString;
|
|
51
|
+
static factory(secret: string | undefined, secretKeys?: SecureKeys): (value: string) => SecureConnectionString;
|
|
52
|
+
static from<T extends string | null | undefined>(value: T, secretKeys?: SecureKeys, secret?: string): T extends string ? SecureConnectionString : T;
|
|
53
|
+
toString(): string;
|
|
54
|
+
toJSON(): object;
|
|
55
|
+
[util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
declare const createFactory: (secret?: string) => SecureFactory;
|
|
59
|
+
|
|
60
|
+
declare const defaultSecureKeys: readonly ["AccessKey", "SharedAccessKey", "Password", "AccountKey", "Secret", "SecretKey", "ApiKey", "Token", "Key", "MasterKey", "PrimaryKey", "SecondaryKey"];
|
|
61
|
+
|
|
62
|
+
export { SecureConnectionString, SecureString, SecureURL, createFactory, defaultSecureKeys };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import t from"node:util";import{createHash as e,createHmac as r}from"node:crypto";var s=Object.defineProperty,n=(t,e)=>s(t,"name",{value:e,configurable:!0}),a={sha256:n((()=>({hash:n((t=>e("sha256").update(t).digest("hex")),"hash"),prefix:"sha256"})),"sha256"),hs256:n((t=>({hash:n((e=>r("sha256",t).update(e).digest("hex")),"hash"),prefix:"hs256"})),"hs256")},o=n((t=>void 0===t?a.sha256():a.hs256(t)),"getAlgorithm"),i=n(((t,e)=>{const r=o(e),s=r.hash(t);return`${r.prefix}:${s}`}),"hash"),c=class{static{n(this,"BaseObject")}},h=class e extends c{static{n(this,"SecureString")}#t;#e;get secretValue(){return this.#t}constructor(t,e){super(),this.#t=t,this.#e=i(t,e)}static factory(t){return r=>e.from(r,t)}static from(t,r){return null===t?null:void 0!==t?new e(t,r):void 0}toString(){return this.#e}toJSON(){return this.toString()}[t.inspect.custom](t,e,r){if(t<0)return"[SecureString]";const s=Object.assign({},e,{depth:null==e.depth?null:e.depth-1});return r(this.toJSON(),s)}},u=["AccessKey","SharedAccessKey","Password","AccountKey","Secret","SecretKey","ApiKey","Token","Key","MasterKey","PrimaryKey","SecondaryKey"],l=class e extends c{static{n(this,"SecureConnectionString")}#t;#r;get secretValue(){return this.#t}constructor(t,e,r){super(),this.#t=t,this.#r=this.parseConnectionString(t,e.map((t=>t.toLocaleLowerCase())),r)}parseConnectionString(t,e,r){return t.split(";").filter(Boolean).map((t=>{const[s,n]=t.split("="),a=n??"",o=e.includes(s.toLocaleLowerCase())?h.from(a,r):a;return[s,o]}))}static factory(t,r){return s=>e.from(s,r,t)}static from(t,r,s){return null===t?null:void 0!==t?new e(t,r??u,s):void 0}toString(){return this.#r.map((([t,e])=>`${t}=${e}`)).join(";")}toJSON(){return Object.fromEntries(this.#r)}[t.inspect.custom](t,e,r){if(t<0)return"[SecureConnectionString]";const s=Object.assign({},e,{depth:null==e.depth?null:e.depth-1});return r(this.toJSON(),s)}},d=class e extends c{static{n(this,"SecureURL")}#t;#s;get secretValue(){return this.#t}constructor(t,e){super(),this.#t=t,this.#s=h.from(t.password||null,e)}static factory(t){return r=>e.from(r,t)}static from(t,r){return null===t?null:void 0!==t?new e(t,r):void 0}toString(){const t=new URL(this.#t.href);return null!==this.#s&&(t.password=this.#s.toString()),t.href}toJSON(){const t=new URL(this.#t.href);t.password="";const e=new URLSearchParams(t.searchParams);let r;t.search="",null!==this.#s&&(r=this.#s.toString());const s={href:t.href};return void 0!==r&&(s.password=r),e.size>0&&(s.searchParams=Object.fromEntries(e)),s}[t.inspect.custom](t,e,r){if(t<0)return"[SecureURL]";const s=Object.assign({},e,{depth:null==e.depth?null:e.depth-1});return r(this.toJSON(),s)}},p=n((t=>({string:h.factory(t),connectionString:l.factory(t),url:d.factory(t)})),"createFactory");export{l as SecureConnectionString,h as SecureString,d as SecureURL,p as createFactory,u as defaultSecureKeys};//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/hash.ts","../src/types.ts","../src/SecureString.ts","../src/defaults.ts","../src/SecureConnectionString.ts","../src/SecureURL.ts","../src/createFactory.ts"],"names":["hash","value","util"],"mappings":"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","file":"index.js","sourcesContent":["import { createHash, createHmac } from 'node:crypto';\n\ntype HashAlgorithm = {\n hash: (x: string) => string;\n prefix: string;\n};\n\nconst algorithms = {\n sha256: () => ({\n hash: (x: string) => createHash('sha256').update(x).digest('hex'),\n prefix: 'sha256',\n }),\n hs256: (secret: string) => ({\n hash: (x: string) => createHmac('sha256', secret).update(x).digest('hex'),\n prefix: 'hs256',\n }),\n} as const;\n\nconst getAlgorithm = (secret?: string): HashAlgorithm => {\n return secret === undefined ? algorithms.sha256() : algorithms.hs256(secret);\n};\n\nexport const hash = (input: string, secret?: string) => {\n const alg = getAlgorithm(secret);\n const hash = alg.hash(input);\n return `${alg.prefix}:${hash}`;\n};\n","import util, { type InspectOptions } from 'node:util';\nimport type { SecureConnectionString } from './SecureConnectionString';\nimport type { SecureString } from './SecureString';\nimport type { SecureURL } from './SecureURL';\n\nexport type InspectFunction = typeof util.inspect;\n\nexport abstract class BaseObject {\n public abstract toString(): string;\n public abstract toJSON(): string | object;\n public abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;\n}\n\nexport type SecureFactory = {\n string: (value: string) => SecureString;\n connectionString: (value: string, secretKeys?: readonly string[]) => SecureConnectionString;\n url: (value: URL) => SecureURL;\n};\n\nexport type SecureKeys = readonly string[];\n","import util, { type InspectOptions } from 'node:util';\nimport { hash } from './hash';\nimport { BaseObject, type InspectFunction } from './types';\n\nexport class SecureString extends BaseObject {\n readonly #value: string;\n readonly #hash: string;\n\n public get secretValue(): string {\n return this.#value;\n }\n\n private constructor(value: string, secret?: string) {\n super();\n this.#value = value;\n this.#hash = hash(value, secret);\n }\n\n static factory(secret: string | undefined): (value: string) => SecureString {\n return (value: string) => SecureString.from(value, secret);\n }\n\n public static from<T extends string | null | undefined>(value: T, secret?: string): T extends string ? SecureString : T {\n if (value === null) {\n return null as T extends string ? SecureString : T;\n }\n if (value === undefined) {\n return undefined as T extends string ? SecureString : T;\n }\n return new SecureString(value, secret) as T extends string ? SecureString : T;\n }\n\n public override toString() {\n return this.#hash;\n }\n public override toJSON() {\n return this.toString();\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureString]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n","import type { SecureKeys } from './types';\n\nexport const defaultSecureKeys = ['AccessKey', 'SharedAccessKey', 'Password', 'AccountKey', 'Secret', 'SecretKey', 'ApiKey', 'Token', 'Key', 'MasterKey', 'PrimaryKey', 'SecondaryKey'] as const satisfies SecureKeys;\n","import util, { type InspectOptions } from 'node:util';\nimport { SecureString } from './SecureString';\nimport { defaultSecureKeys } from './defaults';\nimport { BaseObject, type InspectFunction, type SecureKeys } from './types';\n\nexport class SecureConnectionString extends BaseObject {\n readonly #value: string;\n readonly #data: [string, string | SecureString][];\n\n public get secretValue(): string {\n return this.#value;\n }\n\n private constructor(value: string, secretKeys: SecureKeys, secret: string | undefined) {\n super();\n this.#value = value;\n this.#data = this.parseConnectionString(\n value,\n secretKeys.map((x) => x.toLocaleLowerCase()),\n secret,\n );\n }\n\n private parseConnectionString(value: string, secretKeys: SecureKeys, secret: string | undefined): [string, string | SecureString][] {\n return value\n .split(';')\n .filter(Boolean)\n .map((pair) => {\n const [key, value] = pair.split('=');\n const v = value ?? '';\n const val = secretKeys.includes(key.toLocaleLowerCase()) ? SecureString.from(v, secret) : v;\n return [key, val];\n });\n }\n\n static factory(secret: string | undefined, secretKeys?: SecureKeys): (value: string) => SecureConnectionString {\n return (value: string) => SecureConnectionString.from(value, secretKeys, secret);\n }\n\n public static from<T extends string | null | undefined>(value: T, secretKeys?: SecureKeys, secret?: string): T extends string ? SecureConnectionString : T {\n if (value === null) {\n return null as T extends string ? SecureConnectionString : T;\n }\n if (value === undefined) {\n return undefined as T extends string ? SecureConnectionString : T;\n }\n return new SecureConnectionString(value, secretKeys ?? defaultSecureKeys, secret) as T extends string ? SecureConnectionString : T;\n }\n\n public override toString(): string {\n return this.#data.map(([key, value]) => `${key}=${value}`).join(';');\n }\n\n public override toJSON(): object {\n return Object.fromEntries(this.#data);\n }\n\n public override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureConnectionString]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n","import util, { type InspectOptions } from 'node:util';\nimport { SecureString } from './SecureString';\nimport { BaseObject, type InspectFunction } from './types';\n\ntype UrlObject = {\n href: string;\n password?: string;\n searchParams?: Record<string, string>;\n};\n\n/**\n * SecureURL obfuscates the password from the URL.\n */\nexport class SecureURL extends BaseObject {\n readonly #value: URL;\n readonly #password: SecureString | null;\n\n public get secretValue(): URL {\n return this.#value;\n }\n\n private constructor(value: URL, secret: string | undefined) {\n super();\n this.#value = value;\n this.#password = SecureString.from(value.password || null, secret);\n }\n\n static factory(secret: string | undefined): (value: URL) => SecureURL {\n return (value: URL) => SecureURL.from(value, secret);\n }\n\n public static from<T extends URL | null | undefined>(value: T, secret?: string): T extends URL ? SecureURL : T {\n if (value === null) {\n return null as T extends URL ? SecureURL : T;\n }\n if (value === undefined) {\n return undefined as T extends URL ? SecureURL : T;\n }\n return new SecureURL(value, secret) as T extends URL ? SecureURL : T;\n }\n\n override toString(): string {\n const newUrl = new URL(this.#value.href);\n if (this.#password !== null) {\n newUrl.password = this.#password.toString();\n }\n return newUrl.href;\n }\n\n override toJSON(): UrlObject {\n const newUrl = new URL(this.#value.href);\n newUrl.password = '';\n\n const searchParams = new URLSearchParams(newUrl.searchParams);\n newUrl.search = '';\n\n let password: string | undefined;\n if (this.#password !== null) {\n password = this.#password.toString();\n }\n\n const result: UrlObject = {\n href: newUrl.href,\n };\n if (password !== undefined) {\n result.password = password;\n }\n if (searchParams.size > 0) {\n result.searchParams = Object.fromEntries(searchParams);\n }\n return result;\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureURL]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n","import { SecureConnectionString } from './SecureConnectionString';\nimport { SecureString } from './SecureString';\nimport { SecureURL } from './SecureURL';\nimport type { SecureFactory } from './types';\n\nexport const createFactory = (secret?: string): SecureFactory => {\n return {\n string: SecureString.factory(secret),\n connectionString: SecureConnectionString.factory(secret),\n url: SecureURL.factory(secret),\n };\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shellicar/core-config",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.1
|
|
4
|
+
"version": "1.0.1",
|
|
5
5
|
"description": "A library for securely handling sensitive configuration values like connection strings, URLs, and secrets.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://github.com/shellicar/core-config#readme",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"vitest": "^2.1.8"
|
|
55
55
|
},
|
|
56
56
|
"scripts": {
|
|
57
|
-
"build": "tsup",
|
|
58
|
-
"dev": "tsup --watch
|
|
57
|
+
"build": "tsup-node",
|
|
58
|
+
"dev": "tsup-node --watch",
|
|
59
59
|
"test": "vitest run",
|
|
60
60
|
"type-check": "tsc -p tsconfig.check.json"
|
|
61
61
|
}
|
package/CHANGELOG.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("./chunk-3GMWIOOZ.cjs");require("./chunk-MA2X5MES.cjs"),require("./chunk-5UKICLVE.cjs"),require("./chunk-W5TZC6JS.cjs"),require("./chunk-Z4KAMDJN.cjs"),require("./chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"SecureConnectionString",{enumerable:!0,get:function(){return e.SecureConnectionString}});//# sourceMappingURL=SecureConnectionString.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"SecureConnectionString.cjs"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import util, { InspectOptions } from 'node:util';
|
|
2
|
-
import { BaseObject, InspectFunction } from './types.cjs';
|
|
3
|
-
|
|
4
|
-
declare class SecureConnectionString extends BaseObject {
|
|
5
|
-
#private;
|
|
6
|
-
get secretValue(): string;
|
|
7
|
-
private constructor();
|
|
8
|
-
private parseConnectionString;
|
|
9
|
-
static from(value: null | undefined, ...secretKeys: string[]): null;
|
|
10
|
-
static from(value: string, ...secretKeys: string[]): SecureConnectionString;
|
|
11
|
-
toString(): string;
|
|
12
|
-
toJSON(): object;
|
|
13
|
-
[util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export { SecureConnectionString };
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import util, { InspectOptions } from 'node:util';
|
|
2
|
-
import { BaseObject, InspectFunction } from './types.js';
|
|
3
|
-
|
|
4
|
-
declare class SecureConnectionString extends BaseObject {
|
|
5
|
-
#private;
|
|
6
|
-
get secretValue(): string;
|
|
7
|
-
private constructor();
|
|
8
|
-
private parseConnectionString;
|
|
9
|
-
static from(value: null | undefined, ...secretKeys: string[]): null;
|
|
10
|
-
static from(value: string, ...secretKeys: string[]): SecureConnectionString;
|
|
11
|
-
toString(): string;
|
|
12
|
-
toJSON(): object;
|
|
13
|
-
[util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export { SecureConnectionString };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{SecureConnectionString}from"./chunk-HK6ZXU7J.js";import"./chunk-EQYTBWBL.js";import"./chunk-XHBKWGZG.js";import"./chunk-WO3QMJL2.js";import"./chunk-RBCLW5Z3.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=SecureConnectionString.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"SecureConnectionString.js"}
|
package/dist/SecureString.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("./chunk-MA2X5MES.cjs");require("./chunk-W5TZC6JS.cjs"),require("./chunk-Z4KAMDJN.cjs"),require("./chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"SecureString",{enumerable:!0,get:function(){return e.SecureString}});//# sourceMappingURL=SecureString.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"SecureString.cjs"}
|
package/dist/SecureString.d.cts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { inspect } from 'node:util';
|
|
2
|
-
import { BaseObject } from './types.cjs';
|
|
3
|
-
|
|
4
|
-
declare class SecureString extends BaseObject {
|
|
5
|
-
#private;
|
|
6
|
-
get secretValue(): string;
|
|
7
|
-
private constructor();
|
|
8
|
-
toString(): string;
|
|
9
|
-
toJSON(): string;
|
|
10
|
-
[inspect.custom](): string;
|
|
11
|
-
static from(value: string): SecureString;
|
|
12
|
-
static from(value: null | undefined): null;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export { SecureString };
|
package/dist/SecureString.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { inspect } from 'node:util';
|
|
2
|
-
import { BaseObject } from './types.js';
|
|
3
|
-
|
|
4
|
-
declare class SecureString extends BaseObject {
|
|
5
|
-
#private;
|
|
6
|
-
get secretValue(): string;
|
|
7
|
-
private constructor();
|
|
8
|
-
toString(): string;
|
|
9
|
-
toJSON(): string;
|
|
10
|
-
[inspect.custom](): string;
|
|
11
|
-
static from(value: string): SecureString;
|
|
12
|
-
static from(value: null | undefined): null;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export { SecureString };
|
package/dist/SecureString.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{SecureString}from"./chunk-EQYTBWBL.js";import"./chunk-WO3QMJL2.js";import"./chunk-RBCLW5Z3.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=SecureString.js.map
|
package/dist/SecureString.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"SecureString.js"}
|
package/dist/SecureURL.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("./chunk-M2AZ3CIA.cjs");require("./chunk-W5TZC6JS.cjs"),require("./chunk-Z4KAMDJN.cjs"),require("./chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"SecureURL",{enumerable:!0,get:function(){return e.SecureURL}});//# sourceMappingURL=SecureURL.cjs.map
|
package/dist/SecureURL.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"SecureURL.cjs"}
|
package/dist/SecureURL.d.cts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import util, { InspectOptions } from 'node:util';
|
|
2
|
-
import { BaseObject, InspectFunction } from './types.cjs';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* SecureURL obfuscates the password from the URL.
|
|
6
|
-
*/
|
|
7
|
-
declare class SecureURL extends BaseObject {
|
|
8
|
-
#private;
|
|
9
|
-
get secretValue(): URL;
|
|
10
|
-
private constructor();
|
|
11
|
-
static from(value: undefined | null): null;
|
|
12
|
-
static from(value: URL): SecureURL;
|
|
13
|
-
toString(): string;
|
|
14
|
-
toJSON(): object;
|
|
15
|
-
[util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export { SecureURL };
|
package/dist/SecureURL.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import util, { InspectOptions } from 'node:util';
|
|
2
|
-
import { BaseObject, InspectFunction } from './types.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* SecureURL obfuscates the password from the URL.
|
|
6
|
-
*/
|
|
7
|
-
declare class SecureURL extends BaseObject {
|
|
8
|
-
#private;
|
|
9
|
-
get secretValue(): URL;
|
|
10
|
-
private constructor();
|
|
11
|
-
static from(value: undefined | null): null;
|
|
12
|
-
static from(value: URL): SecureURL;
|
|
13
|
-
toString(): string;
|
|
14
|
-
toJSON(): object;
|
|
15
|
-
[util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export { SecureURL };
|
package/dist/SecureURL.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{SecureURL}from"./chunk-SAA2XVPV.js";import"./chunk-WO3QMJL2.js";import"./chunk-RBCLW5Z3.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=SecureURL.js.map
|
package/dist/SecureURL.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"SecureURL.js"}
|
package/dist/chunk-3GMWIOOZ.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("./chunk-MA2X5MES.cjs"),t=require("./chunk-5UKICLVE.cjs"),r=require("./chunk-Z4KAMDJN.cjs"),n=require("./chunk-PK6SKIKE.cjs");function u(e){return e&&e.__esModule?e:{default:e}}var s=u(require("util")),i=class u extends r.BaseObject{static{n.__name(this,"SecureConnectionString")}#e;#t;get secretValue(){return this.#e}constructor(e,...r){super(),this.#e=e;const n=0===r.length?t.defaultSecureKeys:r;this.#t=this.parseConnectionString(e,...n.map((e=>e.toLocaleLowerCase())))}parseConnectionString(t,...r){return t.split(";").filter(Boolean).map((t=>{const[n,u]=t.split("="),s=u??"",i=r.includes(n.toLocaleLowerCase())?e.SecureString.from(s):s;return[n,i]}))}static from(e,...t){return null==e?null:new u(e,...t)}toString(){return this.#t.map((([e,t])=>`${e}=${t}`)).join(";")}toJSON(){return Object.fromEntries(this.#t)}[s.default.inspect.custom](e,t,r){if(e<0)return"[SecureConnectionString]";const n=Object.assign({},t,{depth:null==t.depth?null:t.depth-1});return r(this.toJSON(),n)}};exports.SecureConnectionString=i;//# sourceMappingURL=chunk-3GMWIOOZ.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SecureConnectionString.ts"],"names":["BaseObject","__name","defaultSecureKeys","value","SecureString","util"],"mappings":"oWAKa,IAAA,sBAAA,GAAN,MAAM,uBAAA,SAA+BA,4BAAW,CAAA;AAAA,EALvD;AAKuD,IAAAC,wBAAA,CAAA,IAAA,EAAA,wBAAA,CAAA;AAAA;AAAA,EAC5C,MAAA;AAAA,EACA,KAAA;AAAA,EAET,IAAW,WAAsB,GAAA;AAC/B,IAAA,OAAO,IAAK,CAAA,MAAA;AAAA;AACd,EAEQ,WAAA,CAAY,UAAkB,UAAsB,EAAA;AAC1D,IAAM,KAAA,EAAA;AACN,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA;AACd,IAAA,MAAM,IAAO,GAAA,UAAA,CAAW,MAAW,KAAA,CAAA,GAAIC,mCAAoB,GAAA,UAAA;AAC3D,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAA,CAAK,qBAAsB,CAAA,KAAA,EAAO,GAAG,IAAA,CAAK,GAAI,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,iBAAkB,EAAC,CAAC,CAAA;AAAA;AAC1F,EAEQ,qBAAA,CAAsB,UAAkB,UAAyD,EAAA;AACvG,IAAO,OAAA,KAAA,CACJ,MAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA,CACd,GAAI,CAAA,CAAC,IAAS,KAAA;AACb,MAAA,MAAM,CAAC,GAAKC,EAAAA,MAAK,CAAI,GAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACnC,MAAA,MAAM,IAAIA,MAAS,IAAA,EAAA;AACnB,MAAM,MAAA,GAAA,GAAM,UAAW,CAAA,QAAA,CAAS,GAAI,CAAA,iBAAA,EAAmB,CAAI,GAAAC,8BAAA,CAAa,IAAK,CAAA,CAAC,CAAI,GAAA,CAAA;AAClF,MAAO,OAAA,CAAC,KAAK,GAAG,CAAA;AAAA,KACjB,CAAA;AAAA;AACL,EAIA,OAAc,IAAK,CAAA,KAAA,EAAA,GAAqC,UAAsB,EAAA;AAC5E,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAO,OAAA,IAAA;AAAA;AAET,IAAA,OAAO,IAAI,uBAAA,CAAuB,KAAO,EAAA,GAAG,UAAU,CAAA;AAAA;AACxD,EAEgB,QAAmB,GAAA;AACjC,IAAA,OAAO,IAAK,CAAA,KAAA,CAAM,GAAI,CAAA,CAAC,CAAC,GAAK,EAAA,KAAK,CAAM,KAAA,CAAA,EAAG,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA;AACrE,EAEgB,MAAiB,GAAA;AAC/B,IAAO,OAAA,MAAA,CAAO,WAAY,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA;AACtC,EAEA,CAAiBC,qBAAK,CAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,KAAA,EAAe,SAAyB,OAAkC,EAAA;AAC9G,IAAA,IAAI,QAAQ,CAAG,EAAA;AACb,MAAO,OAAA,0BAAA;AAAA;AAET,IAAA,MAAM,UAAa,GAAA,MAAA,CAAO,MAAO,CAAA,IAAI,OAAS,EAAA;AAAA,MAC5C,OAAO,OAAQ,CAAA,KAAA,IAAS,IAAO,GAAA,IAAA,GAAO,QAAQ,KAAQ,GAAA;AAAA,KACvD,CAAA;AACD,IAAA,OAAO,OAAQ,CAAA,IAAA,CAAK,MAAO,EAAA,EAAG,UAAU,CAAA;AAAA;AAE5C","file":"chunk-3GMWIOOZ.cjs","sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport { SecureString } from './SecureString';\nimport { defaultSecureKeys } from './defaults';\nimport { BaseObject, type InspectFunction } from './types';\n\nexport class SecureConnectionString extends BaseObject {\n readonly #value: string;\n readonly #data: [string, string | SecureString][];\n\n public get secretValue(): string {\n return this.#value;\n }\n\n private constructor(value: string, ...secretKeys: string[]) {\n super();\n this.#value = value;\n const keys = secretKeys.length === 0 ? defaultSecureKeys : secretKeys;\n this.#data = this.parseConnectionString(value, ...keys.map((x) => x.toLocaleLowerCase()));\n }\n\n private parseConnectionString(value: string, ...secretKeys: string[]): [string, string | SecureString][] {\n return value\n .split(';')\n .filter(Boolean)\n .map((pair) => {\n const [key, value] = pair.split('=');\n const v = value ?? '';\n const val = secretKeys.includes(key.toLocaleLowerCase()) ? SecureString.from(v) : v;\n return [key, val];\n });\n }\n\n public static from(value: null | undefined, ...secretKeys: string[]): null;\n public static from(value: string, ...secretKeys: string[]): SecureConnectionString;\n public static from(value: string | null | undefined, ...secretKeys: string[]) {\n if (value == null) {\n return null;\n }\n return new SecureConnectionString(value, ...secretKeys);\n }\n\n public override toString(): string {\n return this.#data.map(([key, value]) => `${key}=${value}`).join(';');\n }\n\n public override toJSON(): object {\n return Object.fromEntries(this.#data);\n }\n\n public override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureConnectionString]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n"]}
|
package/dist/chunk-5UKICLVE.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";exports.defaultSecureKeys=["AccessKey","SharedAccessKey","Password","AccountKey","Secret","SecretKey","ApiKey","Token","Key","MasterKey","PrimaryKey","SecondaryKey"];//# sourceMappingURL=chunk-5UKICLVE.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defaults.ts"],"names":[],"mappings":";AAAO,IAAM,iBAAoB,GAAA,CAAC,WAAa,EAAA,iBAAA,EAAmB,UAAY,EAAA,YAAA,EAAc,QAAU,EAAA,WAAA,EAAa,QAAU,EAAA,OAAA,EAAS,KAAO,EAAA,WAAA,EAAa,cAAc,cAAc","file":"chunk-5UKICLVE.cjs","sourcesContent":["export const defaultSecureKeys = ['AccessKey', 'SharedAccessKey', 'Password', 'AccountKey', 'Secret', 'SecretKey', 'ApiKey', 'Token', 'Key', 'MasterKey', 'PrimaryKey', 'SecondaryKey'] as const;\n"]}
|
package/dist/chunk-7QVYU63E.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=Object.defineProperty,r=(r,a)=>e(r,"name",{value:a,configurable:!0});export{r as __name};//# sourceMappingURL=chunk-7QVYU63E.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-7QVYU63E.js"}
|
package/dist/chunk-EQYTBWBL.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{sha256 as t}from"./chunk-WO3QMJL2.js";import{BaseObject as r}from"./chunk-RBCLW5Z3.js";import{__name as e}from"./chunk-7QVYU63E.js";import{inspect as u}from"node:util";var n=class n extends r{static{e(this,"SecureString")}#t;get secretValue(){return this.#t}constructor(t){super(),this.#t=t}toString(){return t(this.#t)}toJSON(){return this.toString()}[u.custom](){return u(this.toString())}static from(t){return null==t?null:new n(t)}};export{n as SecureString};//# sourceMappingURL=chunk-EQYTBWBL.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SecureString.ts"],"names":[],"mappings":"+JAIa,IAAA,YAAA,GAAN,MAAM,aAAA,SAAqB,UAAW,CAAA;AAAA,EAJ7C;AAI6C,IAAA,MAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAAA;AAAA,EAClC,MAAA;AAAA,EAET,IAAW,WAAsB,GAAA;AAC/B,IAAA,OAAO,IAAK,CAAA,MAAA;AAAA;AACd,EAEQ,YAAY,KAAe,EAAA;AACjC,IAAM,KAAA,EAAA;AACN,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA;AAAA;AAChB,EACgB,QAAW,GAAA;AACzB,IAAO,OAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA;AAC3B,EACgB,MAAS,GAAA;AACvB,IAAA,OAAO,KAAK,QAAS,EAAA;AAAA;AACvB,EACA,CAAiB,OAAQ,CAAA,MAAM,CAAI,GAAA;AACjC,IAAO,OAAA,OAAA,CAAQ,IAAK,CAAA,QAAA,EAAU,CAAA;AAAA;AAChC,EAIA,OAAc,KAAK,KAAuD,EAAA;AACxE,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAO,OAAA,IAAA;AAAA;AAET,IAAO,OAAA,IAAI,cAAa,KAAK,CAAA;AAAA;AAEjC","file":"chunk-EQYTBWBL.js","sourcesContent":["import { inspect } from 'node:util';\nimport { sha256 } from './sha256';\nimport { BaseObject } from './types';\n\nexport class SecureString extends BaseObject {\n readonly #value: string;\n\n public get secretValue(): string {\n return this.#value;\n }\n\n private constructor(value: string) {\n super();\n this.#value = value;\n }\n public override toString() {\n return sha256(this.#value);\n }\n public override toJSON() {\n return this.toString();\n }\n public override [inspect.custom]() {\n return inspect(this.toString());\n }\n\n public static from(value: string): SecureString;\n public static from(value: null | undefined): null;\n public static from(value: string | null | undefined): SecureString | null {\n if (value == null) {\n return null;\n }\n return new SecureString(value);\n }\n}\n"]}
|
package/dist/chunk-HK6ZXU7J.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{SecureString as t}from"./chunk-EQYTBWBL.js";import{defaultSecureKeys as e}from"./chunk-XHBKWGZG.js";import{BaseObject as r}from"./chunk-RBCLW5Z3.js";import{__name as n}from"./chunk-7QVYU63E.js";import o from"node:util";var s=class s extends r{static{n(this,"SecureConnectionString")}#t;#e;get secretValue(){return this.#t}constructor(t,...r){super(),this.#t=t;const n=0===r.length?e:r;this.#e=this.parseConnectionString(t,...n.map((t=>t.toLocaleLowerCase())))}parseConnectionString(e,...r){return e.split(";").filter(Boolean).map((e=>{const[n,o]=e.split("="),s=o??"",i=r.includes(n.toLocaleLowerCase())?t.from(s):s;return[n,i]}))}static from(t,...e){return null==t?null:new s(t,...e)}toString(){return this.#e.map((([t,e])=>`${t}=${e}`)).join(";")}toJSON(){return Object.fromEntries(this.#e)}[o.inspect.custom](t,e,r){if(t<0)return"[SecureConnectionString]";const n=Object.assign({},e,{depth:null==e.depth?null:e.depth-1});return r(this.toJSON(),n)}};export{s as SecureConnectionString};//# sourceMappingURL=chunk-HK6ZXU7J.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SecureConnectionString.ts"],"names":["value"],"mappings":"qNAKa,IAAA,sBAAA,GAAN,MAAM,uBAAA,SAA+B,UAAW,CAAA;AAAA,EALvD;AAKuD,IAAA,MAAA,CAAA,IAAA,EAAA,wBAAA,CAAA;AAAA;AAAA,EAC5C,MAAA;AAAA,EACA,KAAA;AAAA,EAET,IAAW,WAAsB,GAAA;AAC/B,IAAA,OAAO,IAAK,CAAA,MAAA;AAAA;AACd,EAEQ,WAAA,CAAY,UAAkB,UAAsB,EAAA;AAC1D,IAAM,KAAA,EAAA;AACN,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA;AACd,IAAA,MAAM,IAAO,GAAA,UAAA,CAAW,MAAW,KAAA,CAAA,GAAI,iBAAoB,GAAA,UAAA;AAC3D,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAA,CAAK,qBAAsB,CAAA,KAAA,EAAO,GAAG,IAAA,CAAK,GAAI,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,iBAAkB,EAAC,CAAC,CAAA;AAAA;AAC1F,EAEQ,qBAAA,CAAsB,UAAkB,UAAyD,EAAA;AACvG,IAAO,OAAA,KAAA,CACJ,MAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA,CACd,GAAI,CAAA,CAAC,IAAS,KAAA;AACb,MAAA,MAAM,CAAC,GAAKA,EAAAA,MAAK,CAAI,GAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACnC,MAAA,MAAM,IAAIA,MAAS,IAAA,EAAA;AACnB,MAAM,MAAA,GAAA,GAAM,UAAW,CAAA,QAAA,CAAS,GAAI,CAAA,iBAAA,EAAmB,CAAI,GAAA,YAAA,CAAa,IAAK,CAAA,CAAC,CAAI,GAAA,CAAA;AAClF,MAAO,OAAA,CAAC,KAAK,GAAG,CAAA;AAAA,KACjB,CAAA;AAAA;AACL,EAIA,OAAc,IAAK,CAAA,KAAA,EAAA,GAAqC,UAAsB,EAAA;AAC5E,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAO,OAAA,IAAA;AAAA;AAET,IAAA,OAAO,IAAI,uBAAA,CAAuB,KAAO,EAAA,GAAG,UAAU,CAAA;AAAA;AACxD,EAEgB,QAAmB,GAAA;AACjC,IAAA,OAAO,IAAK,CAAA,KAAA,CAAM,GAAI,CAAA,CAAC,CAAC,GAAK,EAAA,KAAK,CAAM,KAAA,CAAA,EAAG,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA;AACrE,EAEgB,MAAiB,GAAA;AAC/B,IAAO,OAAA,MAAA,CAAO,WAAY,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA;AACtC,EAEA,CAAiB,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,KAAA,EAAe,SAAyB,OAAkC,EAAA;AAC9G,IAAA,IAAI,QAAQ,CAAG,EAAA;AACb,MAAO,OAAA,0BAAA;AAAA;AAET,IAAA,MAAM,UAAa,GAAA,MAAA,CAAO,MAAO,CAAA,IAAI,OAAS,EAAA;AAAA,MAC5C,OAAO,OAAQ,CAAA,KAAA,IAAS,IAAO,GAAA,IAAA,GAAO,QAAQ,KAAQ,GAAA;AAAA,KACvD,CAAA;AACD,IAAA,OAAO,OAAQ,CAAA,IAAA,CAAK,MAAO,EAAA,EAAG,UAAU,CAAA;AAAA;AAE5C","file":"chunk-HK6ZXU7J.js","sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport { SecureString } from './SecureString';\nimport { defaultSecureKeys } from './defaults';\nimport { BaseObject, type InspectFunction } from './types';\n\nexport class SecureConnectionString extends BaseObject {\n readonly #value: string;\n readonly #data: [string, string | SecureString][];\n\n public get secretValue(): string {\n return this.#value;\n }\n\n private constructor(value: string, ...secretKeys: string[]) {\n super();\n this.#value = value;\n const keys = secretKeys.length === 0 ? defaultSecureKeys : secretKeys;\n this.#data = this.parseConnectionString(value, ...keys.map((x) => x.toLocaleLowerCase()));\n }\n\n private parseConnectionString(value: string, ...secretKeys: string[]): [string, string | SecureString][] {\n return value\n .split(';')\n .filter(Boolean)\n .map((pair) => {\n const [key, value] = pair.split('=');\n const v = value ?? '';\n const val = secretKeys.includes(key.toLocaleLowerCase()) ? SecureString.from(v) : v;\n return [key, val];\n });\n }\n\n public static from(value: null | undefined, ...secretKeys: string[]): null;\n public static from(value: string, ...secretKeys: string[]): SecureConnectionString;\n public static from(value: string | null | undefined, ...secretKeys: string[]) {\n if (value == null) {\n return null;\n }\n return new SecureConnectionString(value, ...secretKeys);\n }\n\n public override toString(): string {\n return this.#data.map(([key, value]) => `${key}=${value}`).join(';');\n }\n\n public override toJSON(): object {\n return Object.fromEntries(this.#data);\n }\n\n public override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureConnectionString]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n"]}
|
package/dist/chunk-M2AZ3CIA.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("./chunk-W5TZC6JS.cjs"),r=require("./chunk-Z4KAMDJN.cjs"),s=require("./chunk-PK6SKIKE.cjs");function t(e){return e&&e.__esModule?e:{default:e}}var u=t(require("util")),a=class t extends r.BaseObject{static{s.__name(this,"SecureURL")}#e;get secretValue(){return this.#e}constructor(e){super(),this.#e=e}static from(e){return null==e?null:new t(e)}toString(){const r=new URL(this.#e.href);return r.password&&(r.password=e.sha256(r.password)),r.href}toJSON(){const r=new URL(this.#e.href),s=new URLSearchParams(r.searchParams);let t;r.search="",r.password&&(t=e.sha256(r.password),r.password="");const u={href:r.href};return void 0!==t&&(u.password=t),s.size>0&&(u.searchParams=Object.fromEntries(s)),u}[u.default.inspect.custom](e,r,s){if(e<0)return"[SecureURL]";const t=Object.assign({},r,{depth:null==r.depth?null:r.depth-1});return s(this.toJSON(),t)}};exports.SecureURL=a;//# sourceMappingURL=chunk-M2AZ3CIA.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SecureURL.ts"],"names":["BaseObject","__name","sha256","util"],"mappings":"kTAaa,IAAA,SAAA,GAAN,MAAM,UAAA,SAAkBA,4BAAW,CAAA;AAAA,EAb1C;AAa0C,IAAAC,wBAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA;AAAA,EAC/B,MAAA;AAAA,EAET,IAAW,WAAmB,GAAA;AAC5B,IAAA,OAAO,IAAK,CAAA,MAAA;AAAA;AACd,EAEQ,YAAY,KAAY,EAAA;AAC9B,IAAM,KAAA,EAAA;AACN,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA;AAAA;AAChB,EAIA,OAAc,KAAK,KAAiD,EAAA;AAClE,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAO,OAAA,IAAA;AAAA;AAET,IAAO,OAAA,IAAI,WAAU,KAAK,CAAA;AAAA;AAC5B,EAES,QAAmB,GAAA;AAC1B,IAAA,MAAM,MAAS,GAAA,IAAI,GAAI,CAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AACvC,IAAA,IAAI,OAAO,QAAU,EAAA;AACnB,MAAO,MAAA,CAAA,QAAA,GAAWC,wBAAO,CAAA,MAAA,CAAO,QAAQ,CAAA;AAAA;AAE1C,IAAA,OAAO,MAAO,CAAA,IAAA;AAAA;AAChB,EAES,MAAiB,GAAA;AACxB,IAAA,MAAM,MAAS,GAAA,IAAI,GAAI,CAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAEvC,IAAA,MAAM,YAAe,GAAA,IAAI,eAAgB,CAAA,MAAA,CAAO,YAAY,CAAA;AAC5D,IAAA,MAAA,CAAO,MAAS,GAAA,EAAA;AAEhB,IAAI,IAAA,QAAA;AACJ,IAAA,IAAI,OAAO,QAAU,EAAA;AACnB,MAAW,QAAA,GAAAA,wBAAA,CAAO,OAAO,QAAQ,CAAA;AACjC,MAAA,MAAA,CAAO,QAAW,GAAA,EAAA;AAAA;AAGpB,IAAA,MAAM,MAAoB,GAAA;AAAA,MACxB,MAAM,MAAO,CAAA;AAAA,KACf;AACA,IAAA,IAAI,aAAa,SAAW,EAAA;AAC1B,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA;AAAA;AAEpB,IAAI,IAAA,YAAA,CAAa,OAAO,CAAG,EAAA;AACzB,MAAO,MAAA,CAAA,YAAA,GAAe,MAAO,CAAA,WAAA,CAAY,YAAY,CAAA;AAAA;AAEvD,IAAO,OAAA,MAAA;AAAA;AACT,EACA,CAAUC,qBAAK,CAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,KAAA,EAAe,SAAyB,OAAkC,EAAA;AACvG,IAAA,IAAI,QAAQ,CAAG,EAAA;AACb,MAAO,OAAA,aAAA;AAAA;AAET,IAAA,MAAM,UAAa,GAAA,MAAA,CAAO,MAAO,CAAA,IAAI,OAAS,EAAA;AAAA,MAC5C,OAAO,OAAQ,CAAA,KAAA,IAAS,IAAO,GAAA,IAAA,GAAO,QAAQ,KAAQ,GAAA;AAAA,KACvD,CAAA;AACD,IAAA,OAAO,OAAQ,CAAA,IAAA,CAAK,MAAO,EAAA,EAAG,UAAU,CAAA;AAAA;AAE5C","file":"chunk-M2AZ3CIA.cjs","sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport { sha256 } from './sha256';\nimport { BaseObject, type InspectFunction } from './types';\n\ntype UrlObject = {\n href: string;\n password?: string;\n searchParams?: Record<string, string>;\n};\n\n/**\n * SecureURL obfuscates the password from the URL.\n */\nexport class SecureURL extends BaseObject {\n readonly #value: URL;\n\n public get secretValue(): URL {\n return this.#value;\n }\n\n private constructor(value: URL) {\n super();\n this.#value = value;\n }\n\n public static from(value: undefined | null): null;\n public static from(value: URL): SecureURL;\n public static from(value: URL | null | undefined): SecureURL | null {\n if (value == null) {\n return null;\n }\n return new SecureURL(value);\n }\n\n override toString(): string {\n const newUrl = new URL(this.#value.href);\n if (newUrl.password) {\n newUrl.password = sha256(newUrl.password);\n }\n return newUrl.href;\n }\n\n override toJSON(): object {\n const newUrl = new URL(this.#value.href);\n\n const searchParams = new URLSearchParams(newUrl.searchParams);\n newUrl.search = '';\n\n let password: string | undefined;\n if (newUrl.password) {\n password = sha256(newUrl.password);\n newUrl.password = '';\n }\n\n const result: UrlObject = {\n href: newUrl.href,\n };\n if (password !== undefined) {\n result.password = password;\n }\n if (searchParams.size > 0) {\n result.searchParams = Object.fromEntries(searchParams);\n }\n return result;\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureURL]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n"]}
|
package/dist/chunk-MA2X5MES.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var t=require("./chunk-W5TZC6JS.cjs"),e=require("./chunk-Z4KAMDJN.cjs"),r=require("./chunk-PK6SKIKE.cjs"),u=require("util"),s=class s extends e.BaseObject{static{r.__name(this,"SecureString")}#t;get secretValue(){return this.#t}constructor(t){super(),this.#t=t}toString(){return t.sha256(this.#t)}toJSON(){return this.toString()}[u.inspect.custom](){return u.inspect(this.toString())}static from(t){return null==t?null:new s(t)}};exports.SecureString=s;//# sourceMappingURL=chunk-MA2X5MES.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SecureString.ts"],"names":["BaseObject","__name","sha256","inspect"],"mappings":"4LAIa,IAAA,YAAA,GAAN,MAAM,aAAA,SAAqBA,4BAAW,CAAA;AAAA,EAJ7C;AAI6C,IAAAC,wBAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAAA;AAAA,EAClC,MAAA;AAAA,EAET,IAAW,WAAsB,GAAA;AAC/B,IAAA,OAAO,IAAK,CAAA,MAAA;AAAA;AACd,EAEQ,YAAY,KAAe,EAAA;AACjC,IAAM,KAAA,EAAA;AACN,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA;AAAA;AAChB,EACgB,QAAW,GAAA;AACzB,IAAO,OAAAC,wBAAA,CAAO,KAAK,MAAM,CAAA;AAAA;AAC3B,EACgB,MAAS,GAAA;AACvB,IAAA,OAAO,KAAK,QAAS,EAAA;AAAA;AACvB,EACA,CAAiBC,YAAQ,CAAA,MAAM,CAAI,GAAA;AACjC,IAAO,OAAAA,YAAA,CAAQ,IAAK,CAAA,QAAA,EAAU,CAAA;AAAA;AAChC,EAIA,OAAc,KAAK,KAAuD,EAAA;AACxE,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAO,OAAA,IAAA;AAAA;AAET,IAAO,OAAA,IAAI,cAAa,KAAK,CAAA;AAAA;AAEjC","file":"chunk-MA2X5MES.cjs","sourcesContent":["import { inspect } from 'node:util';\nimport { sha256 } from './sha256';\nimport { BaseObject } from './types';\n\nexport class SecureString extends BaseObject {\n readonly #value: string;\n\n public get secretValue(): string {\n return this.#value;\n }\n\n private constructor(value: string) {\n super();\n this.#value = value;\n }\n public override toString() {\n return sha256(this.#value);\n }\n public override toJSON() {\n return this.toString();\n }\n public override [inspect.custom]() {\n return inspect(this.toString());\n }\n\n public static from(value: string): SecureString;\n public static from(value: null | undefined): null;\n public static from(value: string | null | undefined): SecureString | null {\n if (value == null) {\n return null;\n }\n return new SecureString(value);\n }\n}\n"]}
|
package/dist/chunk-PK6SKIKE.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=Object.defineProperty;exports.__name=(r,a)=>e(r,"name",{value:a,configurable:!0});//# sourceMappingURL=chunk-PK6SKIKE.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-PK6SKIKE.cjs"}
|
package/dist/chunk-RBCLW5Z3.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{__name as s}from"./chunk-7QVYU63E.js";var t=class{static{s(this,"BaseObject")}};export{t as BaseObject};//# sourceMappingURL=chunk-RBCLW5Z3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"names":[],"mappings":";AAIO,IAAe,aAAf,MAA0B;AAAA,EAJjC;AAIiC,IAAA,MAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AAAA;AAIjC","file":"chunk-RBCLW5Z3.js","sourcesContent":["import util, { type InspectOptions } from 'node:util';\n\nexport type InspectFunction = typeof util.inspect;\n\nexport abstract class BaseObject {\n public abstract toString(): string;\n public abstract toJSON(): string | object;\n public abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;\n}\n"]}
|
package/dist/chunk-SAA2XVPV.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{sha256 as r}from"./chunk-WO3QMJL2.js";import{BaseObject as s}from"./chunk-RBCLW5Z3.js";import{__name as e}from"./chunk-7QVYU63E.js";import t from"node:util";var o=class o extends s{static{e(this,"SecureURL")}#r;get secretValue(){return this.#r}constructor(r){super(),this.#r=r}static from(r){return null==r?null:new o(r)}toString(){const s=new URL(this.#r.href);return s.password&&(s.password=r(s.password)),s.href}toJSON(){const s=new URL(this.#r.href),e=new URLSearchParams(s.searchParams);let t;s.search="",s.password&&(t=r(s.password),s.password="");const o={href:s.href};return void 0!==t&&(o.password=t),e.size>0&&(o.searchParams=Object.fromEntries(e)),o}[t.inspect.custom](r,s,e){if(r<0)return"[SecureURL]";const t=Object.assign({},s,{depth:null==s.depth?null:s.depth-1});return e(this.toJSON(),t)}};export{o as SecureURL};//# sourceMappingURL=chunk-SAA2XVPV.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SecureURL.ts"],"names":[],"mappings":"2JAaa,IAAA,SAAA,GAAN,MAAM,UAAA,SAAkB,UAAW,CAAA;AAAA,EAb1C;AAa0C,IAAA,MAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA;AAAA,EAC/B,MAAA;AAAA,EAET,IAAW,WAAmB,GAAA;AAC5B,IAAA,OAAO,IAAK,CAAA,MAAA;AAAA;AACd,EAEQ,YAAY,KAAY,EAAA;AAC9B,IAAM,KAAA,EAAA;AACN,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA;AAAA;AAChB,EAIA,OAAc,KAAK,KAAiD,EAAA;AAClE,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAO,OAAA,IAAA;AAAA;AAET,IAAO,OAAA,IAAI,WAAU,KAAK,CAAA;AAAA;AAC5B,EAES,QAAmB,GAAA;AAC1B,IAAA,MAAM,MAAS,GAAA,IAAI,GAAI,CAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AACvC,IAAA,IAAI,OAAO,QAAU,EAAA;AACnB,MAAO,MAAA,CAAA,QAAA,GAAW,MAAO,CAAA,MAAA,CAAO,QAAQ,CAAA;AAAA;AAE1C,IAAA,OAAO,MAAO,CAAA,IAAA;AAAA;AAChB,EAES,MAAiB,GAAA;AACxB,IAAA,MAAM,MAAS,GAAA,IAAI,GAAI,CAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAEvC,IAAA,MAAM,YAAe,GAAA,IAAI,eAAgB,CAAA,MAAA,CAAO,YAAY,CAAA;AAC5D,IAAA,MAAA,CAAO,MAAS,GAAA,EAAA;AAEhB,IAAI,IAAA,QAAA;AACJ,IAAA,IAAI,OAAO,QAAU,EAAA;AACnB,MAAW,QAAA,GAAA,MAAA,CAAO,OAAO,QAAQ,CAAA;AACjC,MAAA,MAAA,CAAO,QAAW,GAAA,EAAA;AAAA;AAGpB,IAAA,MAAM,MAAoB,GAAA;AAAA,MACxB,MAAM,MAAO,CAAA;AAAA,KACf;AACA,IAAA,IAAI,aAAa,SAAW,EAAA;AAC1B,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA;AAAA;AAEpB,IAAI,IAAA,YAAA,CAAa,OAAO,CAAG,EAAA;AACzB,MAAO,MAAA,CAAA,YAAA,GAAe,MAAO,CAAA,WAAA,CAAY,YAAY,CAAA;AAAA;AAEvD,IAAO,OAAA,MAAA;AAAA;AACT,EACA,CAAU,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,KAAA,EAAe,SAAyB,OAAkC,EAAA;AACvG,IAAA,IAAI,QAAQ,CAAG,EAAA;AACb,MAAO,OAAA,aAAA;AAAA;AAET,IAAA,MAAM,UAAa,GAAA,MAAA,CAAO,MAAO,CAAA,IAAI,OAAS,EAAA;AAAA,MAC5C,OAAO,OAAQ,CAAA,KAAA,IAAS,IAAO,GAAA,IAAA,GAAO,QAAQ,KAAQ,GAAA;AAAA,KACvD,CAAA;AACD,IAAA,OAAO,OAAQ,CAAA,IAAA,CAAK,MAAO,EAAA,EAAG,UAAU,CAAA;AAAA;AAE5C","file":"chunk-SAA2XVPV.js","sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport { sha256 } from './sha256';\nimport { BaseObject, type InspectFunction } from './types';\n\ntype UrlObject = {\n href: string;\n password?: string;\n searchParams?: Record<string, string>;\n};\n\n/**\n * SecureURL obfuscates the password from the URL.\n */\nexport class SecureURL extends BaseObject {\n readonly #value: URL;\n\n public get secretValue(): URL {\n return this.#value;\n }\n\n private constructor(value: URL) {\n super();\n this.#value = value;\n }\n\n public static from(value: undefined | null): null;\n public static from(value: URL): SecureURL;\n public static from(value: URL | null | undefined): SecureURL | null {\n if (value == null) {\n return null;\n }\n return new SecureURL(value);\n }\n\n override toString(): string {\n const newUrl = new URL(this.#value.href);\n if (newUrl.password) {\n newUrl.password = sha256(newUrl.password);\n }\n return newUrl.href;\n }\n\n override toJSON(): object {\n const newUrl = new URL(this.#value.href);\n\n const searchParams = new URLSearchParams(newUrl.searchParams);\n newUrl.search = '';\n\n let password: string | undefined;\n if (newUrl.password) {\n password = sha256(newUrl.password);\n newUrl.password = '';\n }\n\n const result: UrlObject = {\n href: newUrl.href,\n };\n if (password !== undefined) {\n result.password = password;\n }\n if (searchParams.size > 0) {\n result.searchParams = Object.fromEntries(searchParams);\n }\n return result;\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureURL]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n"]}
|
package/dist/chunk-W5TZC6JS.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("./chunk-PK6SKIKE.cjs"),s=require("crypto"),a=e.__name((e=>`sha256:${s.createHash("sha256").update(e).digest("hex")}`),"sha256");exports.sha256=a;//# sourceMappingURL=chunk-W5TZC6JS.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sha256.ts"],"names":["createHash"],"mappings":"4FAEa,IAAA,MAAA,6CAAU,KAAkB,KAAA;AACvC,EAAM,MAAA,IAAA,GAAOA,kBAAW,QAAQ,CAAA,CAAE,OAAO,KAAK,CAAA,CAAE,OAAO,KAAK,CAAA;AAC5D,EAAA,OAAO,UAAU,IAAI,CAAA,CAAA;AACvB,CAHsB,EAAA,QAAA","file":"chunk-W5TZC6JS.cjs","sourcesContent":["import { createHash } from 'node:crypto';\n\nexport const sha256 = (input: string) => {\n const hash = createHash('sha256').update(input).digest('hex');\n return `sha256:${hash}`;\n};\n"]}
|
package/dist/chunk-WO3QMJL2.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{__name as o}from"./chunk-7QVYU63E.js";import{createHash as r}from"node:crypto";var t=o((o=>`sha256:${r("sha256").update(o).digest("hex")}`),"sha256");export{t as sha256};//# sourceMappingURL=chunk-WO3QMJL2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sha256.ts"],"names":[],"mappings":"8EAEa,IAAA,MAAA,2BAAU,KAAkB,KAAA;AACvC,EAAM,MAAA,IAAA,GAAO,WAAW,QAAQ,CAAA,CAAE,OAAO,KAAK,CAAA,CAAE,OAAO,KAAK,CAAA;AAC5D,EAAA,OAAO,UAAU,IAAI,CAAA,CAAA;AACvB,CAHsB,EAAA,QAAA","file":"chunk-WO3QMJL2.js","sourcesContent":["import { createHash } from 'node:crypto';\n\nexport const sha256 = (input: string) => {\n const hash = createHash('sha256').update(input).digest('hex');\n return `sha256:${hash}`;\n};\n"]}
|
package/dist/chunk-XHBKWGZG.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=["AccessKey","SharedAccessKey","Password","AccountKey","Secret","SecretKey","ApiKey","Token","Key","MasterKey","PrimaryKey","SecondaryKey"];export{e as defaultSecureKeys};//# sourceMappingURL=chunk-XHBKWGZG.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defaults.ts"],"names":[],"mappings":";AAAO,IAAM,iBAAoB,GAAA,CAAC,WAAa,EAAA,iBAAA,EAAmB,UAAY,EAAA,YAAA,EAAc,QAAU,EAAA,WAAA,EAAa,QAAU,EAAA,OAAA,EAAS,KAAO,EAAA,WAAA,EAAa,cAAc,cAAc","file":"chunk-XHBKWGZG.js","sourcesContent":["export const defaultSecureKeys = ['AccessKey', 'SharedAccessKey', 'Password', 'AccountKey', 'Secret', 'SecretKey', 'ApiKey', 'Token', 'Key', 'MasterKey', 'PrimaryKey', 'SecondaryKey'] as const;\n"]}
|
package/dist/chunk-Z4KAMDJN.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("./chunk-PK6SKIKE.cjs");require("util");var s=class{static{e.__name(this,"BaseObject")}};exports.BaseObject=s;//# sourceMappingURL=chunk-Z4KAMDJN.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"names":["__name"],"mappings":"mFAIO,IAAe,aAAf,MAA0B;AAAA,EAJjC;AAIiC,IAAAA,wBAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AAAA;AAIjC","file":"chunk-Z4KAMDJN.cjs","sourcesContent":["import util, { type InspectOptions } from 'node:util';\n\nexport type InspectFunction = typeof util.inspect;\n\nexport abstract class BaseObject {\n public abstract toString(): string;\n public abstract toJSON(): string | object;\n public abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;\n}\n"]}
|
package/dist/defaults.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("./chunk-5UKICLVE.cjs");require("./chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"defaultSecureKeys",{enumerable:!0,get:function(){return e.defaultSecureKeys}});//# sourceMappingURL=defaults.cjs.map
|
package/dist/defaults.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"defaults.cjs"}
|
package/dist/defaults.d.cts
DELETED
package/dist/defaults.d.ts
DELETED
package/dist/defaults.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{defaultSecureKeys}from"./chunk-XHBKWGZG.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=defaults.js.map
|
package/dist/defaults.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"defaults.js"}
|
package/dist/sha256.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("./chunk-W5TZC6JS.cjs");require("./chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"sha256",{enumerable:!0,get:function(){return e.sha256}});//# sourceMappingURL=sha256.cjs.map
|
package/dist/sha256.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"sha256.cjs"}
|
package/dist/sha256.d.cts
DELETED
package/dist/sha256.d.ts
DELETED
package/dist/sha256.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{sha256}from"./chunk-WO3QMJL2.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=sha256.js.map
|
package/dist/sha256.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"sha256.js"}
|
package/dist/types.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("./chunk-Z4KAMDJN.cjs");require("./chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"BaseObject",{enumerable:!0,get:function(){return e.BaseObject}});//# sourceMappingURL=types.cjs.map
|
package/dist/types.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"types.cjs"}
|
package/dist/types.d.cts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import util, { InspectOptions } from 'node:util';
|
|
2
|
-
|
|
3
|
-
type InspectFunction = typeof util.inspect;
|
|
4
|
-
declare abstract class BaseObject {
|
|
5
|
-
abstract toString(): string;
|
|
6
|
-
abstract toJSON(): string | object;
|
|
7
|
-
abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export { BaseObject, type InspectFunction };
|
package/dist/types.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import util, { InspectOptions } from 'node:util';
|
|
2
|
-
|
|
3
|
-
type InspectFunction = typeof util.inspect;
|
|
4
|
-
declare abstract class BaseObject {
|
|
5
|
-
abstract toString(): string;
|
|
6
|
-
abstract toJSON(): string | object;
|
|
7
|
-
abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export { BaseObject, type InspectFunction };
|
package/dist/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{BaseObject}from"./chunk-RBCLW5Z3.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"types.js"}
|