@cosmicdrift/kumiko-framework 0.336.1 → 0.337.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/api/auth-middleware.js +43 -19
  2. package/dist/api/auth-routes.d.ts +1 -0
  3. package/dist/api/auth-routes.js +20 -0
  4. package/dist/api/redis-sse-broker.d.ts +1 -0
  5. package/dist/api/redis-sse-broker.js +4 -5
  6. package/dist/api/server.js +3 -3
  7. package/dist/api/sse-route.js +14 -1
  8. package/dist/bun-db/query.js +6 -4
  9. package/dist/crypto/kek-source.js +1 -0
  10. package/dist/db/blind-index-cleanup.js +1 -1
  11. package/dist/db/event-store-executor-read.js +15 -4
  12. package/dist/db/queries/event-consumer.d.ts +2 -2
  13. package/dist/db/queries/event-consumer.js +5 -4
  14. package/dist/db/queries/event-store.js +6 -6
  15. package/dist/db/queries/projection-rebuild.js +4 -4
  16. package/dist/db/queries/seed-context.js +6 -6
  17. package/dist/derivatives/derivatives-context.js +5 -2
  18. package/dist/engine/boot-validator/projection-list-screens.d.ts +1 -1
  19. package/dist/engine/boot-validator/projection-list-screens.js +13 -0
  20. package/dist/engine/boot-validator/screens.js +12 -0
  21. package/dist/engine/build-config-feature-schema.js +4 -0
  22. package/dist/engine/define-feature.js +1 -0
  23. package/dist/engine/feature-ast/extractors/index.d.ts +1 -1
  24. package/dist/engine/feature-ast/extractors/index.js +1 -1
  25. package/dist/engine/feature-ast/extractors/jobs-routes.js +6 -2
  26. package/dist/engine/feature-ast/extractors/round3.d.ts +2 -1
  27. package/dist/engine/feature-ast/extractors/round3.js +11 -0
  28. package/dist/engine/feature-ast/extractors/shared.js +1 -3
  29. package/dist/engine/feature-ast/index.d.ts +1 -1
  30. package/dist/engine/feature-ast/parse.js +3 -1
  31. package/dist/engine/feature-ast/patch.d.ts +3 -0
  32. package/dist/engine/feature-ast/patch.js +8 -11
  33. package/dist/engine/feature-ast/patcher.d.ts +6 -1
  34. package/dist/engine/feature-ast/patcher.js +3 -0
  35. package/dist/engine/feature-ast/pattern-change-schema.d.ts +590 -1
  36. package/dist/engine/feature-ast/pattern-change-schema.js +17 -2
  37. package/dist/engine/feature-ast/patterns.d.ts +8 -2
  38. package/dist/engine/feature-ast/patterns.js +1 -0
  39. package/dist/engine/feature-ast/render.js +9 -0
  40. package/dist/engine/feature-builder-state.d.ts +2 -1
  41. package/dist/engine/feature-builder-state.js +1 -0
  42. package/dist/engine/feature-config-events-jobs.d.ts +4 -1
  43. package/dist/engine/feature-config-events-jobs.js +20 -0
  44. package/dist/engine/feature-ui-extensions.js +15 -21
  45. package/dist/engine/index.d.ts +1 -1
  46. package/dist/engine/pattern-library/library.js +2 -1
  47. package/dist/engine/pattern-library/static-schemas.d.ts +1 -0
  48. package/dist/engine/pattern-library/static-schemas.js +47 -4
  49. package/dist/engine/registry-facade.js +7 -0
  50. package/dist/engine/registry-ingest.js +7 -0
  51. package/dist/engine/registry-state.d.ts +2 -1
  52. package/dist/engine/registry-state.js +1 -0
  53. package/dist/engine/registry-validate.d.ts +1 -1
  54. package/dist/engine/registry-validate.js +39 -17
  55. package/dist/engine/registry.js +2 -2
  56. package/dist/engine/types/index.d.ts +2 -2
  57. package/dist/engine/types/index.js +1 -1
  58. package/dist/engine/types/screen.d.ts +1 -1
  59. package/dist/engine/types/screen.js +1 -1
  60. package/dist/errors/classes.d.ts +5 -0
  61. package/dist/errors/classes.js +15 -0
  62. package/dist/errors/index.d.ts +1 -1
  63. package/dist/errors/index.js +1 -1
  64. package/dist/i18n/required-surface-keys.js +3 -5
  65. package/dist/migrations/pending-rebuilds.d.ts +2 -0
  66. package/dist/migrations/pending-rebuilds.js +3 -0
  67. package/dist/pipeline/dispatch-query.js +3 -5
  68. package/dist/pipeline/dispatch-stream.js +2 -4
  69. package/dist/pipeline/dispatch-write.js +2 -4
  70. package/dist/pipeline/event-dispatcher-delivery.d.ts +0 -1
  71. package/dist/pipeline/event-dispatcher-delivery.js +1 -8
  72. package/dist/pipeline/event-dispatcher.js +16 -25
  73. package/dist/pipeline/handler-access-error.d.ts +3 -0
  74. package/dist/pipeline/handler-access-error.js +17 -0
  75. package/dist/pipeline/irreversible-operation-gate.js +9 -3
  76. package/dist/pipeline/member-read-only-transaction.js +8 -3
  77. package/dist/pipeline/system-hooks.js +7 -1
  78. package/dist/pipeline/system-identity-switch.js +1 -1
  79. package/dist/search/meilisearch-adapter.js +0 -2
  80. package/dist/stack/push-entity-projection-tables.js +5 -3
  81. package/dist/stack/redis.d.ts +1 -0
  82. package/dist/stack/redis.js +11 -2
  83. package/dist/stack/table-helpers.d.ts +3 -1
  84. package/dist/stack/table-helpers.js +9 -7
  85. package/dist/stack/test-stack.js +1 -7
  86. package/dist/testing/handler-context.js +3 -6
  87. package/dist/ui-types/index.d.ts +1 -1
  88. package/dist/ui-types/index.js +1 -1
  89. package/dist/upgrade-cli.js +29 -2
  90. package/package.json +4 -4
  91. package/src/changes.json +92 -0
  92. package/src/scripts/codemod/collect-source-files.ts +48 -0
  93. package/src/scripts/codemod/migrate-cross-tenant.ts +3 -23
  94. package/src/scripts/codemod/migrate-db-raw.ts +6 -23
  95. package/src/scripts/codemod/migrate-open-to-all.ts +4 -24
  96. package/src/scripts/codemod/unprocessable-error-details-reason.ts +47 -3
