@breadstone/archipel-mcp 0.0.33 → 0.0.35
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/data/guides/email-delivery.md +68 -24
- package/data/guides/email-templates.md +80 -38
- package/data/packages/platform-feature-flags/api/Class.AzureFeatureFlagReader.md +9 -9
- package/data/packages/platform-feature-flags/api/Class.AzureFeatureFlagWriter.md +9 -9
- package/data/packages/platform-feature-flags/api/Class.FeatureFlagError.md +4 -4
- package/data/packages/platform-feature-flags/api/Class.FeatureFlagGuard.md +3 -3
- package/data/packages/platform-feature-flags/api/Class.FeatureFlagModule.md +2 -2
- package/data/packages/platform-feature-flags/api/Class.FeatureFlagReaderPort.md +6 -6
- package/data/packages/platform-feature-flags/api/Class.FeatureFlagWriterPort.md +7 -7
- package/data/packages/platform-feature-flags/api/Class.VercelFeatureFlagReader.md +8 -8
- package/data/packages/platform-feature-flags/api/Class.VercelFeatureFlagWriter.md +9 -9
- package/data/packages/platform-feature-flags/api/Function.FeatureFlag.md +1 -1
- package/data/packages/platform-feature-flags/api/Interface.IFeatureFlagContext.md +4 -4
- package/data/packages/platform-feature-flags/api/Interface.IFeatureFlagDefinition.md +6 -6
- package/data/packages/platform-feature-flags/api/Interface.IFeatureFlagEvaluation.md +4 -4
- package/data/packages/platform-feature-flags/api/Interface.IFeatureFlagModuleOptions.md +5 -5
- package/data/packages/platform-feature-flags/api/Variable.AZURE_APPCONFIG_CONNECTION_STRING.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.AZURE_APPCONFIG_ENDPOINT.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.AZURE_FEATURE_FLAG_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.AZURE_FEATURE_FLAG_KEY_FILTER.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.AZURE_FEATURE_FLAG_REFRESH_INTERVAL.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.FEATURE_FLAG_KEY_METADATA.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.PLATFORM_FEATURE_FLAGS_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.VERCEL_API_TOKEN.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.VERCEL_EDGE_CONFIG.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.VERCEL_EDGE_CONFIG_ID.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.VERCEL_EDGE_CONFIG_TOKEN.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.VERCEL_FEATURE_FLAG_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.VERCEL_FEATURE_FLAG_PREFIX.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.VERCEL_FEATURE_FLAG_WRITER_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-feature-flags/api/Variable.VERCEL_TEAM_ID.md +1 -1
- package/data/packages/platform-mailing/api/Class.BlobTemplateFetchStrategy.md +60 -0
- package/data/packages/platform-mailing/api/Class.DatabaseTemplateFetchStrategy.md +3 -3
- package/data/packages/platform-mailing/api/Class.DeliveryStrategyBase.md +4 -3
- package/data/packages/platform-mailing/api/Class.FileTemplateFetchStrategy.md +62 -0
- package/data/packages/platform-mailing/api/Class.LogDeliveryStrategy.md +71 -0
- package/data/packages/platform-mailing/api/Class.MailModule.md +7 -7
- package/data/packages/platform-mailing/api/Class.MailService.md +11 -7
- package/data/packages/platform-mailing/api/Class.MailTemplateEngine.md +29 -4
- package/data/packages/platform-mailing/api/Class.MailgunDeliveryStrategy.md +3 -3
- package/data/packages/platform-mailing/api/Class.PostmarkDeliveryStrategy.md +3 -3
- package/data/packages/platform-mailing/api/Class.ResendDeliveryStrategy.md +3 -3
- package/data/packages/platform-mailing/api/Class.SendGridDeliveryStrategy.md +3 -3
- package/data/packages/platform-mailing/api/Class.SmtpDeliveryStrategy.md +3 -3
- package/data/packages/platform-mailing/api/Class.TemplateFetchStrategyBase.md +7 -11
- package/data/packages/platform-mailing/api/Interface.IMailEvents.md +28 -5
- package/data/packages/platform-mailing/api/Interface.IMailModuleOptions.md +50 -7
- package/data/packages/platform-mailing/api/Interface.IMailTemplateVariants.md +13 -3
- package/data/packages/platform-mailing/api/TypeAlias.MailTemplateFormat.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAILGUN_API_KEY.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAILGUN_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAILGUN_DOMAIN.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_DELIVERY_STRATEGY_TOKEN.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_HOST.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_MAILGUN_API_KEY.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_MAILGUN_DOMAIN.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_PORT.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_POSTMARK_API_KEY.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_RESEND_API_KEY.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_SENDER_EMAIL.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_SENDGRID_API_KEY.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_HOST.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_PASSWORD.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_PORT.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_SECURE.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_USER.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_ENGINE_FORMAT.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_FETCH_STRATEGY_TOKEN.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_NAMES_TOKEN.md +12 -0
- package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_REPOSITORY_TOKEN.md +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_USER.md +1 -1
- package/data/packages/platform-mailing/api/Variable.PLATFORM_MAILING_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-mailing/api/Variable.POSTMARK_API_KEY.md +1 -1
- package/data/packages/platform-mailing/api/Variable.POSTMARK_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-mailing/api/Variable.RESEND_API_KEY.md +1 -1
- package/data/packages/platform-mailing/api/Variable.RESEND_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-mailing/api/Variable.SENDGRID_API_KEY.md +1 -1
- package/data/packages/platform-mailing/api/Variable.SENDGRID_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-mailing/api/Variable.SMTP_CONFIG_ENTRIES.md +1 -1
- package/data/packages/platform-mailing/api/Variable.SMTP_HOST.md +1 -1
- package/data/packages/platform-mailing/api/Variable.SMTP_PASSWORD.md +1 -1
- package/data/packages/platform-mailing/api/Variable.SMTP_PORT.md +1 -1
- package/data/packages/platform-mailing/api/Variable.SMTP_SECURE.md +1 -1
- package/data/packages/platform-mailing/api/Variable.SMTP_USER.md +1 -1
- package/data/packages/platform-mailing/api/index.md +4 -2
- package/package.json +1 -1
- package/data/packages/platform-mailing/api/Variable.MAIL_DELIVERY_STRATEGY.md +0 -14
- package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_STRATEGY.md +0 -14
|
@@ -20,34 +20,75 @@ yarn add @breadstone/archipel-platform-mailing
|
|
|
20
20
|
|
|
21
21
|
## Choose a Delivery Strategy
|
|
22
22
|
|
|
23
|
-
`platform-mailing` supports multiple email providers
|
|
23
|
+
`platform-mailing` supports multiple email providers via **subpath exports**. Each delivery strategy is a separate entry point — only the provider you import is bundled (tree-shakeable).
|
|
24
24
|
|
|
25
|
-
| Strategy |
|
|
26
|
-
| ------------ |
|
|
27
|
-
| **SMTP** |
|
|
28
|
-
| **Postmark** |
|
|
29
|
-
| **Resend** |
|
|
30
|
-
| **SendGrid** |
|
|
31
|
-
| **Mailgun** |
|
|
32
|
-
| **Log** | `
|
|
25
|
+
| Strategy | Subpath Import | When to use |
|
|
26
|
+
| ------------ | ----------------------------------------------------------- | ------------------------------------ |
|
|
27
|
+
| **SMTP** | `@breadstone/archipel-platform-mailing/delivering/smtp` | Any SMTP server (self-hosted, relay) |
|
|
28
|
+
| **Postmark** | `@breadstone/archipel-platform-mailing/delivering/postmark` | Postmark transactional email |
|
|
29
|
+
| **Resend** | `@breadstone/archipel-platform-mailing/delivering/resend` | Resend API |
|
|
30
|
+
| **SendGrid** | `@breadstone/archipel-platform-mailing/delivering/sendgrid` | Twilio SendGrid |
|
|
31
|
+
| **Mailgun** | `@breadstone/archipel-platform-mailing/delivering/mailgun` | Mailgun API |
|
|
32
|
+
| **Log** | `@breadstone/archipel-platform-mailing/delivering/logger` | Development only — logs to console |
|
|
33
|
+
|
|
34
|
+
The strategy is selected at **compile time** by passing the concrete class to `MailModule.register()`. No environment variable is needed for strategy selection.
|
|
33
35
|
|
|
34
36
|
---
|
|
35
37
|
|
|
36
38
|
## Module Registration
|
|
37
39
|
|
|
38
|
-
`MailModule`
|
|
40
|
+
`MailModule` requires explicit registration via `MailModule.register()`. You select the delivery strategy and template-fetch strategy at compile time by passing the concrete class:
|
|
39
41
|
|
|
40
42
|
```typescript
|
|
41
43
|
import { Module } from '@nestjs/common';
|
|
42
44
|
import { MailModule } from '@breadstone/archipel-platform-mailing';
|
|
45
|
+
import { ResendDeliveryStrategy } from '@breadstone/archipel-platform-mailing/delivering/resend';
|
|
46
|
+
import { FileTemplateFetchStrategy } from '@breadstone/archipel-platform-mailing/templating/file';
|
|
43
47
|
|
|
44
48
|
@Module({
|
|
45
|
-
imports: [
|
|
49
|
+
imports: [
|
|
50
|
+
MailModule.register({
|
|
51
|
+
deliveryStrategy: ResendDeliveryStrategy,
|
|
52
|
+
templateFetchStrategy: FileTemplateFetchStrategy,
|
|
53
|
+
templateNames: ['AuthRegister', 'AuthVerify', 'AuthForgotPassword'],
|
|
54
|
+
}),
|
|
55
|
+
],
|
|
46
56
|
})
|
|
47
57
|
export class AppModule {}
|
|
48
58
|
```
|
|
49
59
|
|
|
50
|
-
|
|
60
|
+
### Options
|
|
61
|
+
|
|
62
|
+
| Option | Type | Default | Description |
|
|
63
|
+
| ---------------------------- | ----------------------------------- | ------------------------------- | --------------------------------------------------------------------------- |
|
|
64
|
+
| `deliveryStrategy` | `Type<DeliveryStrategyBase>` | *required* | Concrete delivery strategy class |
|
|
65
|
+
| `templateFetchStrategy` | `Type<TemplateFetchStrategyBase>` | *required* | Concrete template-fetch strategy class |
|
|
66
|
+
| `templateNames` | `ReadonlyArray<string>` | `[]` | Template names to load (for `FileTemplateFetchStrategy`) |
|
|
67
|
+
| `configEntries` | `ReadonlyArray<IConfigRegistryEntry>` | `PLATFORM_MAILING_CONFIG_ENTRIES` | Provider-specific config entries |
|
|
68
|
+
| `templateRepositoryProvider` | `Provider<IMailTemplateRepository>` | — | Required when using `DatabaseTemplateFetchStrategy` |
|
|
69
|
+
| `isGlobal` | `boolean` | `true` | Whether to register the module globally |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Package Structure & Tree-Shaking
|
|
74
|
+
|
|
75
|
+
`platform-mailing` uses **multi-entry-point subpath exports**. The main entry point exports only core contracts, services, and base classes. Each provider (delivery strategy or template strategy) is a **separate subpath** that you import independently:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
@breadstone/archipel-platform-mailing → Core (MailService, MailModule, ports, models, errors)
|
|
79
|
+
@breadstone/archipel-platform-mailing/delivering/smtp → SmtpDeliveryStrategy + SMTP_CONFIG_ENTRIES
|
|
80
|
+
@breadstone/archipel-platform-mailing/delivering/resend → ResendDeliveryStrategy + RESEND_CONFIG_ENTRIES
|
|
81
|
+
@breadstone/archipel-platform-mailing/delivering/postmark → PostmarkDeliveryStrategy + POSTMARK_CONFIG_ENTRIES
|
|
82
|
+
@breadstone/archipel-platform-mailing/delivering/sendgrid → SendGridDeliveryStrategy + SENDGRID_CONFIG_ENTRIES
|
|
83
|
+
@breadstone/archipel-platform-mailing/delivering/mailgun → MailgunDeliveryStrategy + MAILGUN_CONFIG_ENTRIES
|
|
84
|
+
@breadstone/archipel-platform-mailing/delivering/logger → LogDeliveryStrategy
|
|
85
|
+
@breadstone/archipel-platform-mailing/templating/file → FileTemplateFetchStrategy
|
|
86
|
+
@breadstone/archipel-platform-mailing/templating/blob → BlobTemplateFetchStrategy
|
|
87
|
+
@breadstone/archipel-platform-mailing/templating/database → DatabaseTemplateFetchStrategy
|
|
88
|
+
@breadstone/archipel-platform-mailing/health → MailHealthIndicator
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
This ensures that importing the core package does **not** pull in provider-specific SDKs (e.g., `nodemailer`, `resend`, `@sendgrid/mail`). Only the subpath you import triggers a dependency on the corresponding SDK.
|
|
51
92
|
|
|
52
93
|
---
|
|
53
94
|
|
|
@@ -56,13 +97,14 @@ The module reads all configuration from environment variables. No `register()` c
|
|
|
56
97
|
### Core Variables
|
|
57
98
|
|
|
58
99
|
```env
|
|
59
|
-
MAIL_DELIVERY_STRATEGY=resend
|
|
60
|
-
MAIL_TEMPLATE_STRATEGY=file
|
|
61
100
|
MAIL_TEMPLATE_ENGINE_FORMAT=html
|
|
62
|
-
|
|
63
|
-
MAIL_FROM_NAME=YourApp
|
|
101
|
+
MAIL_SENDER_EMAIL=noreply@yourapp.com
|
|
64
102
|
```
|
|
65
103
|
|
|
104
|
+
::: info Strategy Selection
|
|
105
|
+
The delivery strategy and template-fetch strategy are no longer configured via environment variables. They are selected at compile time by passing the class to `MailModule.register()`. The `MAIL_DELIVERY_STRATEGY` and `MAIL_TEMPLATE_STRATEGY` environment variables have been removed.
|
|
106
|
+
:::
|
|
107
|
+
|
|
66
108
|
### Provider-Specific Variables
|
|
67
109
|
|
|
68
110
|
#### SMTP
|
|
@@ -102,14 +144,15 @@ MAIL_MAILGUN_DOMAIN=mg.yourapp.com
|
|
|
102
144
|
|
|
103
145
|
### Template Strategies
|
|
104
146
|
|
|
105
|
-
Templates can be loaded from the filesystem or from
|
|
147
|
+
Templates can be loaded from the filesystem, from blob storage, or from a database — each via a dedicated **subpath export**:
|
|
106
148
|
|
|
107
|
-
| Strategy
|
|
108
|
-
|
|
|
109
|
-
| **File**
|
|
110
|
-
| **Blob**
|
|
149
|
+
| Strategy | Subpath Import | Description |
|
|
150
|
+
| ------------ | --------------------------------------------------------- | ----------------------------------------------- |
|
|
151
|
+
| **File** | `@breadstone/archipel-platform-mailing/templating/file` | Load templates from a local directory |
|
|
152
|
+
| **Blob** | `@breadstone/archipel-platform-mailing/templating/blob` | Load templates from `platform-blob-storage` |
|
|
153
|
+
| **Database** | `@breadstone/archipel-platform-mailing/templating/database` | Load templates from a database via repository |
|
|
111
154
|
|
|
112
|
-
For file-based templates, place your `.html` or `.txt` files in the configured template directory.
|
|
155
|
+
Select the strategy by passing the class to `MailModule.register({ templateFetchStrategy: ... })`. For file-based templates, place your `.html` or `.txt` files in the configured template directory.
|
|
113
156
|
|
|
114
157
|
---
|
|
115
158
|
|
|
@@ -269,9 +312,10 @@ Map `MailDeliveryError` to an appropriate HTTP response in your global exception
|
|
|
269
312
|
|
|
270
313
|
## Development Tips
|
|
271
314
|
|
|
272
|
-
- Use `
|
|
273
|
-
- Use the **blob** template strategy when templates are shared across multiple services or managed by a CMS.
|
|
315
|
+
- Use `LogDeliveryStrategy` during local development to see email content in the console without sending real emails.
|
|
316
|
+
- Use the **blob** or **database** template strategy when templates are shared across multiple services or managed by a CMS.
|
|
274
317
|
- Template variables use the format defined by the template engine. Place templates in a well-organized directory structure (e.g., `templates/mail/welcome.html`).
|
|
318
|
+
- Only import the delivery/templating subpath you actually need — this keeps your bundle lean and avoids unnecessary peer dependency requirements.
|
|
275
319
|
|
|
276
320
|
---
|
|
277
321
|
|
|
@@ -14,20 +14,26 @@ This guide explains how to create email templates for `platform-mailing` and reg
|
|
|
14
14
|
|
|
15
15
|
## How It Works
|
|
16
16
|
|
|
17
|
-
`platform-mailing` does **not** ship ready-made template files. It defines a list of known template **names** and loads the actual content through
|
|
17
|
+
`platform-mailing` does **not** ship ready-made template files. It defines a list of known template **names** and loads the actual content through a **template-fetch strategy** at startup. Each strategy is available as a dedicated subpath export:
|
|
18
|
+
|
|
19
|
+
| Strategy | Subpath Import | Description |
|
|
20
|
+
| ------------ | ----------------------------------------------------------- | ---------------------------------------------- |
|
|
21
|
+
| **File** | `@breadstone/archipel-platform-mailing/templating/file` | Load from local filesystem via `ResourceManager` |
|
|
22
|
+
| **Blob** | `@breadstone/archipel-platform-mailing/templating/blob` | Load from blob storage via `BlobService` |
|
|
23
|
+
| **Database** | `@breadstone/archipel-platform-mailing/templating/database` | Load from database via `IMailTemplateRepository` |
|
|
18
24
|
|
|
19
25
|
```mermaid
|
|
20
26
|
flowchart LR
|
|
21
27
|
MailService["MailService<br/>sendTemplate()"] --> MailTemplateEngine["MailTemplateEngine<br/>compileTemplate()"]
|
|
22
|
-
MailTemplateEngine -->
|
|
28
|
+
MailTemplateEngine --> TemplateFetchStrategy["TemplateFetchStrategy<br/>(file / blob / database)"]
|
|
23
29
|
MailTemplateEngine --> ContentTemplateEngine["ContentTemplateEngine<br/>variable interpolation"]
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
TemplateFetchStrategy --> FileTemplateFetchStrategy[FileTemplateFetchStrategy]
|
|
31
|
+
TemplateFetchStrategy --> BlobTemplateFetchStrategy[BlobTemplateFetchStrategy]
|
|
32
|
+
TemplateFetchStrategy --> DatabaseTemplateFetchStrategy[DatabaseTemplateFetchStrategy]
|
|
27
33
|
```
|
|
28
34
|
|
|
29
35
|
1. `MailService.sendTemplate()` passes the template name and context variables to `MailTemplateEngine`.
|
|
30
|
-
2. `MailTemplateEngine`
|
|
36
|
+
2. `MailTemplateEngine` delegates to the configured `TemplateFetchStrategy` (file, blob, or database) to load the template content.
|
|
31
37
|
3. `ContentTemplateEngine` from `platform-core` interpolates `{{placeholders}}` with the provided context.
|
|
32
38
|
4. The compiled string is handed to the configured delivery strategy (SMTP, Resend, Postmark, etc.).
|
|
33
39
|
|
|
@@ -55,16 +61,16 @@ The strategy loads `AuthRegister.html`, `AuthRegister.txt`, `AuthVerify.html`, e
|
|
|
55
61
|
|
|
56
62
|
Templates use a Handlebars-style syntax powered by `ContentTemplateEngine`:
|
|
57
63
|
|
|
58
|
-
| Syntax
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
|
66
|
-
|
|
|
67
|
-
|
|
|
64
|
+
| Syntax | Description |
|
|
65
|
+
| ------------------------------------- | --------------------------------- |
|
|
66
|
+
| `{{variableName}}` | Simple variable substitution |
|
|
67
|
+
| `{{#if condition}}...{{/if}}` | Conditional block |
|
|
68
|
+
| `{{#if condition}}...{{else}}...{{/if}}` | Conditional with else |
|
|
69
|
+
| `{{#unless condition}}...{{/unless}}` | Negative conditional |
|
|
70
|
+
| `{{#each items}}...{{/each}}` | Loop over array |
|
|
71
|
+
| `{{#with object}}...{{/with}}` | Context switching |
|
|
72
|
+
| `{{@index}}`, `{{@first}}`, `{{@last}}` | Loop metadata inside `#each` |
|
|
73
|
+
| `{{nested.property}}` | Dot notation for nested values |
|
|
68
74
|
|
|
69
75
|
### Example: `AuthVerify.html`
|
|
70
76
|
|
|
@@ -76,14 +82,14 @@ Templates use a Handlebars-style syntax powered by `ContentTemplateEngine`:
|
|
|
76
82
|
<title>Verify your email</title>
|
|
77
83
|
</head>
|
|
78
84
|
<body>
|
|
79
|
-
<h1>Hello,
|
|
85
|
+
<h1>Hello, {{userName}}!</h1>
|
|
80
86
|
<p>Please verify your email address by clicking the link below:</p>
|
|
81
87
|
<p>
|
|
82
|
-
<a href="
|
|
88
|
+
<a href="{{verificationUrl}}">Verify Email</a>
|
|
83
89
|
</p>
|
|
84
|
-
|
|
85
|
-
<p>This link expires in
|
|
86
|
-
|
|
90
|
+
{{#if expiresInHours}}
|
|
91
|
+
<p>This link expires in {{expiresInHours}} hours.</p>
|
|
92
|
+
{{/if}}
|
|
87
93
|
<p>If you did not create an account, you can safely ignore this email.</p>
|
|
88
94
|
</body>
|
|
89
95
|
</html>
|
|
@@ -92,13 +98,13 @@ Templates use a Handlebars-style syntax powered by `ContentTemplateEngine`:
|
|
|
92
98
|
### Example: `AuthVerify.txt`
|
|
93
99
|
|
|
94
100
|
```text
|
|
95
|
-
Hello,
|
|
101
|
+
Hello, {{userName}}!
|
|
96
102
|
|
|
97
103
|
Please verify your email address by visiting the following link:
|
|
98
104
|
|
|
99
|
-
|
|
105
|
+
{{verificationUrl}}
|
|
100
106
|
|
|
101
|
-
|
|
107
|
+
{{#if expiresInHours}}This link expires in {{expiresInHours}} hours.{{/if}}
|
|
102
108
|
|
|
103
109
|
If you did not create an account, you can safely ignore this email.
|
|
104
110
|
```
|
|
@@ -146,6 +152,7 @@ import { Module } from '@nestjs/common';
|
|
|
146
152
|
import { join } from 'node:path';
|
|
147
153
|
import { ResourceModule, FileResourceStrategy } from '@breadstone/archipel-platform-resources';
|
|
148
154
|
import { MailModule } from '@breadstone/archipel-platform-mailing';
|
|
155
|
+
import { FileTemplateFetchStrategy } from '@breadstone/archipel-platform-mailing/templating/file';
|
|
149
156
|
|
|
150
157
|
@Module({
|
|
151
158
|
imports: [
|
|
@@ -159,21 +166,25 @@ import { MailModule } from '@breadstone/archipel-platform-mailing';
|
|
|
159
166
|
}),
|
|
160
167
|
],
|
|
161
168
|
}),
|
|
162
|
-
MailModule
|
|
169
|
+
MailModule.register({
|
|
170
|
+
deliveryStrategy: ResendDeliveryStrategy,
|
|
171
|
+
templateFetchStrategy: FileTemplateFetchStrategy,
|
|
172
|
+
templateNames: ['AuthRegister', 'AuthVerify', 'AuthForgotPassword', 'AppointmentInvitation', 'AppointmentUpdate'],
|
|
173
|
+
}),
|
|
163
174
|
],
|
|
164
175
|
})
|
|
165
176
|
export class AppModule {}
|
|
166
177
|
```
|
|
167
178
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
```env
|
|
171
|
-
MAIL_TEMPLATE_STRATEGY=file
|
|
172
|
-
```
|
|
179
|
+
The template names are passed directly to `MailModule.register()` via the `templateNames` option. `FileTemplateFetchStrategy` uses these names to load the corresponding `.html` and `.txt` files from `ResourceManager`.
|
|
173
180
|
|
|
174
181
|
### Blob-Based Templates
|
|
175
182
|
|
|
176
|
-
For templates managed via a CMS or shared across multiple services, use `BlobTemplateFetchStrategy
|
|
183
|
+
For templates managed via a CMS or shared across multiple services, use `BlobTemplateFetchStrategy` from the `templating/blob` subpath. Upload a manifest file (`templates/templates.json`) and the template files to your blob storage:
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
import { BlobTemplateFetchStrategy } from '@breadstone/archipel-platform-mailing/templating/blob';
|
|
187
|
+
```
|
|
177
188
|
|
|
178
189
|
**`templates/templates.json`**
|
|
179
190
|
```json
|
|
@@ -186,13 +197,42 @@ For templates managed via a CMS or shared across multiple services, use `BlobTem
|
|
|
186
197
|
]
|
|
187
198
|
```
|
|
188
199
|
|
|
189
|
-
|
|
200
|
+
The `BlobTemplateFetchStrategy` downloads the manifest, then fetches each listed file from blob storage via `BlobService` from `platform-blob-storage`. Select this strategy by passing it to `MailModule.register()`:
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
import { MailModule } from '@breadstone/archipel-platform-mailing';
|
|
204
|
+
import { BlobTemplateFetchStrategy } from '@breadstone/archipel-platform-mailing/templating/blob';
|
|
205
|
+
|
|
206
|
+
MailModule.register({
|
|
207
|
+
deliveryStrategy: ResendDeliveryStrategy,
|
|
208
|
+
templateFetchStrategy: BlobTemplateFetchStrategy,
|
|
209
|
+
})
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Database-Based Templates
|
|
190
213
|
|
|
191
|
-
|
|
192
|
-
|
|
214
|
+
For templates stored in a database (e.g., managed via an admin panel), use `DatabaseTemplateFetchStrategy` from the `templating/database` subpath:
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
import { DatabaseTemplateFetchStrategy } from '@breadstone/archipel-platform-mailing/templating/database';
|
|
193
218
|
```
|
|
194
219
|
|
|
195
|
-
|
|
220
|
+
This strategy loads templates through the `IMailTemplateRepository` port. You must provide an adapter implementation that fetches template records from your database:
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
import { DatabaseTemplateFetchStrategy } from '@breadstone/archipel-platform-mailing/templating/database';
|
|
224
|
+
import { IMailTemplateRepository, MAIL_TEMPLATE_REPOSITORY_TOKEN } from '@breadstone/archipel-platform-mailing';
|
|
225
|
+
import { MailModule } from '@breadstone/archipel-platform-mailing';
|
|
226
|
+
|
|
227
|
+
MailModule.register({
|
|
228
|
+
deliveryStrategy: SmtpDeliveryStrategy,
|
|
229
|
+
templateFetchStrategy: DatabaseTemplateFetchStrategy,
|
|
230
|
+
templateRepositoryProvider: {
|
|
231
|
+
provide: MAIL_TEMPLATE_REPOSITORY_TOKEN,
|
|
232
|
+
useClass: PrismaMailTemplateRepository,
|
|
233
|
+
},
|
|
234
|
+
})
|
|
235
|
+
```
|
|
196
236
|
|
|
197
237
|
---
|
|
198
238
|
|
|
@@ -284,19 +324,21 @@ To diagnose, enable `debug: true` in `ResourceModule.forRoot()`. This logs every
|
|
|
284
324
|
- AuthVerify.txt (text/plain, 320 B) → /app/dist/assets/AuthVerify.txt
|
|
285
325
|
```
|
|
286
326
|
|
|
287
|
-
Also check that `
|
|
327
|
+
Also check that your `MailModule.register()` call passes the correct `templateFetchStrategy` class (`FileTemplateFetchStrategy`, `BlobTemplateFetchStrategy`, or `DatabaseTemplateFetchStrategy`).
|
|
288
328
|
|
|
289
329
|
---
|
|
290
330
|
|
|
291
331
|
## Checklist
|
|
292
332
|
|
|
293
333
|
- [ ] Template files created for all required template names (`.html` and/or `.txt`)
|
|
294
|
-
- [ ] `ResourceModule.forRoot()` registered with base paths including your template directory
|
|
295
|
-
- [ ] `
|
|
334
|
+
- [ ] `ResourceModule.forRoot()` registered with base paths including your template directory (for `file` strategy)
|
|
335
|
+
- [ ] `MailModule.register()` called with the correct `templateFetchStrategy` class
|
|
336
|
+
- [ ] `templateNames` passed to `MailModule.register()` (for `FileTemplateFetchStrategy`)
|
|
296
337
|
- [ ] `MAIL_TEMPLATE_ENGINE_FORMAT` set to `html` or `txt`
|
|
297
338
|
- [ ] Placeholders in templates match the keys passed in `templateParams`
|
|
298
339
|
- [ ] App-level overrides listed **before** library asset paths in `basePaths`
|
|
299
340
|
- [ ] `debug: true` used during development to verify template availability
|
|
341
|
+
- [ ] Only the needed templating subpath is imported (tree-shaking)
|
|
300
342
|
|
|
301
343
|
---
|
|
302
344
|
|
|
@@ -5,7 +5,7 @@ editUrl: false
|
|
|
5
5
|
---
|
|
6
6
|
# Class: AzureFeatureFlagReader
|
|
7
7
|
|
|
8
|
-
Defined in: azure/AzureFeatureFlagReader.ts:36
|
|
8
|
+
Defined in: [azure/AzureFeatureFlagReader.ts:36](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagReader.ts#L36)
|
|
9
9
|
|
|
10
10
|
Azure App Configuration implementation of the [FeatureFlagReaderPort](Class.FeatureFlagReaderPort).
|
|
11
11
|
Uses `@azure/app-configuration-provider` for connecting to Azure App Configuration
|
|
@@ -28,7 +28,7 @@ and `@microsoft/feature-management` for evaluating feature flags.
|
|
|
28
28
|
new AzureFeatureFlagReader(configService): AzureFeatureFlagReader;
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
Defined in: azure/AzureFeatureFlagReader.ts:49
|
|
31
|
+
Defined in: [azure/AzureFeatureFlagReader.ts:49](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagReader.ts#L49)
|
|
32
32
|
|
|
33
33
|
#### Parameters
|
|
34
34
|
|
|
@@ -52,7 +52,7 @@ Defined in: azure/AzureFeatureFlagReader.ts:49
|
|
|
52
52
|
getAllFlags(_context?): Promise<readonly IFeatureFlagEvaluation[]>;
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
Defined in: azure/AzureFeatureFlagReader.ts:167
|
|
55
|
+
Defined in: [azure/AzureFeatureFlagReader.ts:167](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagReader.ts#L167)
|
|
56
56
|
|
|
57
57
|
Returns all known feature flags with their current evaluation.
|
|
58
58
|
|
|
@@ -83,7 +83,7 @@ getVariant<T>(
|
|
|
83
83
|
_context?): Promise<T>;
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
-
Defined in: azure/AzureFeatureFlagReader.ts:146
|
|
86
|
+
Defined in: [azure/AzureFeatureFlagReader.ts:146](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagReader.ts#L146)
|
|
87
87
|
|
|
88
88
|
Returns the variant value of a feature flag for multivariate flags and A/B testing.
|
|
89
89
|
|
|
@@ -119,7 +119,7 @@ The variant value of the feature flag.
|
|
|
119
119
|
isEnabled(key, _context?): Promise<boolean>;
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
-
Defined in: azure/AzureFeatureFlagReader.ts:131
|
|
122
|
+
Defined in: [azure/AzureFeatureFlagReader.ts:131](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagReader.ts#L131)
|
|
123
123
|
|
|
124
124
|
Evaluates whether a feature flag is enabled.
|
|
125
125
|
|
|
@@ -148,7 +148,7 @@ Evaluates whether a feature flag is enabled.
|
|
|
148
148
|
onModuleDestroy(): void;
|
|
149
149
|
```
|
|
150
150
|
|
|
151
|
-
Defined in: azure/AzureFeatureFlagReader.ts:123
|
|
151
|
+
Defined in: [azure/AzureFeatureFlagReader.ts:123](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagReader.ts#L123)
|
|
152
152
|
|
|
153
153
|
Cleans up the refresh interval on module destruction.
|
|
154
154
|
|
|
@@ -170,7 +170,7 @@ OnModuleDestroy.onModuleDestroy
|
|
|
170
170
|
onModuleInit(): Promise<void>;
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
-
Defined in: azure/AzureFeatureFlagReader.ts:63
|
|
173
|
+
Defined in: [azure/AzureFeatureFlagReader.ts:63](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagReader.ts#L63)
|
|
174
174
|
|
|
175
175
|
Initializes the Azure App Configuration connection and feature manager.
|
|
176
176
|
|
|
@@ -192,7 +192,7 @@ OnModuleInit.onModuleInit
|
|
|
192
192
|
ping(): Promise<boolean>;
|
|
193
193
|
```
|
|
194
194
|
|
|
195
|
-
Defined in: azure/AzureFeatureFlagReader.ts:207
|
|
195
|
+
Defined in: [azure/AzureFeatureFlagReader.ts:207](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagReader.ts#L207)
|
|
196
196
|
|
|
197
197
|
Lightweight connectivity check for the feature flag provider.
|
|
198
198
|
Override in adapters to perform a real API call.
|
|
@@ -216,7 +216,7 @@ Defaults to `true` if not overridden.
|
|
|
216
216
|
refresh(): Promise<void>;
|
|
217
217
|
```
|
|
218
218
|
|
|
219
|
-
Defined in: azure/AzureFeatureFlagReader.ts:193
|
|
219
|
+
Defined in: [azure/AzureFeatureFlagReader.ts:193](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagReader.ts#L193)
|
|
220
220
|
|
|
221
221
|
Refreshes the flag state from the remote provider.
|
|
222
222
|
Implementations should reload configuration from the upstream source.
|
|
@@ -5,7 +5,7 @@ editUrl: false
|
|
|
5
5
|
---
|
|
6
6
|
# Class: AzureFeatureFlagWriter
|
|
7
7
|
|
|
8
|
-
Defined in: azure/AzureFeatureFlagWriter.ts:28
|
|
8
|
+
Defined in: [azure/AzureFeatureFlagWriter.ts:28](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagWriter.ts#L28)
|
|
9
9
|
|
|
10
10
|
Azure App Configuration implementation of the [FeatureFlagWriterPort](Class.FeatureFlagWriterPort).
|
|
11
11
|
Uses `@azure/app-configuration` (`AppConfigurationClient`) for CRUD operations
|
|
@@ -27,7 +27,7 @@ on feature flags stored in Azure App Configuration.
|
|
|
27
27
|
new AzureFeatureFlagWriter(configService): AzureFeatureFlagWriter;
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Defined in: azure/AzureFeatureFlagWriter.ts:39
|
|
30
|
+
Defined in: [azure/AzureFeatureFlagWriter.ts:39](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagWriter.ts#L39)
|
|
31
31
|
|
|
32
32
|
#### Parameters
|
|
33
33
|
|
|
@@ -51,7 +51,7 @@ Defined in: azure/AzureFeatureFlagWriter.ts:39
|
|
|
51
51
|
createFlag(definition): Promise<void>;
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
Defined in: azure/AzureFeatureFlagWriter.ts:150
|
|
54
|
+
Defined in: [azure/AzureFeatureFlagWriter.ts:150](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagWriter.ts#L150)
|
|
55
55
|
|
|
56
56
|
Creates a new feature flag.
|
|
57
57
|
|
|
@@ -81,7 +81,7 @@ If the flag already exists or creation fails.
|
|
|
81
81
|
deleteFlag(key): Promise<void>;
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
Defined in: azure/AzureFeatureFlagWriter.ts:218
|
|
84
|
+
Defined in: [azure/AzureFeatureFlagWriter.ts:218](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagWriter.ts#L218)
|
|
85
85
|
|
|
86
86
|
Deletes a feature flag.
|
|
87
87
|
|
|
@@ -113,7 +113,7 @@ getFlag(key): Promise<
|
|
|
113
113
|
| undefined>;
|
|
114
114
|
```
|
|
115
115
|
|
|
116
|
-
Defined in: azure/AzureFeatureFlagWriter.ts:81
|
|
116
|
+
Defined in: [azure/AzureFeatureFlagWriter.ts:81](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagWriter.ts#L81)
|
|
117
117
|
|
|
118
118
|
Returns a single feature flag definition by key.
|
|
119
119
|
|
|
@@ -143,7 +143,7 @@ The flag definition, or `undefined` if not found.
|
|
|
143
143
|
listFlags(): Promise<readonly IFeatureFlagDefinition[]>;
|
|
144
144
|
```
|
|
145
145
|
|
|
146
|
-
Defined in: azure/AzureFeatureFlagWriter.ts:115
|
|
146
|
+
Defined in: [azure/AzureFeatureFlagWriter.ts:115](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagWriter.ts#L115)
|
|
147
147
|
|
|
148
148
|
Returns all feature flag definitions managed by the provider.
|
|
149
149
|
|
|
@@ -165,7 +165,7 @@ Array of flag definitions.
|
|
|
165
165
|
onModuleInit(): Promise<void>;
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
-
Defined in: azure/AzureFeatureFlagWriter.ts:53
|
|
168
|
+
Defined in: [azure/AzureFeatureFlagWriter.ts:53](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagWriter.ts#L53)
|
|
169
169
|
|
|
170
170
|
Initializes the Azure App Configuration management client.
|
|
171
171
|
|
|
@@ -187,7 +187,7 @@ OnModuleInit.onModuleInit
|
|
|
187
187
|
ping(): Promise<boolean>;
|
|
188
188
|
```
|
|
189
189
|
|
|
190
|
-
Defined in: azure/AzureFeatureFlagWriter.ts:237
|
|
190
|
+
Defined in: [azure/AzureFeatureFlagWriter.ts:237](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagWriter.ts#L237)
|
|
191
191
|
|
|
192
192
|
Lightweight connectivity check for the writer provider.
|
|
193
193
|
Defaults to `true` if not overridden.
|
|
@@ -210,7 +210,7 @@ Defaults to `true` if not overridden.
|
|
|
210
210
|
updateFlag(key, updates): Promise<void>;
|
|
211
211
|
```
|
|
212
212
|
|
|
213
|
-
Defined in: azure/AzureFeatureFlagWriter.ts:177
|
|
213
|
+
Defined in: [azure/AzureFeatureFlagWriter.ts:177](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/azure/AzureFeatureFlagWriter.ts#L177)
|
|
214
214
|
|
|
215
215
|
Updates an existing feature flag.
|
|
216
216
|
Only the fields present in the partial definition are updated.
|
|
@@ -5,7 +5,7 @@ editUrl: false
|
|
|
5
5
|
---
|
|
6
6
|
# Class: FeatureFlagError
|
|
7
7
|
|
|
8
|
-
Defined in: errors/FeatureFlagError.ts:6
|
|
8
|
+
Defined in: [errors/FeatureFlagError.ts:6](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/errors/FeatureFlagError.ts#L6)
|
|
9
9
|
|
|
10
10
|
Domain error thrown when a feature flag operation fails.
|
|
11
11
|
|
|
@@ -24,7 +24,7 @@ new FeatureFlagError(
|
|
|
24
24
|
cause?): FeatureFlagError;
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
Defined in: errors/FeatureFlagError.ts:16
|
|
27
|
+
Defined in: [errors/FeatureFlagError.ts:16](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/errors/FeatureFlagError.ts#L16)
|
|
28
28
|
|
|
29
29
|
#### Parameters
|
|
30
30
|
|
|
@@ -52,7 +52,7 @@ Error.constructor
|
|
|
52
52
|
readonly code: "FEATURE_FLAG" = 'FEATURE_FLAG';
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
Defined in: errors/FeatureFlagError.ts:9
|
|
55
|
+
Defined in: [errors/FeatureFlagError.ts:9](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/errors/FeatureFlagError.ts#L9)
|
|
56
56
|
|
|
57
57
|
***
|
|
58
58
|
|
|
@@ -62,4 +62,4 @@ Defined in: errors/FeatureFlagError.ts:9
|
|
|
62
62
|
readonly provider: string;
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
Defined in: errors/FeatureFlagError.ts:10
|
|
65
|
+
Defined in: [errors/FeatureFlagError.ts:10](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/errors/FeatureFlagError.ts#L10)
|
|
@@ -5,7 +5,7 @@ editUrl: false
|
|
|
5
5
|
---
|
|
6
6
|
# Class: FeatureFlagGuard
|
|
7
7
|
|
|
8
|
-
Defined in: guards/FeatureFlagGuard.ts:17
|
|
8
|
+
Defined in: [guards/FeatureFlagGuard.ts:17](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/guards/FeatureFlagGuard.ts#L17)
|
|
9
9
|
|
|
10
10
|
Guard that checks if a feature flag is enabled before allowing access to a route.
|
|
11
11
|
Use the [FeatureFlag](Function.FeatureFlag) decorator to specify which flag to check.
|
|
@@ -22,7 +22,7 @@ Use the [FeatureFlag](Function.FeatureFlag) decorator to specify which flag to c
|
|
|
22
22
|
new FeatureFlagGuard(featureFlagReader, reflector): FeatureFlagGuard;
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Defined in: guards/FeatureFlagGuard.ts:35
|
|
25
|
+
Defined in: [guards/FeatureFlagGuard.ts:35](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/guards/FeatureFlagGuard.ts#L35)
|
|
26
26
|
|
|
27
27
|
Constructs a new instance of the `FeatureFlagGuard` class.
|
|
28
28
|
|
|
@@ -45,7 +45,7 @@ Constructs a new instance of the `FeatureFlagGuard` class.
|
|
|
45
45
|
canActivate(context): Promise<boolean>;
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
Defined in: guards/FeatureFlagGuard.ts:51
|
|
48
|
+
Defined in: [guards/FeatureFlagGuard.ts:51](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/guards/FeatureFlagGuard.ts#L51)
|
|
49
49
|
|
|
50
50
|
Determines whether the guarded feature flag is enabled.
|
|
51
51
|
|
|
@@ -5,7 +5,7 @@ editUrl: false
|
|
|
5
5
|
---
|
|
6
6
|
# Class: FeatureFlagModule
|
|
7
7
|
|
|
8
|
-
Defined in: FeatureFlagModule.ts:21
|
|
8
|
+
Defined in: [FeatureFlagModule.ts:21](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/FeatureFlagModule.ts#L21)
|
|
9
9
|
|
|
10
10
|
NestJS module providing feature flag infrastructure.
|
|
11
11
|
Exposes a configurable feature flag reader and a route guard.
|
|
@@ -32,7 +32,7 @@ new FeatureFlagModule(): FeatureFlagModule;
|
|
|
32
32
|
static register(options): DynamicModule;
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
Defined in: FeatureFlagModule.ts:31
|
|
35
|
+
Defined in: [FeatureFlagModule.ts:31](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/FeatureFlagModule.ts#L31)
|
|
36
36
|
|
|
37
37
|
Configures the module with the specified options.
|
|
38
38
|
|
|
@@ -5,7 +5,7 @@ editUrl: false
|
|
|
5
5
|
---
|
|
6
6
|
# Abstract Class: FeatureFlagReaderPort
|
|
7
7
|
|
|
8
|
-
Defined in: contracts/FeatureFlagReaderPort.ts:15
|
|
8
|
+
Defined in: [contracts/FeatureFlagReaderPort.ts:15](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/contracts/FeatureFlagReaderPort.ts#L15)
|
|
9
9
|
|
|
10
10
|
Abstract port for feature flag reader operations.
|
|
11
11
|
Each provider (Azure App Configuration, Vercel Edge Config) must implement this contract
|
|
@@ -36,7 +36,7 @@ new FeatureFlagReaderPort(): FeatureFlagReaderPort;
|
|
|
36
36
|
abstract getAllFlags(context?): Promise<readonly IFeatureFlagEvaluation[]>;
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
Defined in: contracts/FeatureFlagReaderPort.ts:46
|
|
39
|
+
Defined in: [contracts/FeatureFlagReaderPort.ts:46](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/contracts/FeatureFlagReaderPort.ts#L46)
|
|
40
40
|
|
|
41
41
|
Returns all known feature flags with their current evaluation.
|
|
42
42
|
|
|
@@ -63,7 +63,7 @@ abstract getVariant<T>(
|
|
|
63
63
|
context?): Promise<T>;
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
Defined in: contracts/FeatureFlagReaderPort.ts:37
|
|
66
|
+
Defined in: [contracts/FeatureFlagReaderPort.ts:37](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/contracts/FeatureFlagReaderPort.ts#L37)
|
|
67
67
|
|
|
68
68
|
Returns the variant value of a feature flag for multivariate flags and A/B testing.
|
|
69
69
|
|
|
@@ -95,7 +95,7 @@ The variant value of the feature flag.
|
|
|
95
95
|
abstract isEnabled(key, context?): Promise<boolean>;
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
-
Defined in: contracts/FeatureFlagReaderPort.ts:26
|
|
98
|
+
Defined in: [contracts/FeatureFlagReaderPort.ts:26](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/contracts/FeatureFlagReaderPort.ts#L26)
|
|
99
99
|
|
|
100
100
|
Evaluates whether a feature flag is enabled.
|
|
101
101
|
|
|
@@ -120,7 +120,7 @@ Evaluates whether a feature flag is enabled.
|
|
|
120
120
|
ping(): Promise<boolean>;
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
-
Defined in: contracts/FeatureFlagReaderPort.ts:64
|
|
123
|
+
Defined in: [contracts/FeatureFlagReaderPort.ts:64](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/contracts/FeatureFlagReaderPort.ts#L64)
|
|
124
124
|
|
|
125
125
|
Lightweight connectivity check for the feature flag provider.
|
|
126
126
|
Override in adapters to perform a real API call.
|
|
@@ -140,7 +140,7 @@ Defaults to `true` if not overridden.
|
|
|
140
140
|
abstract refresh(): Promise<void>;
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
-
Defined in: contracts/FeatureFlagReaderPort.ts:54
|
|
143
|
+
Defined in: [contracts/FeatureFlagReaderPort.ts:54](https://github.com/RueDeRennes/archipel/blob/main/libs/platform-feature-flags/src/contracts/FeatureFlagReaderPort.ts#L54)
|
|
144
144
|
|
|
145
145
|
Refreshes the flag state from the remote provider.
|
|
146
146
|
Implementations should reload configuration from the upstream source.
|