@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.
- package/dist/api/auth-middleware.js +43 -19
- package/dist/api/auth-routes.d.ts +1 -0
- package/dist/api/auth-routes.js +20 -0
- package/dist/api/redis-sse-broker.d.ts +1 -0
- package/dist/api/redis-sse-broker.js +4 -5
- package/dist/api/server.js +3 -3
- package/dist/api/sse-route.js +14 -1
- package/dist/bun-db/query.js +6 -4
- package/dist/crypto/kek-source.js +1 -0
- package/dist/db/blind-index-cleanup.js +1 -1
- package/dist/db/event-store-executor-read.js +15 -4
- package/dist/db/queries/event-consumer.d.ts +2 -2
- package/dist/db/queries/event-consumer.js +5 -4
- package/dist/db/queries/event-store.js +6 -6
- package/dist/db/queries/projection-rebuild.js +4 -4
- package/dist/db/queries/seed-context.js +6 -6
- package/dist/derivatives/derivatives-context.js +5 -2
- package/dist/engine/boot-validator/projection-list-screens.d.ts +1 -1
- package/dist/engine/boot-validator/projection-list-screens.js +13 -0
- package/dist/engine/boot-validator/screens.js +12 -0
- package/dist/engine/build-config-feature-schema.js +4 -0
- package/dist/engine/define-feature.js +1 -0
- package/dist/engine/feature-ast/extractors/index.d.ts +1 -1
- package/dist/engine/feature-ast/extractors/index.js +1 -1
- package/dist/engine/feature-ast/extractors/jobs-routes.js +6 -2
- package/dist/engine/feature-ast/extractors/round3.d.ts +2 -1
- package/dist/engine/feature-ast/extractors/round3.js +11 -0
- package/dist/engine/feature-ast/extractors/shared.js +1 -3
- package/dist/engine/feature-ast/index.d.ts +1 -1
- package/dist/engine/feature-ast/parse.js +3 -1
- package/dist/engine/feature-ast/patch.d.ts +3 -0
- package/dist/engine/feature-ast/patch.js +8 -11
- package/dist/engine/feature-ast/patcher.d.ts +6 -1
- package/dist/engine/feature-ast/patcher.js +3 -0
- package/dist/engine/feature-ast/pattern-change-schema.d.ts +590 -1
- package/dist/engine/feature-ast/pattern-change-schema.js +17 -2
- package/dist/engine/feature-ast/patterns.d.ts +8 -2
- package/dist/engine/feature-ast/patterns.js +1 -0
- package/dist/engine/feature-ast/render.js +9 -0
- package/dist/engine/feature-builder-state.d.ts +2 -1
- package/dist/engine/feature-builder-state.js +1 -0
- package/dist/engine/feature-config-events-jobs.d.ts +4 -1
- package/dist/engine/feature-config-events-jobs.js +20 -0
- package/dist/engine/feature-ui-extensions.js +15 -21
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/pattern-library/library.js +2 -1
- package/dist/engine/pattern-library/static-schemas.d.ts +1 -0
- package/dist/engine/pattern-library/static-schemas.js +47 -4
- package/dist/engine/registry-facade.js +7 -0
- package/dist/engine/registry-ingest.js +7 -0
- package/dist/engine/registry-state.d.ts +2 -1
- package/dist/engine/registry-state.js +1 -0
- package/dist/engine/registry-validate.d.ts +1 -1
- package/dist/engine/registry-validate.js +39 -17
- package/dist/engine/registry.js +2 -2
- package/dist/engine/types/index.d.ts +2 -2
- package/dist/engine/types/index.js +1 -1
- package/dist/engine/types/screen.d.ts +1 -1
- package/dist/engine/types/screen.js +1 -1
- package/dist/errors/classes.d.ts +5 -0
- package/dist/errors/classes.js +15 -0
- package/dist/errors/index.d.ts +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/i18n/required-surface-keys.js +3 -5
- package/dist/migrations/pending-rebuilds.d.ts +2 -0
- package/dist/migrations/pending-rebuilds.js +3 -0
- package/dist/pipeline/dispatch-query.js +3 -5
- package/dist/pipeline/dispatch-stream.js +2 -4
- package/dist/pipeline/dispatch-write.js +2 -4
- package/dist/pipeline/event-dispatcher-delivery.d.ts +0 -1
- package/dist/pipeline/event-dispatcher-delivery.js +1 -8
- package/dist/pipeline/event-dispatcher.js +16 -25
- package/dist/pipeline/handler-access-error.d.ts +3 -0
- package/dist/pipeline/handler-access-error.js +17 -0
- package/dist/pipeline/irreversible-operation-gate.js +9 -3
- package/dist/pipeline/member-read-only-transaction.js +8 -3
- package/dist/pipeline/system-hooks.js +7 -1
- package/dist/pipeline/system-identity-switch.js +1 -1
- package/dist/search/meilisearch-adapter.js +0 -2
- package/dist/stack/push-entity-projection-tables.js +5 -3
- package/dist/stack/redis.d.ts +1 -0
- package/dist/stack/redis.js +11 -2
- package/dist/stack/table-helpers.d.ts +3 -1
- package/dist/stack/table-helpers.js +9 -7
- package/dist/stack/test-stack.js +1 -7
- package/dist/testing/handler-context.js +3 -6
- package/dist/ui-types/index.d.ts +1 -1
- package/dist/ui-types/index.js +1 -1
- package/dist/upgrade-cli.js +29 -2
- package/package.json +4 -4
- package/src/changes.json +92 -0
- package/src/scripts/codemod/collect-source-files.ts +48 -0
- package/src/scripts/codemod/migrate-cross-tenant.ts +3 -23
- package/src/scripts/codemod/migrate-db-raw.ts +6 -23
- package/src/scripts/codemod/migrate-open-to-all.ts +4 -24
- 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
|
|
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
|
|
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
|
-
|
|
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":
|
|
@@ -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
|
|
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
|
-
|
|
435
|
-
|
|
436
|
-
|
|
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
|
|
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
|
|
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
|
},
|