@@ -409,6 +409,7 @@ function buildSecretsEditScreen(screenId, secrets, access, declaredTranslationKe
409
409
  const fieldLabels = {};
410
410
  const fieldHints = {};
411
411
  const requiredFields = [];
412
+ const fieldAccess = {};
412
413
  // Mutable outer record — TranslationKeys' Readonly<Record<...>> index
413
414
  // signature only permits reading, so the top-level assignments below
414
415
  // need a writable local type; each entry is still a fresh, never-mutated object.
@@ -430,6 +431,8 @@ function buildSecretsEditScreen(screenId, secrets, access, declaredTranslationKe
430
431
  }
431
432
  if (s.def.required === true)
432
433
  requiredFields.push(fieldId);
434
+ if (s.def.writeRoles !== undefined)
435
+ fieldAccess[fieldId] = { roles: [...s.def.writeRoles] };
433
436
  }
434
437
  const titleKey = `${feature}.settings`;
435
438
  sections.push({
@@ -444,6 +447,7 @@ function buildSecretsEditScreen(screenId, secrets, access, declaredTranslationKe
444
447
  fieldLabels,
445
448
  ...(Object.keys(fieldHints).length > 0 && { fieldHints }),
446
449
  ...(requiredFields.length > 0 && { requiredFields }),
450
+ ...(Object.keys(fieldAccess).length > 0 && { fieldAccess }),
447
451
  sections,
448
452
  ...(access !== undefined && { access }),
449
453
  };
@@ -124,6 +124,7 @@ export function defineFeature(name, setup, settings) {
124
124
  handlerEntityMappings: state.handlerEntityMappings,
125
125
  metrics: state.metrics,
126
126
  secretKeys: state.secretKeys,
127
+ secretNamespaces: state.secretNamespaces,
127
128
  projections: state.projections,
128
129
  entityProjectionExtensions: state.entityProjectionExtensions,
129
130
  multiStreamProjections: state.multiStreamProjections,
@@ -7,7 +7,7 @@ export { collectScreenOpaqueProps, extractMultiStreamProjection, extractProjecti
7
7
  export { findImportBindingForLocalName, resolveModuleFile, } from "./resolve-import.js";
8
8
  export { extractDescribe, extractOptionalRequires, extractReadsConfig, extractRequires, extractSystemScope, extractToggleable, extractUiHints, } from "./round1.js";
9
9
  export { extractEntity, extractNav, extractRelation, extractWorkspace, } from "./round2.js";
10
- export { extractClaimKey, extractConfig, extractMetric, extractReferenceData, extractSecret, extractTranslations, extractUseExtension, isClaimKeyType, type NamedOptionsResult, readNamedOptions, } from "./round3.js";
10
+ export { extractClaimKey, extractConfig, extractMetric, extractReferenceData, extractSecret, extractSecretNamespace, extractTranslations, extractUseExtension, isClaimKeyType, type NamedOptionsResult, readNamedOptions, } from "./round3.js";
11
11
  export { extractBootCheck, extractEnvSchema, extractExposesApi, extractExtendsRegistrar, extractStoreTable, extractUsesApi, } from "./round5.js";
12
12
  export { extractTreeActions } from "./round6.js";
13
13
  export type { ExtractOutput } from "./shared.js";
@@ -7,7 +7,7 @@ export { collectScreenOpaqueProps, extractMultiStreamProjection, extractProjecti
7
7
  export { findImportBindingForLocalName, resolveModuleFile, } from "./resolve-import.js";
8
8
  export { extractDescribe, extractOptionalRequires, extractReadsConfig, extractRequires, extractSystemScope, extractToggleable, extractUiHints, } from "./round1.js";
9
9
  export { extractEntity, extractNav, extractRelation, extractWorkspace, } from "./round2.js";
10
- export { extractClaimKey, extractConfig, extractMetric, extractReferenceData, extractSecret, extractTranslations, extractUseExtension, isClaimKeyType, readNamedOptions, } from "./round3.js";
10
+ export { extractClaimKey, extractConfig, extractMetric, extractReferenceData, extractSecret, extractSecretNamespace, extractTranslations, extractUseExtension, isClaimKeyType, readNamedOptions, } from "./round3.js";
11
11
  export { extractBootCheck, extractEnvSchema, extractExposesApi, extractExtendsRegistrar, extractStoreTable, extractUsesApi, } from "./round5.js";
12
12
  export { extractTreeActions } from "./round6.js";
13
13
  export { fail, findFunctionLiteral, isPlainObject, ok, readBooleanProperty, readDataLiteralNode, readNameOrRef, readNameOrRefOrList, readObjectPropertyInitializer, readPropertyKey, readStringLiteralArgs, readVarargsOrArrayProp, resolveSameFileObjectLiteral, } from "./shared.js";
@@ -126,10 +126,14 @@ export function extractHttpRoute(call, sourceFile) {
126
126
  if (!fn) {
127
127
  return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "handler must be an inline arrow function or function expression");
128
128
  }
129
- // Missing/non-boolean `anonymous` reads as false (the safe side — mounted
129
+ // Missing `anonymous` reads as false (the safe side — mounted
130
130
  // behind the session auth chain, not public) so a source file that predates
131
131
  // the required field still parses instead of erroring here.
132
- const anonymous = readBooleanProperty(arg, "anonymous") === true;
132
+ const anonymousValue = readBooleanProperty(arg, "anonymous");
133
+ if (anonymousValue === undefined && arg.getProperty("anonymous") !== undefined) {
134
+ return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "anonymous must be a boolean literal — a non-literal value would be rewritten to a literal on round-trip");
135
+ }
136
+ const anonymous = anonymousValue === true;
133
137
  return ok({
134
138
  kind: "httpRoute",
135
139
  source: sourceLocationFromNode(call, sourceFile),
@@ -1,7 +1,7 @@
1
1
  import type { CallExpression, SourceFile } from "ts-morph";
2
2
  import type { ClaimKeyType } from "../../types/handlers.js";
3
3
  import type { ParseError } from "../parse.js";
4
- import type { ClaimKeyPattern, ConfigPattern, MetricPattern, ReferenceDataPattern, SecretPattern, TranslationsPattern, UseExtensionPattern } from "../patterns.js";
4
+ import type { ClaimKeyPattern, ConfigPattern, MetricPattern, ReferenceDataPattern, SecretNamespacePattern, SecretPattern, TranslationsPattern, UseExtensionPattern } from "../patterns.js";
5
5
  import { type ExtractOutput } from "./shared.js";
6
6
  export type NamedOptionsResult = {
7
7
  readonly kind: "ok";
@@ -16,6 +16,7 @@ export declare function extractConfig(call: CallExpression, sourceFile: SourceFi
16
16
  export declare function extractTranslations(call: CallExpression, sourceFile: SourceFile): ExtractOutput<TranslationsPattern>;
17
17
  export declare function extractMetric(call: CallExpression, sourceFile: SourceFile): ExtractOutput<MetricPattern>;
18
18
  export declare function extractSecret(call: CallExpression, sourceFile: SourceFile): ExtractOutput<SecretPattern>;
19
+ export declare function extractSecretNamespace(call: CallExpression, sourceFile: SourceFile): ExtractOutput<SecretNamespacePattern>;
19
20
  export declare function isClaimKeyType(value: unknown): value is ClaimKeyType;
20
21
  export declare function extractClaimKey(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ClaimKeyPattern>;
21
22
  export declare function extractReferenceData(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ReferenceDataPattern>;
@@ -98,6 +98,17 @@ export function extractSecret(call, sourceFile) {
98
98
  options: parsed.options,
99
99
  });
100
100
  }
101
+ export function extractSecretNamespace(call, sourceFile) {
102
+ const parsed = readNamedOptions(call, sourceFile, "secretNamespace");
103
+ if (parsed.kind === "error")
104
+ return parsed;
105
+ return ok({
106
+ kind: "secretNamespace",
107
+ source: sourceLocationFromNode(call, sourceFile),
108
+ shortName: parsed.name,
109
+ options: parsed.options,
110
+ });
111
+ }
101
112
  export function isClaimKeyType(value) {
102
113
  return (value === "string" ||
103
114
  value === "number" ||
@@ -195,9 +195,7 @@ function resolveIdentifierToStringLiteral(identifier) {
195
195
  const scoped = findScopedVariableDeclaration(id, name);
196
196
  if (scoped) {
197
197
  const init = scoped.getInitializer();
198
- const value = init ? unwrapLiteralInitializer(init) : undefined;
199
- if (value !== undefined)
200
- return value;
198
+ return init ? unwrapLiteralInitializer(init) : undefined;
201
199
  }
202
200
  const binding = findImportBindingForLocalName(id.getSourceFile(), name);
203
201
  if (!binding)
@@ -8,7 +8,7 @@ export type { AddAuthClaimsArgs, AddClaimKeyArgs, AddConfigArgs, AddDefineEventA
8
8
  export { createFeaturePatcher } from "./patcher.js";
9
9
  export type { PatternChangeIssue, PatternChangesParseResult } from "./pattern-change-schema.js";
10
10
  export { parsePatternChanges } from "./pattern-change-schema.js";
11
- export type { AuthClaimsPattern, ClaimKeyPattern, ConfigPattern, DefineEventPattern, Editability, EntityPattern, ExtendsRegistrarPattern, FeaturePattern, FeaturePatternKind, HookPattern, HttpRoutePattern, JobPattern, MetricPattern, MultiStreamProjectionPattern, NavPattern, NotificationPattern, OptionalRequiresPattern, ProjectionPattern, QueryHandlerPattern, ReadsConfigPattern, ReferenceDataPattern, RelationPattern, RequiresPattern, ScreenPattern, SecretPattern, StreamHandlerPattern, SystemScopePattern, ToggleablePattern, TranslationsPattern, UnknownPattern, UseExtensionPattern, WorkspacePattern, WriteHandlerPattern, } from "./patterns.js";
11
+ export type { AuthClaimsPattern, ClaimKeyPattern, ConfigPattern, DefineEventPattern, Editability, EntityPattern, ExtendsRegistrarPattern, FeaturePattern, FeaturePatternKind, HookPattern, HttpRoutePattern, JobPattern, MetricPattern, MultiStreamProjectionPattern, NavPattern, NotificationPattern, OptionalRequiresPattern, ProjectionPattern, QueryHandlerPattern, ReadsConfigPattern, ReferenceDataPattern, RelationPattern, RequiresPattern, ScreenPattern, SecretNamespacePattern, SecretPattern, StreamHandlerPattern, SystemScopePattern, ToggleablePattern, TranslationsPattern, UnknownPattern, UseExtensionPattern, WorkspacePattern, WriteHandlerPattern, } from "./patterns.js";
12
12
  export { getEditability } from "./patterns.js";
13
13
  export type { RenderFeatureFileInput } from "./render.js";
14
14
  export { FEATURE_FILE_VERSION, renderFeatureFile, renderPattern, renderValue, VERSION_HEADER, } from "./render.js";
@@ -21,7 +21,7 @@
21
21
  // Per-pattern extractors fill in iteratively (C1.5) — each round adds
22
22
  // one extractor + a focused test.
23
23
  import { Project, SyntaxKind } from "ts-morph";
24
- import { extractAiClassify, extractAiExtract, extractAiGenerate, extractAuthClaims, extractBootCheck, extractClaimKey, extractConfig, extractDefineEvent, extractDescribe, extractEntity, extractEnvSchema, extractExposesApi, extractExtendsRegistrar, extractHook, extractHttpRoute, extractJob, extractMetric, extractMultiStreamProjection, extractNav, extractNotification, extractOptionalRequires, extractProjection, extractQueryHandler, extractReadsConfig, extractReferenceData, extractRelation, extractRequires, extractScreen, extractSecret, extractStoreTable, extractStreamHandler, extractSystemScope, extractToggleable, extractTranslations, extractTreeActions, extractUiHints, extractUseExtension, extractUsesApi, extractWorkspace, extractWriteHandler, findFunctionLiteral, findImportBindingForLocalName, readObjectPropertyInitializer, resolveModuleFile, resolveSameFileObjectLiteral, } from "./extractors/index.js";
24
+ import { extractAiClassify, extractAiExtract, extractAiGenerate, extractAuthClaims, extractBootCheck, extractClaimKey, extractConfig, extractDefineEvent, extractDescribe, extractEntity, extractEnvSchema, extractExposesApi, extractExtendsRegistrar, extractHook, extractHttpRoute, extractJob, extractMetric, extractMultiStreamProjection, extractNav, extractNotification, extractOptionalRequires, extractProjection, extractQueryHandler, extractReadsConfig, extractReferenceData, extractRelation, extractRequires, extractScreen, extractSecret, extractSecretNamespace, extractStoreTable, extractStreamHandler, extractSystemScope, extractToggleable, extractTranslations, extractTreeActions, extractUiHints, extractUseExtension, extractUsesApi, extractWorkspace, extractWriteHandler, findFunctionLiteral, findImportBindingForLocalName, readObjectPropertyInitializer, resolveModuleFile, resolveSameFileObjectLiteral, } from "./extractors/index.js";
25
25
  import { sourceLocationFromNode } from "./source-location.js";
26
26
  /**
27
27
  * Parse the given feature file and return all recognised r.* calls
@@ -415,6 +415,8 @@ function dispatchExtractor(methodName, call, sourceFile) {
415
415
  return extractMetric(call, sourceFile);
416
416
  case "secret":
417
417
  return extractSecret(call, sourceFile);
418
+ case "secretNamespace":
419
+ return extractSecretNamespace(call, sourceFile);
418
420
  case "claimKey":
419
421
  return extractClaimKey(call, sourceFile);
420
422
  case "referenceData":
@@ -44,6 +44,9 @@ export type PatternId = {
44
44
  } | {
45
45
  readonly kind: "secret";
46
46
  readonly shortName: string;
47
+ } | {
48
+ readonly kind: "secretNamespace";
49
+ readonly shortName: string;
47
50
  } | {
48
51
  readonly kind: "claimKey";
49
52
  readonly shortName: string;
@@ -85,9 +85,7 @@ export function applyChanges(sourceFile, changes) {
85
85
  * biome-stable formatting that matches the renderFeatureFile output.
86
86
  */
87
87
  export function addPattern(sourceFile, pattern) {
88
- if (pattern.kind === "ai.generate" ||
89
- pattern.kind === "ai.extract" ||
90
- pattern.kind === "ai.classify") {
88
+ if (isAiStepId(pattern)) {
91
89
  throw new Error(`addPattern: ${pattern.kind} steps must be inserted into a defineWorkflow steps array, not the setup body`);
92
90
  }
93
91
  const setup = findSetupCallback(sourceFile);
@@ -430,11 +428,10 @@ function applyEditsDescending(sourceFile, edits) {
430
428
  for (const edit of sorted)
431
429
  sourceFile.replaceText([edit.start, edit.end], edit.text);
432
430
  }
433
- // =============================================================================
434
- // Lookup
435
- // =============================================================================
436
- function isAiStepId(id) {
437
- return id.kind === "ai.generate" || id.kind === "ai.extract" || id.kind === "ai.classify";
431
+ function isAiStepId(idOrPattern) {
432
+ return (idOrPattern.kind === "ai.generate" ||
433
+ idOrPattern.kind === "ai.extract" ||
434
+ idOrPattern.kind === "ai.classify");
438
435
  }
439
436
  function aiStepPatchSpan(sourceFile, call) {
440
437
  const start = call.getStart();
@@ -503,7 +500,7 @@ export const SINGLETON_KINDS = new Set([
503
500
  * feature can fix it explicitly.
504
501
  */
505
502
  function findCallForId(sourceFile, id) {
506
- if (id.kind === "ai.generate" || id.kind === "ai.extract" || id.kind === "ai.classify") {
503
+ if (isAiStepId(id)) {
507
504
  return findAiStepCall(sourceFile, id);
508
505
  }
509
506
  const setup = findSetupCallback(sourceFile);
@@ -561,9 +558,8 @@ function readAiStepKey(call) {
561
558
  return undefined;
562
559
  }
563
560
  function findAiStepCall(sourceFile, id) {
564
- if (id.kind !== "ai.generate" && id.kind !== "ai.extract" && id.kind !== "ai.classify") {
561
+ if (!isAiStepId(id))
565
562
  return undefined;
566
- }
567
563
  const factory = AI_STEP_FACTORY[id.kind];
568
564
  const matches = [];
569
565
  for (const call of sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {
@@ -629,6 +625,7 @@ function callMatchesId(call, id) {
629
625
  matchObjectProperty(call, "target", id.target));
630
626
  case "metric":
631
627
  case "secret":
628
+ case "secretNamespace":
632
629
  case "claimKey":
633
630
  return (matchFirstArgString(call, id.shortName) || matchObjectProperty(call, "name", id.shortName));
634
631
  case "referenceData":
@@ -1,7 +1,7 @@
1
1
  import type { SourceFile } from "ts-morph";
2
2
  import type { LifecycleHookType } from "../constants.js";
3
3
  import type { ConfigKeyDefinition, ConfigKeyType, JobDefinition, RunIn, TranslationKeys } from "../types/config.js";
4
- import type { MetricOptions, SecretOptions } from "../types/feature.js";
4
+ import type { MetricOptions, SecretNamespaceOptions, SecretOptions } from "../types/feature.js";
5
5
  import type { EntityDefinition } from "../types/fields.js";
6
6
  import type { AccessRule, ClaimKeyType, EscapeHatchDeclaration, RateLimitOption } from "../types/handlers.js";
7
7
  import type { HookPhase } from "../types/hooks.js";
@@ -115,6 +115,10 @@ export type AddSecretArgs = {
115
115
  readonly name: string;
116
116
  readonly options: SecretOptions;
117
117
  };
118
+ export type AddSecretNamespaceArgs = {
119
+ readonly name: string;
120
+ readonly options: SecretNamespaceOptions;
121
+ };
118
122
  export type AddClaimKeyArgs = {
119
123
  readonly name: string;
120
124
  readonly type: ClaimKeyType;
@@ -177,6 +181,7 @@ export type FeaturePatcher = {
177
181
  readonly addTranslations: (args: AddTranslationsArgs) => void;
178
182
  readonly addMetric: (args: AddMetricArgs) => void;
179
183
  readonly addSecret: (args: AddSecretArgs) => void;
184
+ readonly addSecretNamespace: (args: AddSecretNamespaceArgs) => void;
180
185
  readonly addClaimKey: (args: AddClaimKeyArgs) => void;
181
186
  readonly addReferenceData: (args: AddReferenceDataArgs) => void;
182
187
  readonly addUseExtension: (args: AddUseExtensionArgs) => void;
@@ -110,6 +110,9 @@ export function createFeaturePatcher(sourceFile) {
110
110
  addSecret({ name, options }) {
111
111
  add({ kind: "secret", source: SYNTHETIC_LOC, shortName: name, options });
112
112
  },
113
+ addSecretNamespace({ name, options }) {
114
+ add({ kind: "secretNamespace", source: SYNTHETIC_LOC, shortName: name, options });
115
+ },
113
116
  addClaimKey({ name, type }) {
114
117
  add({ kind: "claimKey", source: SYNTHETIC_LOC, shortName: name, claimType: type });
115
118
  },