@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.
Files changed (88) hide show
  1. package/data/guides/email-delivery.md +68 -24
  2. package/data/guides/email-templates.md +80 -38
  3. package/data/packages/platform-feature-flags/api/Class.AzureFeatureFlagReader.md +9 -9
  4. package/data/packages/platform-feature-flags/api/Class.AzureFeatureFlagWriter.md +9 -9
  5. package/data/packages/platform-feature-flags/api/Class.FeatureFlagError.md +4 -4
  6. package/data/packages/platform-feature-flags/api/Class.FeatureFlagGuard.md +3 -3
  7. package/data/packages/platform-feature-flags/api/Class.FeatureFlagModule.md +2 -2
  8. package/data/packages/platform-feature-flags/api/Class.FeatureFlagReaderPort.md +6 -6
  9. package/data/packages/platform-feature-flags/api/Class.FeatureFlagWriterPort.md +7 -7
  10. package/data/packages/platform-feature-flags/api/Class.VercelFeatureFlagReader.md +8 -8
  11. package/data/packages/platform-feature-flags/api/Class.VercelFeatureFlagWriter.md +9 -9
  12. package/data/packages/platform-feature-flags/api/Function.FeatureFlag.md +1 -1
  13. package/data/packages/platform-feature-flags/api/Interface.IFeatureFlagContext.md +4 -4
  14. package/data/packages/platform-feature-flags/api/Interface.IFeatureFlagDefinition.md +6 -6
  15. package/data/packages/platform-feature-flags/api/Interface.IFeatureFlagEvaluation.md +4 -4
  16. package/data/packages/platform-feature-flags/api/Interface.IFeatureFlagModuleOptions.md +5 -5
  17. package/data/packages/platform-feature-flags/api/Variable.AZURE_APPCONFIG_CONNECTION_STRING.md +1 -1
  18. package/data/packages/platform-feature-flags/api/Variable.AZURE_APPCONFIG_ENDPOINT.md +1 -1
  19. package/data/packages/platform-feature-flags/api/Variable.AZURE_FEATURE_FLAG_CONFIG_ENTRIES.md +1 -1
  20. package/data/packages/platform-feature-flags/api/Variable.AZURE_FEATURE_FLAG_KEY_FILTER.md +1 -1
  21. package/data/packages/platform-feature-flags/api/Variable.AZURE_FEATURE_FLAG_REFRESH_INTERVAL.md +1 -1
  22. package/data/packages/platform-feature-flags/api/Variable.FEATURE_FLAG_KEY_METADATA.md +1 -1
  23. package/data/packages/platform-feature-flags/api/Variable.PLATFORM_FEATURE_FLAGS_CONFIG_ENTRIES.md +1 -1
  24. package/data/packages/platform-feature-flags/api/Variable.VERCEL_API_TOKEN.md +1 -1
  25. package/data/packages/platform-feature-flags/api/Variable.VERCEL_EDGE_CONFIG.md +1 -1
  26. package/data/packages/platform-feature-flags/api/Variable.VERCEL_EDGE_CONFIG_ID.md +1 -1
  27. package/data/packages/platform-feature-flags/api/Variable.VERCEL_EDGE_CONFIG_TOKEN.md +1 -1
  28. package/data/packages/platform-feature-flags/api/Variable.VERCEL_FEATURE_FLAG_CONFIG_ENTRIES.md +1 -1
  29. package/data/packages/platform-feature-flags/api/Variable.VERCEL_FEATURE_FLAG_PREFIX.md +1 -1
  30. package/data/packages/platform-feature-flags/api/Variable.VERCEL_FEATURE_FLAG_WRITER_CONFIG_ENTRIES.md +1 -1
  31. package/data/packages/platform-feature-flags/api/Variable.VERCEL_TEAM_ID.md +1 -1
  32. package/data/packages/platform-mailing/api/Class.BlobTemplateFetchStrategy.md +60 -0
  33. package/data/packages/platform-mailing/api/Class.DatabaseTemplateFetchStrategy.md +3 -3
  34. package/data/packages/platform-mailing/api/Class.DeliveryStrategyBase.md +4 -3
  35. package/data/packages/platform-mailing/api/Class.FileTemplateFetchStrategy.md +62 -0
  36. package/data/packages/platform-mailing/api/Class.LogDeliveryStrategy.md +71 -0
  37. package/data/packages/platform-mailing/api/Class.MailModule.md +7 -7
  38. package/data/packages/platform-mailing/api/Class.MailService.md +11 -7
  39. package/data/packages/platform-mailing/api/Class.MailTemplateEngine.md +29 -4
  40. package/data/packages/platform-mailing/api/Class.MailgunDeliveryStrategy.md +3 -3
  41. package/data/packages/platform-mailing/api/Class.PostmarkDeliveryStrategy.md +3 -3
  42. package/data/packages/platform-mailing/api/Class.ResendDeliveryStrategy.md +3 -3
  43. package/data/packages/platform-mailing/api/Class.SendGridDeliveryStrategy.md +3 -3
  44. package/data/packages/platform-mailing/api/Class.SmtpDeliveryStrategy.md +3 -3
  45. package/data/packages/platform-mailing/api/Class.TemplateFetchStrategyBase.md +7 -11
  46. package/data/packages/platform-mailing/api/Interface.IMailEvents.md +28 -5
  47. package/data/packages/platform-mailing/api/Interface.IMailModuleOptions.md +50 -7
  48. package/data/packages/platform-mailing/api/Interface.IMailTemplateVariants.md +13 -3
  49. package/data/packages/platform-mailing/api/TypeAlias.MailTemplateFormat.md +1 -1
  50. package/data/packages/platform-mailing/api/Variable.MAILGUN_API_KEY.md +1 -1
  51. package/data/packages/platform-mailing/api/Variable.MAILGUN_CONFIG_ENTRIES.md +1 -1
  52. package/data/packages/platform-mailing/api/Variable.MAILGUN_DOMAIN.md +1 -1
  53. package/data/packages/platform-mailing/api/Variable.MAIL_DELIVERY_STRATEGY_TOKEN.md +1 -1
  54. package/data/packages/platform-mailing/api/Variable.MAIL_HOST.md +1 -1
  55. package/data/packages/platform-mailing/api/Variable.MAIL_MAILGUN_API_KEY.md +1 -1
  56. package/data/packages/platform-mailing/api/Variable.MAIL_MAILGUN_DOMAIN.md +1 -1
  57. package/data/packages/platform-mailing/api/Variable.MAIL_PORT.md +1 -1
  58. package/data/packages/platform-mailing/api/Variable.MAIL_POSTMARK_API_KEY.md +1 -1
  59. package/data/packages/platform-mailing/api/Variable.MAIL_RESEND_API_KEY.md +1 -1
  60. package/data/packages/platform-mailing/api/Variable.MAIL_SENDER_EMAIL.md +1 -1
  61. package/data/packages/platform-mailing/api/Variable.MAIL_SENDGRID_API_KEY.md +1 -1
  62. package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_HOST.md +1 -1
  63. package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_PASSWORD.md +1 -1
  64. package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_PORT.md +1 -1
  65. package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_SECURE.md +1 -1
  66. package/data/packages/platform-mailing/api/Variable.MAIL_SMTP_USER.md +1 -1
  67. package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_ENGINE_FORMAT.md +1 -1
  68. package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_FETCH_STRATEGY_TOKEN.md +1 -1
  69. package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_NAMES_TOKEN.md +12 -0
  70. package/data/packages/platform-mailing/api/Variable.MAIL_TEMPLATE_REPOSITORY_TOKEN.md +1 -1
  71. package/data/packages/platform-mailing/api/Variable.MAIL_USER.md +1 -1
  72. package/data/packages/platform-mailing/api/Variable.PLATFORM_MAILING_CONFIG_ENTRIES.md +1 -1
  73. package/data/packages/platform-mailing/api/Variable.POSTMARK_API_KEY.md +1 -1
  74. package/data/packages/platform-mailing/api/Variable.POSTMARK_CONFIG_ENTRIES.md +1 -1
  75. package/data/packages/platform-mailing/api/Variable.RESEND_API_KEY.md +1 -1
  76. package/data/packages/platform-mailing/api/Variable.RESEND_CONFIG_ENTRIES.md +1 -1
  77. package/data/packages/platform-mailing/api/Variable.SENDGRID_API_KEY.md +1 -1
  78. package/data/packages/platform-mailing/api/Variable.SENDGRID_CONFIG_ENTRIES.md +1 -1
  79. package/data/packages/platform-mailing/api/Variable.SMTP_CONFIG_ENTRIES.md +1 -1
  80. package/data/packages/platform-mailing/api/Variable.SMTP_HOST.md +1 -1
  81. package/data/packages/platform-mailing/api/Variable.SMTP_PASSWORD.md +1 -1
  82. package/data/packages/platform-mailing/api/Variable.SMTP_PORT.md +1 -1
  83. package/data/packages/platform-mailing/api/Variable.SMTP_SECURE.md +1 -1
  84. package/data/packages/platform-mailing/api/Variable.SMTP_USER.md +1 -1
  85. package/data/packages/platform-mailing/api/index.md +4 -2
  86. package/package.json +1 -1
  87. package/data/packages/platform-mailing/api/Variable.MAIL_DELIVERY_STRATEGY.md +0 -14
  88. 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. You select the strategy via environment variablesno code changes required to switch 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 | Value for `MAIL_DELIVERY_STRATEGY` | When to use |
