@shellicar/core-config 2.1.4 → 2.1.5
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/CHANGELOG.md +102 -0
- package/README.md +166 -3
- package/dist/cjs/EncryptedValue.cjs +8 -1
- package/dist/cjs/EncryptedValue.cjs.map +1 -1
- package/dist/cjs/SecureConnectionString.cjs +11 -1
- package/dist/cjs/SecureConnectionString.cjs.map +1 -1
- package/dist/cjs/SecureString.cjs +10 -1
- package/dist/cjs/SecureString.cjs.map +1 -1
- package/dist/cjs/SecureURL.cjs +11 -1
- package/dist/cjs/SecureURL.cjs.map +1 -1
- package/dist/cjs/chunks/chunk-BDMFGBTR.cjs +59 -0
- package/dist/cjs/chunks/chunk-BDMFGBTR.cjs.map +1 -0
- package/dist/cjs/chunks/chunk-FOL2TBBQ.cjs +7 -0
- package/dist/cjs/chunks/chunk-FOL2TBBQ.cjs.map +1 -0
- package/dist/cjs/chunks/chunk-GGWBGRR3.cjs +29 -0
- package/dist/cjs/chunks/chunk-GGWBGRR3.cjs.map +1 -0
- package/dist/cjs/chunks/chunk-K6RFKD55.cjs +41 -0
- package/dist/cjs/chunks/chunk-K6RFKD55.cjs.map +1 -0
- package/dist/cjs/chunks/chunk-PO2PS4VB.cjs +34 -0
- package/dist/cjs/chunks/chunk-PO2PS4VB.cjs.map +1 -0
- package/dist/cjs/chunks/chunk-R4H4GKFW.cjs +82 -0
- package/dist/cjs/chunks/chunk-R4H4GKFW.cjs.map +1 -0
- package/dist/cjs/chunks/chunk-SRMLZGCX.cjs +71 -0
- package/dist/cjs/chunks/chunk-SRMLZGCX.cjs.map +1 -0
- package/dist/cjs/chunks/chunk-X6BO6XFB.cjs +7 -0
- package/dist/cjs/chunks/chunk-X6BO6XFB.cjs.map +1 -0
- package/dist/cjs/chunks/chunk-YK25AWXL.cjs +48 -0
- package/dist/cjs/chunks/chunk-YK25AWXL.cjs.map +1 -0
- package/dist/cjs/createFactory.cjs +17 -1
- package/dist/cjs/createFactory.cjs.map +1 -1
- package/dist/cjs/defaults.cjs +8 -1
- package/dist/cjs/defaults.cjs.map +1 -1
- package/dist/cjs/hash.cjs +8 -1
- package/dist/cjs/hash.cjs.map +1 -1
- package/dist/cjs/index.cjs +30 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/interfaces.cjs +14 -1
- package/dist/cjs/interfaces.cjs.map +1 -1
- package/dist/cjs/types.cjs +15 -1
- package/dist/cjs/types.cjs.map +1 -1
- package/dist/esm/EncryptedValue.js +8 -1
- package/dist/esm/EncryptedValue.js.map +1 -1
- package/dist/esm/SecureConnectionString.js +11 -1
- package/dist/esm/SecureConnectionString.js.map +1 -1
- package/dist/esm/SecureString.js +10 -1
- package/dist/esm/SecureString.js.map +1 -1
- package/dist/esm/SecureURL.js +11 -1
- package/dist/esm/SecureURL.js.map +1 -1
- package/dist/esm/chunks/chunk-2L4YGJ3C.js +71 -0
- package/dist/esm/chunks/chunk-2L4YGJ3C.js.map +1 -0
- package/dist/esm/chunks/chunk-GOUAOFCH.js +7 -0
- package/dist/esm/chunks/chunk-GOUAOFCH.js.map +1 -0
- package/dist/esm/chunks/chunk-GWYWZHV2.js +7 -0
- package/dist/esm/chunks/chunk-GWYWZHV2.js.map +1 -0
- package/dist/esm/chunks/chunk-KM6K7D2J.js +41 -0
- package/dist/esm/chunks/chunk-KM6K7D2J.js.map +1 -0
- package/dist/esm/chunks/chunk-TRDZS6YE.js +34 -0
- package/dist/esm/chunks/chunk-TRDZS6YE.js.map +1 -0
- package/dist/esm/chunks/chunk-UDMHV6JX.js +82 -0
- package/dist/esm/chunks/chunk-UDMHV6JX.js.map +1 -0
- package/dist/esm/chunks/chunk-UJTGIE6R.js +59 -0
- package/dist/esm/chunks/chunk-UJTGIE6R.js.map +1 -0
- package/dist/esm/chunks/chunk-UOGVVT4U.js +29 -0
- package/dist/esm/chunks/chunk-UOGVVT4U.js.map +1 -0
- package/dist/esm/chunks/chunk-VIUQA4IN.js +48 -0
- package/dist/esm/chunks/chunk-VIUQA4IN.js.map +1 -0
- package/dist/esm/createFactory.js +17 -1
- package/dist/esm/createFactory.js.map +1 -1
- package/dist/esm/defaults.js +8 -1
- package/dist/esm/defaults.js.map +1 -1
- package/dist/esm/hash.js +8 -1
- package/dist/esm/hash.js.map +1 -1
- package/dist/esm/index.js +30 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interfaces.js +14 -1
- package/dist/esm/interfaces.js.map +1 -1
- package/dist/esm/types.js +15 -1
- package/dist/esm/types.js.map +1 -1
- package/package.json +11 -10
- package/dist/cjs/chunk-7PP3CDDK.cjs +0 -1
- package/dist/cjs/chunk-7PP3CDDK.cjs.map +0 -1
- package/dist/cjs/chunk-FKX4J4Q2.cjs +0 -1
- package/dist/cjs/chunk-FKX4J4Q2.cjs.map +0 -1
- package/dist/cjs/chunk-J7CRMQ5Z.cjs +0 -1
- package/dist/cjs/chunk-J7CRMQ5Z.cjs.map +0 -1
- package/dist/cjs/chunk-JS7CWWUD.cjs +0 -1
- package/dist/cjs/chunk-JS7CWWUD.cjs.map +0 -1
- package/dist/cjs/chunk-JVM3GGW6.cjs +0 -1
- package/dist/cjs/chunk-JVM3GGW6.cjs.map +0 -1
- package/dist/cjs/chunk-PK6SKIKE.cjs +0 -1
- package/dist/cjs/chunk-PK6SKIKE.cjs.map +0 -1
- package/dist/cjs/chunk-VQ2XCAJT.cjs +0 -1
- package/dist/cjs/chunk-VQ2XCAJT.cjs.map +0 -1
- package/dist/cjs/chunk-WZWXGAJN.cjs +0 -1
- package/dist/cjs/chunk-WZWXGAJN.cjs.map +0 -1
- package/dist/cjs/chunk-XVDIOMZD.cjs +0 -1
- package/dist/cjs/chunk-XVDIOMZD.cjs.map +0 -1
- package/dist/esm/chunk-7QVYU63E.js +0 -1
- package/dist/esm/chunk-7QVYU63E.js.map +0 -1
- package/dist/esm/chunk-CGPJ25IS.js +0 -1
- package/dist/esm/chunk-CGPJ25IS.js.map +0 -1
- package/dist/esm/chunk-FUGQ3OFQ.js +0 -1
- package/dist/esm/chunk-FUGQ3OFQ.js.map +0 -1
- package/dist/esm/chunk-GJXVQ2LL.js +0 -1
- package/dist/esm/chunk-GJXVQ2LL.js.map +0 -1
- package/dist/esm/chunk-JAXX5FG7.js +0 -1
- package/dist/esm/chunk-JAXX5FG7.js.map +0 -1
- package/dist/esm/chunk-NWPDBO55.js +0 -1
- package/dist/esm/chunk-NWPDBO55.js.map +0 -1
- package/dist/esm/chunk-S3UXVGVK.js +0 -1
- package/dist/esm/chunk-S3UXVGVK.js.map +0 -1
- package/dist/esm/chunk-TGJY6ZQ7.js +0 -1
- package/dist/esm/chunk-TGJY6ZQ7.js.map +0 -1
- package/dist/esm/chunk-XICVVAG4.js +0 -1
- package/dist/esm/chunk-XICVVAG4.js.map +0 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [2.1.5] - 2026-04-15
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Updated dependencies to latest versions
|
|
13
|
+
|
|
14
|
+
## [2.1.4] - 2026-02-28
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Updated @shellicar/build-clean to 1.2.3, biome to 2.4.4
|
|
19
|
+
- Updated all dependencies to latest versions
|
|
20
|
+
|
|
21
|
+
### Security
|
|
22
|
+
|
|
23
|
+
- Fixed CVE-2026-25547 in @isaacs/brace-expansion ([GHSA-7h2j-956f-4vf2](https://github.com/advisories/GHSA-7h2j-956f-4vf2))
|
|
24
|
+
- Fixed CVE-2026-26996 in minimatch ([GHSA-3ppc-4f35-3m26](https://github.com/advisories/GHSA-3ppc-4f35-3m26))
|
|
25
|
+
|
|
26
|
+
## [2.1.3] - 2026-01-20
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- Export factory interface returned by `createFactory`
|
|
31
|
+
|
|
32
|
+
## [2.1.2] - 2025-12-26
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- Updated all dependencies to latest versions
|
|
37
|
+
|
|
38
|
+
## [2.1.1] - 2025-10-24
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- Updated all dependencies to latest versions
|
|
43
|
+
|
|
44
|
+
## [2.1.0] - 2025-08-24
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- Updated all dependencies to latest versions
|
|
49
|
+
|
|
50
|
+
## [2.0.0] - 2025-08-03
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
|
|
54
|
+
- Exports now use abstract interfaces instead of concrete classes for better type safety
|
|
55
|
+
- `SecureString`, `SecureConnectionString`, and `SecureURL` classes are no longer exported, use `createFactory()` instead
|
|
56
|
+
- `createFactory()` now takes a configuration object instead of a string parameter
|
|
57
|
+
- Extracted proper abstract interfaces for better type safety and extensibility
|
|
58
|
+
- Moved type definitions to dedicated interfaces file for better organization
|
|
59
|
+
|
|
60
|
+
### Security
|
|
61
|
+
|
|
62
|
+
- Replaced plain text memory storage with AES-256-GCM encryption for all secret values
|
|
63
|
+
- Added `EncryptedValue` class for secure in-memory storage with unique per-instance encryption keys
|
|
64
|
+
- Added configurable encryption provider to allow custom encryption implementations
|
|
65
|
+
|
|
66
|
+
## [1.0.1] - 2025-01-08
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
|
|
70
|
+
- Use `hs256` prefix for HMAC-SHA256
|
|
71
|
+
- Fix zod example in README
|
|
72
|
+
|
|
73
|
+
## [1.0.0] - 2025-01-08
|
|
74
|
+
|
|
75
|
+
### Added
|
|
76
|
+
|
|
77
|
+
- `secret` parameter to use `HMAC-SHA256`
|
|
78
|
+
- `createFactory` method to simplify secret creation
|
|
79
|
+
- Add `readme` example project
|
|
80
|
+
|
|
81
|
+
### Changed
|
|
82
|
+
|
|
83
|
+
- Examples in README
|
|
84
|
+
- Use `packages` and `examples` monorepo structure
|
|
85
|
+
- Use `tsup-node`
|
|
86
|
+
|
|
87
|
+
## [0.1.0] - 2025-01-07
|
|
88
|
+
|
|
89
|
+
### Added
|
|
90
|
+
|
|
91
|
+
- Initial release
|
|
92
|
+
|
|
93
|
+
[2.1.5]: https://github.com/shellicar/ecosystem/releases/tag/core-config@2.1.5
|
|
94
|
+
[2.1.4]: https://github.com/shellicar/ecosystem/releases/tag/2.1.4
|
|
95
|
+
[2.1.3]: https://github.com/shellicar/ecosystem/releases/tag/2.1.3
|
|
96
|
+
[2.1.2]: https://github.com/shellicar/ecosystem/releases/tag/2.1.2
|
|
97
|
+
[2.1.1]: https://github.com/shellicar/ecosystem/releases/tag/2.1.1
|
|
98
|
+
[2.1.0]: https://github.com/shellicar/ecosystem/releases/tag/2.1.0
|
|
99
|
+
[2.0.0]: https://github.com/shellicar/ecosystem/releases/tag/2.0.0
|
|
100
|
+
[1.0.1]: https://github.com/shellicar/ecosystem/releases/tag/1.0.1
|
|
101
|
+
[1.0.0]: https://github.com/shellicar/ecosystem/releases/tag/1.0.0
|
|
102
|
+
[0.1.0]: https://github.com/shellicar/ecosystem/releases/tag/0.1.0
|
package/README.md
CHANGED
|
@@ -3,7 +3,13 @@
|
|
|
3
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/ecosystem/actions/workflows/node.js.yml)
|
|
7
|
+
|
|
8
|
+
## Features
|
|
9
|
+
|
|
10
|
+
- 🔐 **SecureString** - Safely handle sensitive string values with automatic hashing for logs and serialisation
|
|
11
|
+
- 🔗 **SecureConnectionString** - Parse and protect connection strings with configurable secret key detection
|
|
12
|
+
- 🌐 **SecureURL** - Handle URLs while protecting sensitive components like passwords
|
|
7
13
|
|
|
8
14
|
## Installation & Quick Start
|
|
9
15
|
|
|
@@ -25,6 +31,163 @@ console.log(factory.connectionString('Server=myserver.uri;Password=myPassword123
|
|
|
25
31
|
console.log(factory.url(new URL('http://myuser:myPassword123@myserver.uri')));
|
|
26
32
|
```
|
|
27
33
|
|
|
28
|
-
|
|
34
|
+
<!-- BEGIN_ECOSYSTEM -->
|
|
35
|
+
|
|
36
|
+
## @shellicar TypeScript Ecosystem
|
|
37
|
+
|
|
38
|
+
### Core Libraries
|
|
39
|
+
|
|
40
|
+
- [`@shellicar/core-config`](https://github.com/shellicar/ecosystem/tree/main/packages/core-config) - A library for securely handling sensitive configuration values like connection strings, URLs, and secrets.
|
|
41
|
+
- [`@shellicar/core-di`](https://github.com/shellicar/core-di) - A basic dependency injection library.
|
|
42
|
+
|
|
43
|
+
### Reference Architectures
|
|
44
|
+
|
|
45
|
+
- [`@shellicar/reference-foundation`](https://github.com/shellicar/reference-foundation) - A comprehensive starter repository. Illustrates individual concepts.
|
|
46
|
+
- [`@shellicar/reference-enterprise`](https://github.com/shellicar/reference-enterprise) - A comprehensive starter repository. Can be used as the basis for creating a new Azure application workload.
|
|
47
|
+
|
|
48
|
+
### Build Tools
|
|
49
|
+
|
|
50
|
+
- [`@shellicar/build-clean`](https://github.com/shellicar/build-clean) - Build plugin that automatically cleans unused files from output directories.
|
|
51
|
+
- [`@shellicar/build-version`](https://github.com/shellicar/build-version) - Build plugin that calculates and exposes version information through a virtual module import.
|
|
52
|
+
- [`@shellicar/build-graphql`](https://github.com/shellicar/build-graphql) - Build plugin that loads GraphQL files and makes them available through a virtual module import.
|
|
53
|
+
|
|
54
|
+
### Framework Adapters
|
|
55
|
+
|
|
56
|
+
- [`@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.
|
|
57
|
+
- [`@shellicar/cosmos-query-builder`](https://github.com/shellicar/cosmos-query-builder) - Helper class for type safe advanced queries for Cosmos DB (Sql Core).
|
|
58
|
+
|
|
59
|
+
### Logging & Monitoring
|
|
60
|
+
|
|
61
|
+
- [`@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.
|
|
62
|
+
- [`@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)
|
|
63
|
+
|
|
64
|
+
<!-- END_ECOSYSTEM -->
|
|
65
|
+
|
|
66
|
+
## Motivation
|
|
67
|
+
|
|
68
|
+
To make storing and comparing configuration including secrets easy and simple.
|
|
69
|
+
|
|
70
|
+
You can easily output or display your configuration, even secret/secure values, without having to manually hash them or extract them.
|
|
71
|
+
|
|
72
|
+
## Feature Examples
|
|
73
|
+
|
|
74
|
+
Three main classes, `SecureString`, `SecureConnectionString`, and `SecureURL`.
|
|
75
|
+
|
|
76
|
+
See [readme examples](./examples/readme/src) for example source code.
|
|
77
|
+
|
|
78
|
+
- Handle strings.
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { createFactory } from '@shellicar/core-config';
|
|
82
|
+
|
|
83
|
+
const factory = createFactory();
|
|
84
|
+
const secret = factory.string('myPassword123');
|
|
85
|
+
|
|
86
|
+
console.log(secret.toString());
|
|
87
|
+
// sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716
|
|
88
|
+
|
|
89
|
+
console.log(JSON.stringify({ secret }));
|
|
90
|
+
// {"secret":"sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716"}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
- Handle connection strings (`Key=Value[;Key=Value...]`).
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
import { createFactory } from '@shellicar/core-config';
|
|
97
|
+
|
|
98
|
+
const factory = createFactory();
|
|
99
|
+
const conn = factory.connectionString('Server=myserver;Password=myPassword123');
|
|
100
|
+
console.log(conn.toString());
|
|
101
|
+
// Server=myserver;Password=sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716
|
|
102
|
+
|
|
103
|
+
// Custom secret keys
|
|
104
|
+
console.log(factory.connectionString('Server=myserver;SuperSecretKey=myPassword123', ['SuperSecretKey']));
|
|
105
|
+
// {
|
|
106
|
+
// Server: 'myserver',
|
|
107
|
+
// SuperSecretKey: 'sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716'
|
|
108
|
+
// }
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
- Handle URLs with passwords.information:
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
import { createFactory } from '@shellicar/core-config';
|
|
115
|
+
|
|
116
|
+
const factory = createFactory();
|
|
117
|
+
const url = new URL('https://user:myPassword123@example.com?key=value');
|
|
118
|
+
const secureUrl = factory.url(url);
|
|
119
|
+
|
|
120
|
+
console.log(secureUrl.toString());
|
|
121
|
+
// https://user:sha256%3A71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716@example.com/?key=value
|
|
122
|
+
|
|
123
|
+
console.log(secureUrl);
|
|
124
|
+
// {
|
|
125
|
+
// href: 'https://user@example.com/',
|
|
126
|
+
// password: 'sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716',
|
|
127
|
+
// searchParams: { key: 'value' }
|
|
128
|
+
// }
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
- Use HMAC.
|
|
132
|
+
|
|
133
|
+
```ts
|
|
134
|
+
import { createFactory } from '@shellicar/core-config';
|
|
135
|
+
|
|
136
|
+
const factory = createFactory({ secret: 'mySecret' });
|
|
137
|
+
const secret = factory.string('myPassword123');
|
|
138
|
+
|
|
139
|
+
console.log(secret.toString());
|
|
140
|
+
// sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716
|
|
141
|
+
|
|
142
|
+
console.log(JSON.stringify({ secret }));
|
|
143
|
+
// {"secret":"sha256:71d4ec024886c1c8e4707fb02b46fd568df44e77dd5055cadc3451747f0f2716"}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Default Secure Keys
|
|
147
|
+
|
|
148
|
+
For a list of default secure keys for connection strings, see [defaults.ts](./src/defaults.ts).
|
|
149
|
+
|
|
150
|
+
### Secure Output
|
|
151
|
+
|
|
152
|
+
All secure types implement proper toString(), toJSON(), and inspect() methods to ensure sensitive data is never accidentally exposed through logs or serialisation.
|
|
153
|
+
|
|
154
|
+
### Real World Example
|
|
155
|
+
|
|
156
|
+
Using with Zod for environment variable validation:
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
import { env } from 'node:process';
|
|
160
|
+
import { createFactory } from '@shellicar/core-config';
|
|
161
|
+
import { z } from 'zod';
|
|
162
|
+
|
|
163
|
+
const factory = createFactory();
|
|
164
|
+
|
|
165
|
+
const envSchema = z.object({
|
|
166
|
+
// MongoDB connection string with username/password
|
|
167
|
+
MONGODB_URL: z.url().transform((x) => factory.url(new URL(x))),
|
|
168
|
+
|
|
169
|
+
// API key for external service
|
|
170
|
+
API_KEY: z
|
|
171
|
+
.string()
|
|
172
|
+
.min(1)
|
|
173
|
+
.transform((x) => factory.string(x)),
|
|
174
|
+
|
|
175
|
+
// SQL Server connection string
|
|
176
|
+
SQL_CONNECTION: z.string().transform((x) => factory.connectionString(x)),
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// Parse environment variables
|
|
180
|
+
const config = envSchema.parse(env);
|
|
181
|
+
|
|
182
|
+
// Values are now strongly typed and secured
|
|
183
|
+
console.log(config.MONGODB_URL.toString());
|
|
184
|
+
// mongodb://myuser:sha256%3A...@mongodb.example.com/
|
|
185
|
+
|
|
186
|
+
console.log(config.API_KEY.toString());
|
|
187
|
+
// sha256:...
|
|
188
|
+
|
|
189
|
+
console.log(config.SQL_CONNECTION.toString());
|
|
190
|
+
// Server=myserver;Database=mydb;User Id=admin;Password=sha256:...
|
|
191
|
+
```
|
|
29
192
|
|
|
30
|
-
|
|
193
|
+
All sensitive values are automatically hashed in logs and serialisation, while still being accessible via the `secretValue` property when needed.
|
|
@@ -1 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkYK25AWXLcjs = require('./chunks/chunk-YK25AWXL.cjs');
|
|
4
|
+
require('./chunks/chunk-X6BO6XFB.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
exports.EncryptedValue = _chunkYK25AWXLcjs.EncryptedValue;
|
|
8
|
+
//# sourceMappingURL=EncryptedValue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"EncryptedValue.cjs"}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/EncryptedValue.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,+DAAoC;AACpC,uCAAoC;AACpC;AACE;AACF,0DAAC","file":"/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/EncryptedValue.cjs"}
|
|
@@ -1 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkSRMLZGCXcjs = require('./chunks/chunk-SRMLZGCX.cjs');
|
|
4
|
+
require('./chunks/chunk-BDMFGBTR.cjs');
|
|
5
|
+
require('./chunks/chunk-PO2PS4VB.cjs');
|
|
6
|
+
require('./chunks/chunk-GGWBGRR3.cjs');
|
|
7
|
+
require('./chunks/chunk-X6BO6XFB.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.SecureConnectionString = _chunkSRMLZGCXcjs.SecureConnectionString;
|
|
11
|
+
//# sourceMappingURL=SecureConnectionString.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"SecureConnectionString.cjs"}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/SecureConnectionString.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,+DAAoC;AACpC,uCAAoC;AACpC,uCAAoC;AACpC,uCAAoC;AACpC,uCAAoC;AACpC;AACE;AACF,0EAAC","file":"/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/SecureConnectionString.cjs"}
|
|
@@ -1 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkBDMFGBTRcjs = require('./chunks/chunk-BDMFGBTR.cjs');
|
|
4
|
+
require('./chunks/chunk-PO2PS4VB.cjs');
|
|
5
|
+
require('./chunks/chunk-GGWBGRR3.cjs');
|
|
6
|
+
require('./chunks/chunk-X6BO6XFB.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.SecureString = _chunkBDMFGBTRcjs.SecureString;
|
|
10
|
+
//# sourceMappingURL=SecureString.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"SecureString.cjs"}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/SecureString.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,+DAAoC;AACpC,uCAAoC;AACpC,uCAAoC;AACpC,uCAAoC;AACpC;AACE;AACF,sDAAC","file":"/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/SecureString.cjs"}
|
package/dist/cjs/SecureURL.cjs
CHANGED
|
@@ -1 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkR4H4GKFWcjs = require('./chunks/chunk-R4H4GKFW.cjs');
|
|
4
|
+
require('./chunks/chunk-BDMFGBTR.cjs');
|
|
5
|
+
require('./chunks/chunk-PO2PS4VB.cjs');
|
|
6
|
+
require('./chunks/chunk-GGWBGRR3.cjs');
|
|
7
|
+
require('./chunks/chunk-X6BO6XFB.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.SecureURL = _chunkR4H4GKFWcjs.SecureURL;
|
|
11
|
+
//# sourceMappingURL=SecureURL.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"SecureURL.cjs"}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/SecureURL.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,+DAAoC;AACpC,uCAAoC;AACpC,uCAAoC;AACpC,uCAAoC;AACpC,uCAAoC;AACpC;AACE;AACF,gDAAC","file":"/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/SecureURL.cjs"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
+
|
|
3
|
+
var _chunkPO2PS4VBcjs = require('./chunk-PO2PS4VB.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkGGWBGRR3cjs = require('./chunk-GGWBGRR3.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkX6BO6XFBcjs = require('./chunk-X6BO6XFB.cjs');
|
|
10
|
+
|
|
11
|
+
// src/SecureString.ts
|
|
12
|
+
var _nodeutil = require('node:util'); var _nodeutil2 = _interopRequireDefault(_nodeutil);
|
|
13
|
+
var SecureString = class _SecureString extends _chunkPO2PS4VBcjs.ISecureString {
|
|
14
|
+
static {
|
|
15
|
+
_chunkX6BO6XFBcjs.__name.call(void 0, this, "SecureString");
|
|
16
|
+
}
|
|
17
|
+
#encryptedValue;
|
|
18
|
+
#hash;
|
|
19
|
+
get secretValue() {
|
|
20
|
+
return this.#encryptedValue.getValue();
|
|
21
|
+
}
|
|
22
|
+
constructor(value, config) {
|
|
23
|
+
super();
|
|
24
|
+
this.#encryptedValue = config.encryptionProvider.encrypt(value);
|
|
25
|
+
this.#hash = _chunkGGWBGRR3cjs.hash.call(void 0, value, config.secret);
|
|
26
|
+
}
|
|
27
|
+
static factory(config) {
|
|
28
|
+
return (value) => _SecureString.from(value, config);
|
|
29
|
+
}
|
|
30
|
+
static from(value, config) {
|
|
31
|
+
if (value === null) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (value === void 0) {
|
|
35
|
+
return void 0;
|
|
36
|
+
}
|
|
37
|
+
return new _SecureString(value, config);
|
|
38
|
+
}
|
|
39
|
+
toString() {
|
|
40
|
+
return this.#hash;
|
|
41
|
+
}
|
|
42
|
+
toJSON() {
|
|
43
|
+
return this.toString();
|
|
44
|
+
}
|
|
45
|
+
[_nodeutil2.default.inspect.custom](depth, options, inspect) {
|
|
46
|
+
if (depth < 0) {
|
|
47
|
+
return "[SecureString]";
|
|
48
|
+
}
|
|
49
|
+
const newOptions = Object.assign({}, options, {
|
|
50
|
+
depth: options.depth == null ? null : options.depth - 1
|
|
51
|
+
});
|
|
52
|
+
return inspect(this.toJSON(), newOptions);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
exports.SecureString = SecureString;
|
|
59
|
+
//# sourceMappingURL=chunk-BDMFGBTR.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/chunks/chunk-BDMFGBTR.cjs","../../../src/SecureString.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,yFAA0C;AAKnC,IAAM,aAAA,EAAN,MAAM,cAAA,QAAqB,gCAAc;AAAA,EALhD,OAKgD;AAAA,IAAA,sCAAA,IAAA,EAAA,cAAA,CAAA;AAAA,EAAA;AAAA,EACrC,CAAA,cAAA;AAAA,EACA,CAAA,IAAA;AAAA,EAET,IAAW,WAAA,CAAA,EAAsB;AAC/B,IAAA,OAAO,IAAA,CAAK,CAAA,cAAA,CAAgB,QAAA,CAAS,CAAA;AAAA,EACvC;AAAA,EAEQ,WAAA,CAAY,KAAA,EAAe,MAAA,EAAsB;AACvD,IAAA,KAAA,CAAM,CAAA;AACN,IAAA,IAAA,CAAK,CAAA,eAAA,EAAkB,MAAA,CAAO,kBAAA,CAAmB,OAAA,CAAQ,KAAK,CAAA;AAC9D,IAAA,IAAA,CAAK,CAAA,KAAA,EAAQ,oCAAA,KAAK,EAAO,MAAA,CAAO,MAAM,CAAA;AAAA,EACxC;AAAA,EAEA,OAAO,OAAA,CAAQ,MAAA,EAAuD;AACpE,IAAA,OAAO,CAAC,KAAA,EAAA,GAAkB,aAAA,CAAa,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA;AAAA,EAC3D;AAAA,EAEA,OAAc,IAAA,CAA0C,KAAA,EAAU,MAAA,EAA2D;AAC3H,IAAA,GAAA,CAAI,MAAA,IAAU,IAAA,EAAM;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,GAAA,CAAI,MAAA,IAAU,KAAA,CAAA,EAAW;AACvB,MAAA,OAAO,KAAA,CAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAI,aAAA,CAAa,KAAA,EAAO,MAAM,CAAA;AAAA,EACvC;AAAA,EAEgB,QAAA,CAAA,EAAW;AACzB,IAAA,OAAO,IAAA,CAAK,CAAA,IAAA;AAAA,EACd;AAAA,EACgB,MAAA,CAAA,EAAS;AACvB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,CAAA;AAAA,EACvB;AAAA,EACA,CAAU,kBAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,CAAE,KAAA,EAAe,OAAA,EAAyB,OAAA,EAAkC;AACvG,IAAA,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAG;AACb,MAAA,OAAO,gBAAA;AAAA,IACT;AACA,IAAA,MAAM,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,EAAG,OAAA,EAAS;AAAA,MAC5C,KAAA,EAAO,OAAA,CAAQ,MAAA,GAAS,KAAA,EAAO,KAAA,EAAO,OAAA,CAAQ,MAAA,EAAQ;AAAA,IACxD,CAAC,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,UAAU,CAAA;AAAA,EAC1C;AACF,CAAA;ADMA;AACA;AACE;AACF,oCAAC","file":"/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/chunks/chunk-BDMFGBTR.cjs","sourcesContent":[null,"import util, { type InspectOptions } from 'node:util';\nimport { hash } from './hash';\nimport { ISecureString } from './interfaces';\nimport type { IEncryptedValue, InspectFunction, SecureConfig } from './types';\n\nexport class SecureString extends ISecureString {\n readonly #encryptedValue: IEncryptedValue;\n readonly #hash: string;\n\n public get secretValue(): string {\n return this.#encryptedValue.getValue();\n }\n\n private constructor(value: string, config: SecureConfig) {\n super();\n this.#encryptedValue = config.encryptionProvider.encrypt(value);\n this.#hash = hash(value, config.secret);\n }\n\n static factory(config: SecureConfig): (value: string) => SecureString {\n return (value: string) => SecureString.from(value, config);\n }\n\n public static from<T extends string | null | undefined>(value: T, config: SecureConfig): 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, config) 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"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/defaults.ts
|
|
2
|
+
var defaultSecureKeys = ["AccessKey", "SharedAccessKey", "Password", "AccountKey", "Secret", "SecretKey", "ApiKey", "Token", "Key", "MasterKey", "PrimaryKey", "SecondaryKey"];
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
exports.defaultSecureKeys = defaultSecureKeys;
|
|
7
|
+
//# sourceMappingURL=chunk-FOL2TBBQ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/chunks/chunk-FOL2TBBQ.cjs","../../../src/defaults.ts"],"names":[],"mappings":"AAAA;ACEO,IAAM,kBAAA,EAAoB,CAAC,WAAA,EAAa,iBAAA,EAAmB,UAAA,EAAY,YAAA,EAAc,QAAA,EAAU,WAAA,EAAa,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,YAAA,EAAc,cAAc,CAAA;ADAtL;AACA;AACE;AACF,8CAAC","file":"/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/chunks/chunk-FOL2TBBQ.cjs","sourcesContent":[null,"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"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkX6BO6XFBcjs = require('./chunk-X6BO6XFB.cjs');
|
|
4
|
+
|
|
5
|
+
// src/hash.ts
|
|
6
|
+
var _nodecrypto = require('node:crypto');
|
|
7
|
+
var algorithms = {
|
|
8
|
+
sha256: /* @__PURE__ */ _chunkX6BO6XFBcjs.__name.call(void 0, () => ({
|
|
9
|
+
hash: /* @__PURE__ */ _chunkX6BO6XFBcjs.__name.call(void 0, (x) => _nodecrypto.createHash.call(void 0, "sha256").update(x).digest("hex"), "hash"),
|
|
10
|
+
prefix: "sha256"
|
|
11
|
+
}), "sha256"),
|
|
12
|
+
hs256: /* @__PURE__ */ _chunkX6BO6XFBcjs.__name.call(void 0, (secret) => ({
|
|
13
|
+
hash: /* @__PURE__ */ _chunkX6BO6XFBcjs.__name.call(void 0, (x) => _nodecrypto.createHmac.call(void 0, "sha256", secret).update(x).digest("hex"), "hash"),
|
|
14
|
+
prefix: "hs256"
|
|
15
|
+
}), "hs256")
|
|
16
|
+
};
|
|
17
|
+
var getAlgorithm = /* @__PURE__ */ _chunkX6BO6XFBcjs.__name.call(void 0, (secret) => {
|
|
18
|
+
return secret == null ? algorithms.sha256() : algorithms.hs256(secret);
|
|
19
|
+
}, "getAlgorithm");
|
|
20
|
+
var hash = /* @__PURE__ */ _chunkX6BO6XFBcjs.__name.call(void 0, (input, secret) => {
|
|
21
|
+
const alg = getAlgorithm(secret);
|
|
22
|
+
const hash2 = alg.hash(input);
|
|
23
|
+
return `${alg.prefix}:${hash2}`;
|
|
24
|
+
}, "hash");
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
exports.hash = hash;
|
|
29
|
+
//# sourceMappingURL=chunk-GGWBGRR3.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/chunks/chunk-GGWBGRR3.cjs","../../../src/hash.ts"],"names":["hash"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA,yCAAuC;AAOvC,IAAM,WAAA,EAAa;AAAA,EACjB,MAAA,kBAAQ,sCAAA,CAAA,EAAA,GAAA,CAAO;AAAA,IACb,IAAA,kBAAM,sCAAA,CAAC,CAAA,EAAA,GAAc,oCAAA,QAAmB,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAA1D,MAAA,CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,EACV,CAAA,CAAA,EAHQ,QAAA,CAAA;AAAA,EAIR,KAAA,kBAAO,sCAAA,CAAC,MAAA,EAAA,GAAA,CAAoB;AAAA,IAC1B,IAAA,kBAAM,sCAAA,CAAC,CAAA,EAAA,GAAc,oCAAA,QAAW,EAAU,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAlE,MAAA,CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,EACV,CAAA,CAAA,EAHO,OAAA;AAIT,CAAA;AAEA,IAAM,aAAA,kBAAe,sCAAA,CAAC,MAAA,EAAA,GAAyC;AAC7D,EAAA,OAAO,OAAA,GAAU,KAAA,EAAO,UAAA,CAAW,MAAA,CAAO,EAAA,EAAI,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA;AACvE,CAAA,EAFqB,cAAA,CAAA;AAId,IAAM,KAAA,kBAAO,sCAAA,CAAC,KAAA,EAAe,MAAA,EAAA,GAA0B;AAC5D,EAAA,MAAM,IAAA,EAAM,YAAA,CAAa,MAAM,CAAA;AAC/B,EAAA,MAAMA,MAAAA,EAAO,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,EAAA,OAAO,CAAA,EAAA;AAHW;ADEV;AACA;AACA;AACA","file":"/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/chunks/chunk-GGWBGRR3.cjs","sourcesContent":[null,"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 | null): HashAlgorithm => {\n return secret == null ? algorithms.sha256() : algorithms.hs256(secret);\n};\n\nexport const hash = (input: string, secret: string | null) => {\n const alg = getAlgorithm(secret);\n const hash = alg.hash(input);\n return `${alg.prefix}:${hash}`;\n};\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
+
|
|
3
|
+
var _chunkYK25AWXLcjs = require('./chunk-YK25AWXL.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkSRMLZGCXcjs = require('./chunk-SRMLZGCX.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkR4H4GKFWcjs = require('./chunk-R4H4GKFW.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkBDMFGBTRcjs = require('./chunk-BDMFGBTR.cjs');
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
var _chunkFOL2TBBQcjs = require('./chunk-FOL2TBBQ.cjs');
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
var _chunkX6BO6XFBcjs = require('./chunk-X6BO6XFB.cjs');
|
|
19
|
+
|
|
20
|
+
// src/createFactory.ts
|
|
21
|
+
var defaultEncryptionProvider = {
|
|
22
|
+
encrypt: /* @__PURE__ */ _chunkX6BO6XFBcjs.__name.call(void 0, (value) => new (0, _chunkYK25AWXLcjs.EncryptedValue)(value), "encrypt")
|
|
23
|
+
};
|
|
24
|
+
var createFactory = /* @__PURE__ */ _chunkX6BO6XFBcjs.__name.call(void 0, (options) => {
|
|
25
|
+
const config = {
|
|
26
|
+
secret: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _ => _.secret]), () => ( null)),
|
|
27
|
+
encryptionProvider: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _2 => _2.encryptionProvider]), () => ( defaultEncryptionProvider)),
|
|
28
|
+
secretKeys: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _3 => _3.secretKeys]), () => ( _chunkFOL2TBBQcjs.defaultSecureKeys))
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
string: _chunkBDMFGBTRcjs.SecureString.factory(config),
|
|
32
|
+
connectionString: _chunkSRMLZGCXcjs.SecureConnectionString.factory(config),
|
|
33
|
+
url: _chunkR4H4GKFWcjs.SecureURL.factory(config)
|
|
34
|
+
};
|
|
35
|
+
}, "createFactory");
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
exports.defaultEncryptionProvider = defaultEncryptionProvider; exports.createFactory = createFactory;
|
|
41
|
+
//# sourceMappingURL=chunk-K6RFKD55.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/chunks/chunk-K6RFKD55.cjs","../../../src/createFactory.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACXO,IAAM,0BAAA,EAAiD;AAAA,EAC5D,OAAA,kBAAS,sCAAA,CAAC,KAAA,EAAA,GAAkB,IAAI,qCAAA,CAAe,KAAK,CAAA,EAA3C,SAAA;AACX,CAAA;AAEO,IAAM,cAAA,kBAAgB,sCAAA,CAAC,OAAA,EAAA,GAAoD;AAChF,EAAA,MAAM,OAAA,EAAuB;AAAA,IAC3B,MAAA,mCAAQ,OAAA,2BAAS,QAAA,UAAU,MAAA;AAAA,IAC3B,kBAAA,mCAAoB,OAAA,6BAAS,oBAAA,UAAsB,2BAAA;AAAA,IACnD,UAAA,mCAAY,OAAA,6BAAS,YAAA,UAAc;AAAA,EACrC,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,8BAAA,CAAa,OAAA,CAAQ,MAAM,CAAA;AAAA,IACnC,gBAAA,EAAkB,wCAAA,CAAuB,OAAA,CAAQ,MAAM,CAAA;AAAA,IACvD,GAAA,EAAK,2BAAA,CAAU,OAAA,CAAQ,MAAM;AAAA,EAC/B,CAAA;AACF,CAAA,EAZ6B,eAAA,CAAA;ADuB7B;AACA;AACE;AACA;AACF,qGAAC","file":"/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/chunks/chunk-K6RFKD55.cjs","sourcesContent":[null,"import { defaultSecureKeys } from './defaults';\nimport { EncryptedValue } from './EncryptedValue';\nimport type { ISecureFactory } from './interfaces';\nimport { SecureConnectionString } from './SecureConnectionString';\nimport { SecureString } from './SecureString';\nimport { SecureURL } from './SecureURL';\nimport type { IEncryptionProvider, SecureConfig } from './types';\n\nexport const defaultEncryptionProvider: IEncryptionProvider = {\n encrypt: (value: string) => new EncryptedValue(value),\n};\n\nexport const createFactory = (options?: Partial<SecureConfig>): ISecureFactory => {\n const config: SecureConfig = {\n secret: options?.secret ?? null,\n encryptionProvider: options?.encryptionProvider ?? defaultEncryptionProvider,\n secretKeys: options?.secretKeys ?? defaultSecureKeys,\n };\n\n return {\n string: SecureString.factory(config),\n connectionString: SecureConnectionString.factory(config),\n url: SecureURL.factory(config),\n };\n};\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkX6BO6XFBcjs = require('./chunk-X6BO6XFB.cjs');
|
|
4
|
+
|
|
5
|
+
// src/interfaces.ts
|
|
6
|
+
require('node:util');
|
|
7
|
+
var ISecureString = class {
|
|
8
|
+
static {
|
|
9
|
+
_chunkX6BO6XFBcjs.__name.call(void 0, this, "ISecureString");
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var ISecureConnectionString = class {
|
|
13
|
+
static {
|
|
14
|
+
_chunkX6BO6XFBcjs.__name.call(void 0, this, "ISecureConnectionString");
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var ISecureURL = class {
|
|
18
|
+
static {
|
|
19
|
+
_chunkX6BO6XFBcjs.__name.call(void 0, this, "ISecureURL");
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var ISecureFactory = class {
|
|
23
|
+
static {
|
|
24
|
+
_chunkX6BO6XFBcjs.__name.call(void 0, this, "ISecureFactory");
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
exports.ISecureString = ISecureString; exports.ISecureConnectionString = ISecureConnectionString; exports.ISecureURL = ISecureURL; exports.ISecureFactory = ISecureFactory;
|
|
34
|
+
//# sourceMappingURL=chunk-PO2PS4VB.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/chunks/chunk-PO2PS4VB.cjs","../../../src/interfaces.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA,qBAA0C;AAGnC,IAAe,cAAA,EAAf,MAAmD;AAAA,EAH1D,OAG0D;AAAA,IAAA,sCAAA,IAAA,EAAA,eAAA,CAAA;AAAA,EAAA;AAK1D,CAAA;AAEO,IAAe,wBAAA,EAAf,MAA6D;AAAA,EAVpE,OAUoE;AAAA,IAAA,sCAAA,IAAA,EAAA,yBAAA,CAAA;AAAA,EAAA;AAKpE,CAAA;AAEO,IAAe,WAAA,EAAf,MAAgD;AAAA,EAjBvD,OAiBuD;AAAA,IAAA,sCAAA,IAAA,EAAA,YAAA,CAAA;AAAA,EAAA;AAKvD,CAAA;AAEO,IAAe,eAAA,EAAf,MAA8B;AAAA,EAxBrC,OAwBqC;AAAA,IAAA,sCAAA,IAAA,EAAA,gBAAA,CAAA;AAAA,EAAA;AAIrC,CAAA;ADFA;AACA;AACE;AACA;AACA;AACA;AACF,2KAAC","file":"/home/runner/work/ecosystem/ecosystem/packages/core-config/dist/cjs/chunks/chunk-PO2PS4VB.cjs","sourcesContent":[null,"import util, { type InspectOptions } from 'node:util';\nimport type { BaseObject, InspectFunction } from './types';\n\nexport abstract class ISecureString implements 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 public abstract get secretValue(): string;\n}\n\nexport abstract class ISecureConnectionString implements 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 public abstract get secretValue(): string;\n}\n\nexport abstract class ISecureURL implements BaseObject {\n public abstract toString(): string;\n public abstract toJSON(): object;\n public abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;\n public abstract get secretValue(): URL;\n}\n\nexport abstract class ISecureFactory {\n public abstract string(value: string): ISecureString;\n public abstract connectionString(value: string, secretKeys?: readonly string[]): ISecureConnectionString;\n public abstract url(value: URL): ISecureURL;\n}\n"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
+
|
|
3
|
+
var _chunkBDMFGBTRcjs = require('./chunk-BDMFGBTR.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkPO2PS4VBcjs = require('./chunk-PO2PS4VB.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkX6BO6XFBcjs = require('./chunk-X6BO6XFB.cjs');
|
|
10
|
+
|
|
11
|
+
// src/SecureURL.ts
|
|
12
|
+
var _nodeutil = require('node:util'); var _nodeutil2 = _interopRequireDefault(_nodeutil);
|
|
13
|
+
var SecureURL = class _SecureURL extends _chunkPO2PS4VBcjs.ISecureURL {
|
|
14
|
+
static {
|
|
15
|
+
_chunkX6BO6XFBcjs.__name.call(void 0, this, "SecureURL");
|
|
16
|
+
}
|
|
17
|
+
#encryptedValue;
|
|
18
|
+
#password;
|
|
19
|
+
get secretValue() {
|
|
20
|
+
return new URL(this.#encryptedValue.getValue());
|
|
21
|
+
}
|
|
22
|
+
constructor(value, config) {
|
|
23
|
+
super();
|
|
24
|
+
this.#encryptedValue = config.encryptionProvider.encrypt(value.href);
|
|
25
|
+
this.#password = _chunkBDMFGBTRcjs.SecureString.from(value.password || null, config);
|
|
26
|
+
}
|
|
27
|
+
static factory(config) {
|
|
28
|
+
return (value) => _SecureURL.from(value, config);
|
|
29
|
+
}
|
|
30
|
+
static from(value, config) {
|
|
31
|
+
if (value === null) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (value === void 0) {
|
|
35
|
+
return void 0;
|
|
36
|
+
}
|
|
37
|
+
return new _SecureURL(value, config);
|
|
38
|
+
}
|
|
39
|
+
toString() {
|
|
40
|
+
const originalUrl = this.secretValue;
|
|
41
|
+
const newUrl = new URL(originalUrl.href);
|
|
42
|
+
if (this.#password !== null) {
|
|
43
|
+
newUrl.password = this.#password.toString();
|
|
44
|
+
}
|
|
45
|
+
return newUrl.href;
|
|
46
|
+
}
|
|
47
|
+
toJSON() {
|
|
48
|
+
const originalUrl = this.secretValue;
|
|
49
|
+
const newUrl = new URL(originalUrl.href);
|
|
50
|
+
newUrl.password = "";
|
|
51
|
+
const searchParams = new URLSearchParams(newUrl.searchParams);
|
|
52
|
+
newUrl.search = "";
|
|
53
|
+
let password;
|
|
54
|
+
if (this.#password !== null) {
|
|
55
|
+
password = this.#password.toString();
|
|
56
|
+
}
|
|
57
|
+
const result = {
|
|
58
|
+
href: newUrl.href
|
|
59
|
+
};
|
|
60
|
+
if (password !== void 0) {
|
|
61
|
+
result.password = password;
|
|
62
|
+
}
|
|
63
|
+
if (searchParams.size > 0) {
|
|
64
|
+
result.searchParams = Object.fromEntries(searchParams);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
[_nodeutil2.default.inspect.custom](depth, options, inspect) {
|
|
69
|
+
if (depth < 0) {
|
|
70
|
+
return "[SecureURL]";
|
|
71
|
+
}
|
|
72
|
+
const newOptions = Object.assign({}, options, {
|
|
73
|
+
depth: options.depth == null ? null : options.depth - 1
|
|
74
|
+
});
|
|
75
|
+
return inspect(this.toJSON(), newOptions);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
exports.SecureURL = SecureURL;
|
|
82
|
+
//# sourceMappingURL=chunk-R4H4GKFW.cjs.map
|