26
- | ------------ | ---------------------------------- | ------------------------------------ |
27
- | **SMTP** | `smtp` | Any SMTP server (self-hosted, relay) |
28
- | **Postmark** | `postmark` | Postmark transactional email |
29
- | **Resend** | `resend` | Resend API |
30
- | **SendGrid** | `sendgrid` | Twilio SendGrid |
31
- | **Mailgun** | `mailgun` | Mailgun API |
32
- | **Log** | `log` | Development only — logs to console |
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` is a global module. Register it once in your root module:
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: [MailModule],
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
- The module reads all configuration from environment variables. No `register()` call is needed.
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
- MAIL_FROM_ADDRESS=noreply@yourapp.com
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 blob storage:
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 | Value for `MAIL_TEMPLATE_STRATEGY` | Description |
108
- | -------- | ---------------------------------- | ------------------------------------------- |
109
- | **File** | `file` | Load templates from a local directory |
110
- | **Blob** | `blob` | Load templates from `platform-blob-storage` |
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 `MAIL_DELIVERY_STRATEGY=log` during local development to see email content in the console without sending real emails.
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 `ResourceManager` at startup.
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 --> ResourceManager["ResourceManager<br/>tryLoadAsync()"]
28
+ MailTemplateEngine --> TemplateFetchStrategy["TemplateFetchStrategy<br/>(file / blob / database)"]
23
29
  MailTemplateEngine --> ContentTemplateEngine["ContentTemplateEngine<br/>variable interpolation"]
24
- ResourceManager --> FileResourceStrategy[FileResourceStrategy]
25
- ResourceManager --> BlobResourceStrategy[BlobResourceStrategy]
26
- ResourceManager --> EmbeddedResourceStrategy[EmbeddedResourceStrategy]
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` looks up the pre-loaded template content by name and format (`.html` or `.txt`).
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 | Description |
59
- | ---------------------------------------------- | --------------------------------- |
60
- | `<code>&#123;&#123;variableName&#125;&#125;</code>` | Simple variable substitution |
61
- | `<code>&#123;&#123;#if condition&#125;&#125;...&#123;&#123;/if&#125;&#125;</code>` | Conditional block |
62
- | `<code>&#123;&#123;#if condition&#125;&#125;...&#123;&#123;else&#125;&#125;...&#123;&#123;/if&#125;&#125;</code>` | Conditional with else |
63
- | `<code>&#123;&#123;#unless condition&#125;&#125;...&#123;&#123;/unless&#125;&#125;</code>` | Negative conditional |
64
- | `<code>&#123;&#123;#each items&#125;&#125;...&#123;&#123;/each&#125;&#125;</code>` | Loop over array |
65
- | `<code>&#123;&#123;#with object&#125;&#125;...&#123;&#123;/with&#125;&#125;</code>` | Context switching |
66
- | `<code>&#123;&#123;@index&#125;&#125;</code>`, `<code>&#123;&#123;@first&#125;&#125;</code>`, `<code>&#123;&#123;@last&#125;&#125;</code>` | Loop metadata inside `#each` |
67
- | `<code>&#123;&#123;nested.property&#125;&#125;</code>` | Dot notation for nested values |
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, &#123;&#123;userName&#125;&#125;!</h1>
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="&#123;&#123;verificationUrl&#125;&#125;">Verify Email</a>
88
+ <a href="{{verificationUrl}}">Verify Email</a>
83
89
  </p>
84
- &#123;&#123;#if expiresInHours&#125;&#125;
85
- <p>This link expires in &#123;&#123;expiresInHours&#125;&#125; hours.</p>
86
- &#123;&#123;/if&#125;&#125;
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, &#123;&#123;userName&#125;&#125;!
101
+ Hello, {{userName}}!
96
102
 
97
103
  Please verify your email address by visiting the following link:
98
104
 
99
- &#123;&#123;verificationUrl&#125;&#125;
105
+ {{verificationUrl}}
100
106
 
101
- &#123;&#123;#if expiresInHours&#125;&#125;This link expires in &#123;&#123;expiresInHours&#125;&#125; hours.&#123;&#123;/if&#125;&#125;
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
- Set the environment variable to use the file strategy:
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`. Upload a manifest file (`templates/templates.json`) and the template files to your blob storage:
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
- Set the environment variable:
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
- ```env
192
- MAIL_TEMPLATE_STRATEGY=blob
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
- The `BlobTemplateFetchStrategy` downloads the manifest, then fetches each listed file from blob storage via `BlobService` from `platform-blob-storage`.
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 `MAIL_TEMPLATE_STRATEGY` is set correctly (`file` or `blob`).
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
- - [ ] `MAIL_TEMPLATE_STRATEGY` set to `file` or `blob`
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.