local-serverless-stack 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +125 -3
- package/README.md +75 -26
- package/bin/cli.js +81 -15
- package/bin/i18n.js +30 -3
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/namespaces/services.d.ts +46 -0
- package/dist/client/namespaces/services.d.ts.map +1 -1
- package/dist/client/namespaces/services.js +1 -0
- package/dist/client/namespaces/services.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +17 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/server/engine/backends/self-backend.d.ts +26 -1
- package/dist/server/engine/backends/self-backend.d.ts.map +1 -1
- package/dist/server/engine/backends/self-backend.js +104 -11
- package/dist/server/engine/backends/self-backend.js.map +1 -1
- package/dist/server/engine/emulators/dynamodb/expressions/parser.d.ts.map +1 -1
- package/dist/server/engine/emulators/dynamodb/expressions/parser.js +12 -1
- package/dist/server/engine/emulators/dynamodb/expressions/parser.js.map +1 -1
- package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.d.ts +3 -0
- package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.js +78 -0
- package/dist/server/engine/emulators/dynamodb/expressions/reserved-words.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/index.d.ts +11 -0
- package/dist/server/engine/emulators/dynamodb/index.d.ts.map +1 -1
- package/dist/server/engine/emulators/dynamodb/index.js +101 -7
- package/dist/server/engine/emulators/dynamodb/index.js.map +1 -1
- package/dist/server/engine/emulators/dynamodb/query.d.ts +1 -0
- package/dist/server/engine/emulators/dynamodb/query.d.ts.map +1 -1
- package/dist/server/engine/emulators/dynamodb/query.js +34 -6
- package/dist/server/engine/emulators/dynamodb/query.js.map +1 -1
- package/dist/server/engine/emulators/s3/index.d.ts +10 -0
- package/dist/server/engine/emulators/s3/index.d.ts.map +1 -1
- package/dist/server/engine/emulators/s3/index.js +369 -25
- package/dist/server/engine/emulators/s3/index.js.map +1 -1
- package/dist/server/engine/emulators/sqs/index.d.ts +2 -0
- package/dist/server/engine/emulators/sqs/index.d.ts.map +1 -1
- package/dist/server/engine/emulators/sqs/index.js +70 -7
- package/dist/server/engine/emulators/sqs/index.js.map +1 -1
- package/dist/server/engine/emulators/sqs/queue.d.ts +2 -1
- package/dist/server/engine/emulators/sqs/queue.d.ts.map +1 -1
- package/dist/server/engine/emulators/sqs/queue.js +68 -35
- package/dist/server/engine/emulators/sqs/queue.js.map +1 -1
- package/dist/server/engine/emulators/ssm/index.d.ts +31 -0
- package/dist/server/engine/emulators/ssm/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/ssm/index.js +670 -0
- package/dist/server/engine/emulators/ssm/index.js.map +1 -0
- package/dist/server/engine/http/errors.d.ts +1 -0
- package/dist/server/engine/http/errors.d.ts.map +1 -1
- package/dist/server/engine/http/errors.js +13 -5
- package/dist/server/engine/http/errors.js.map +1 -1
- package/dist/server/engine/http/is-aws-request.d.ts.map +1 -1
- package/dist/server/engine/http/is-aws-request.js +13 -3
- package/dist/server/engine/http/is-aws-request.js.map +1 -1
- package/dist/server/engine/http/protocols/aws-json.d.ts +1 -0
- package/dist/server/engine/http/protocols/aws-json.d.ts.map +1 -1
- package/dist/server/engine/http/protocols/aws-json.js +13 -0
- package/dist/server/engine/http/protocols/aws-json.js.map +1 -1
- package/dist/server/engine/http/reset.d.ts +4 -0
- package/dist/server/engine/http/reset.d.ts.map +1 -0
- package/dist/server/engine/http/reset.js +17 -0
- package/dist/server/engine/http/reset.js.map +1 -0
- package/dist/server/engine/http/router.d.ts +1 -0
- package/dist/server/engine/http/router.d.ts.map +1 -1
- package/dist/server/engine/http/router.js +185 -34
- package/dist/server/engine/http/router.js.map +1 -1
- package/dist/server/engine/types.d.ts +2 -1
- package/dist/server/engine/types.d.ts.map +1 -1
- package/dist/server/routes/apis.d.ts.map +1 -1
- package/dist/server/routes/apis.js +6 -0
- package/dist/server/routes/apis.js.map +1 -1
- package/dist/server/routes/config.d.ts.map +1 -1
- package/dist/server/routes/config.js +19 -1
- package/dist/server/routes/config.js.map +1 -1
- package/dist/server/routes/services.d.ts.map +1 -1
- package/dist/server/routes/services.js +49 -1
- package/dist/server/routes/services.js.map +1 -1
- package/dist/server/runtime/runtime-worker.js +33 -3
- package/dist/server/runtime/runtime-worker.js.map +1 -1
- package/dist/server/services/api-gateway-events.d.ts +14 -0
- package/dist/server/services/api-gateway-events.d.ts.map +1 -1
- package/dist/server/services/api-gateway-events.js +114 -8
- package/dist/server/services/api-gateway-events.js.map +1 -1
- package/dist/server/services/artifact-staleness.d.ts +20 -0
- package/dist/server/services/artifact-staleness.d.ts.map +1 -0
- package/dist/server/services/artifact-staleness.js +115 -0
- package/dist/server/services/artifact-staleness.js.map +1 -0
- package/dist/server/services/authorizer-service.d.ts +34 -5
- package/dist/server/services/authorizer-service.d.ts.map +1 -1
- package/dist/server/services/authorizer-service.js +0 -0
- package/dist/server/services/authorizer-service.js.map +1 -1
- package/dist/server/services/cfn-intrinsics.d.ts +63 -0
- package/dist/server/services/cfn-intrinsics.d.ts.map +1 -0
- package/dist/server/services/cfn-intrinsics.js +403 -0
- package/dist/server/services/cfn-intrinsics.js.map +1 -0
- package/dist/server/services/cfn-physical-values.d.ts +51 -0
- package/dist/server/services/cfn-physical-values.d.ts.map +1 -0
- package/dist/server/services/cfn-physical-values.js +186 -0
- package/dist/server/services/cfn-physical-values.js.map +1 -0
- package/dist/server/services/cloudformation-parser.d.ts +26 -3
- package/dist/server/services/cloudformation-parser.d.ts.map +1 -1
- package/dist/server/services/cloudformation-parser.js +76 -4
- package/dist/server/services/cloudformation-parser.js.map +1 -1
- package/dist/server/services/config-manager.d.ts +24 -2
- package/dist/server/services/config-manager.d.ts.map +1 -1
- package/dist/server/services/config-manager.js +60 -7
- package/dist/server/services/config-manager.js.map +1 -1
- package/dist/server/services/gateway-manager.d.ts.map +1 -1
- package/dist/server/services/gateway-manager.js +52 -20
- package/dist/server/services/gateway-manager.js.map +1 -1
- package/dist/server/services/lambda-runtime-manager.d.ts +1 -0
- package/dist/server/services/lambda-runtime-manager.d.ts.map +1 -1
- package/dist/server/services/lambda-runtime-manager.js +36 -14
- package/dist/server/services/lambda-runtime-manager.js.map +1 -1
- package/dist/server/services/raw-api-assembler.d.ts +1 -1
- package/dist/server/services/raw-api-assembler.d.ts.map +1 -1
- package/dist/server/services/raw-api-assembler.js +18 -8
- package/dist/server/services/raw-api-assembler.js.map +1 -1
- package/dist/server/services/resource-provisioner.d.ts +12 -0
- package/dist/server/services/resource-provisioner.d.ts.map +1 -1
- package/dist/server/services/resource-provisioner.js +128 -13
- package/dist/server/services/resource-provisioner.js.map +1 -1
- package/dist/server/services/serverless-state-parser.d.ts +45 -2
- package/dist/server/services/serverless-state-parser.d.ts.map +1 -1
- package/dist/server/services/serverless-state-parser.js +217 -29
- package/dist/server/services/serverless-state-parser.js.map +1 -1
- package/dist/server/services/service-graph.d.ts +76 -0
- package/dist/server/services/service-graph.d.ts.map +1 -0
- package/dist/server/services/service-graph.js +914 -0
- package/dist/server/services/service-graph.js.map +1 -0
- package/dist/server/services/service-registrar.d.ts +4 -0
- package/dist/server/services/service-registrar.d.ts.map +1 -1
- package/dist/server/services/service-registrar.js +129 -55
- package/dist/server/services/service-registrar.js.map +1 -1
- package/dist/server/services/source-watcher.d.ts +1 -0
- package/dist/server/services/source-watcher.d.ts.map +1 -1
- package/dist/server/services/source-watcher.js +19 -1
- package/dist/server/services/source-watcher.js.map +1 -1
- package/dist/server/services/worker-runtime.d.ts +82 -0
- package/dist/server/services/worker-runtime.d.ts.map +1 -0
- package/dist/server/services/worker-runtime.js +303 -0
- package/dist/server/services/worker-runtime.js.map +1 -0
- package/dist/ui/assets/{ApisPage-CTOcNna-.js → ApisPage-BkW-QZ0X.js} +1 -1
- package/dist/ui/assets/BucketDetailPage-CJwTQJh7.js +1 -0
- package/dist/ui/assets/BucketsPage-B1xPVhZC.js +1 -0
- package/dist/ui/assets/{DynamoPage-BnFFKnIU.js → DynamoPage-DvbpwZDc.js} +1 -1
- package/dist/ui/assets/DynamoTablePage-xn3Lq3so.js +3 -0
- package/dist/ui/assets/LambdaDetailPage-BhUyO77H.js +4 -0
- package/dist/ui/assets/{LambdasPage-Bg-MWFBb.js → LambdasPage-CUF_4rOH.js} +1 -1
- package/dist/ui/assets/OnboardingPage-U49THUzu.js +1 -0
- package/dist/ui/assets/OpenSearchCollectionPage-BJTVNCq4.js +1 -0
- package/dist/ui/assets/OpenSearchPage-4s-egkB9.js +1 -0
- package/dist/ui/assets/OverviewPage-DJeJQktG.js +1 -0
- package/dist/ui/assets/{OverviewPage-CSWY71vZ.css → OverviewPage-DjQETmb_.css} +1 -1
- package/dist/ui/assets/QueueDetailPage-DWsy5Yt8.js +1 -0
- package/dist/ui/assets/QueuesPage-BZJSqman.js +1 -0
- package/dist/ui/assets/SecretsPage-YC9ua54G.js +1 -0
- package/dist/ui/assets/ServiceDetailPage-Cum5frP4.js +2 -0
- package/dist/ui/assets/ServicesPage-IpaPDuqx.js +2 -0
- package/dist/ui/assets/SettingsPage-BiCRU8O6.js +1 -0
- package/dist/ui/assets/index-BDlrAJhi.css +1 -0
- package/dist/ui/assets/index-BouKSS43.js +38 -0
- package/dist/ui/assets/resourceIcons-DZs28nbs.js +1 -0
- package/dist/ui/index.html +5 -2
- package/package.json +1 -1
- package/dist/ui/assets/BucketDetailPage-BXW8-FrE.js +0 -1
- package/dist/ui/assets/BucketsPage-DY_ITepb.js +0 -1
- package/dist/ui/assets/DynamoTablePage-BLCuyJHU.js +0 -3
- package/dist/ui/assets/LambdaDetailPage-D4rZNLRT.js +0 -4
- package/dist/ui/assets/OnboardingPage-nnl313Fm.js +0 -1
- package/dist/ui/assets/OpenSearchCollectionPage-Dn15lH_F.js +0 -1
- package/dist/ui/assets/OpenSearchPage-CgD5isok.js +0 -1
- package/dist/ui/assets/OverviewPage-m5sUr8IN.js +0 -1
- package/dist/ui/assets/QueueDetailPage-Ch_FDDoN.js +0 -1
- package/dist/ui/assets/QueuesPage-C_yDuGDu.js +0 -1
- package/dist/ui/assets/SecretsPage-BSGMSoqy.js +0 -1
- package/dist/ui/assets/ServiceDetailPage-6KyohyjI.js +0 -2
- package/dist/ui/assets/ServicesPage-BbSetOMo.js +0 -2
- package/dist/ui/assets/SettingsPage-BgF1jFr6.js +0 -1
- package/dist/ui/assets/index-D627ZyYU.css +0 -1
- package/dist/ui/assets/index-DuSPnI19.js +0 -37
- package/dist/ui/assets/resourceIcons-baecADXA.js +0 -1
|
@@ -32,6 +32,92 @@ export function sanitizeEnvironmentValues(env) {
|
|
|
32
32
|
}
|
|
33
33
|
return result;
|
|
34
34
|
}
|
|
35
|
+
// The framework's logical id for a function: `getLambdaLogicalId` normalizes
|
|
36
|
+
// `-` → Dash and `_` → Underscore, upper-cases the first letter and appends
|
|
37
|
+
// "LambdaFunction" (`create-order` → `CreateDashorderLambdaFunction`).
|
|
38
|
+
export function lambdaLogicalIdFor(shortName) {
|
|
39
|
+
const normalized = shortName.replace(/-/g, 'Dash').replace(/_/g, 'Underscore');
|
|
40
|
+
return `${normalized.charAt(0).toUpperCase()}${normalized.slice(1)}LambdaFunction`;
|
|
41
|
+
}
|
|
42
|
+
// serverless-state.json is written with a cycle-safe serializer: an object
|
|
43
|
+
// reachable twice is emitted once and every other occurrence becomes
|
|
44
|
+
// `{"$ref": "$[\"service\"][\"provider\"]…"}`. A reader that does not follow
|
|
45
|
+
// those pointers sees an authorizer, an event or an env value that is just
|
|
46
|
+
// `{$ref}`. Follows a chain of pointers (bounded — a malformed file must not
|
|
47
|
+
// loop) and returns the value it lands on; anything that is not a pointer is
|
|
48
|
+
// returned untouched.
|
|
49
|
+
export function derefStatePointer(value, root) {
|
|
50
|
+
let current = value;
|
|
51
|
+
for (let hops = 0; hops < 16 && isStatePointer(current); hops++) {
|
|
52
|
+
const target = followPointer(current.$ref, root);
|
|
53
|
+
if (target === undefined)
|
|
54
|
+
return current;
|
|
55
|
+
current = target;
|
|
56
|
+
}
|
|
57
|
+
return current;
|
|
58
|
+
}
|
|
59
|
+
// `{"$ref": "$…"}` and nothing else. One left after derefStatePointer is a
|
|
60
|
+
// dangling pointer, which readers skip rather than mistake for data.
|
|
61
|
+
export function isStatePointer(value) {
|
|
62
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
63
|
+
return false;
|
|
64
|
+
const pointer = value.$ref;
|
|
65
|
+
return typeof pointer === 'string' && pointer.startsWith('$') && Object.keys(value).length === 1;
|
|
66
|
+
}
|
|
67
|
+
// `$["a"]["b"][0]` (and the dotted `$.a.b`) → the value at that path, or
|
|
68
|
+
// undefined when any step is missing.
|
|
69
|
+
function followPointer(pointer, root) {
|
|
70
|
+
const steps = /\[(\d+)\]|\["((?:[^"\\]|\\.)*)"\]|\.([A-Za-z_$][\w$]*)/gy;
|
|
71
|
+
steps.lastIndex = 1;
|
|
72
|
+
let node = root;
|
|
73
|
+
while (steps.lastIndex < pointer.length) {
|
|
74
|
+
const match = steps.exec(pointer);
|
|
75
|
+
if (!match || !node || typeof node !== 'object')
|
|
76
|
+
return undefined;
|
|
77
|
+
const key = match[1] !== undefined
|
|
78
|
+
? Number(match[1])
|
|
79
|
+
: match[2] !== undefined ? JSON.parse(`"${match[2]}"`) : match[3];
|
|
80
|
+
node = node[key];
|
|
81
|
+
}
|
|
82
|
+
return node;
|
|
83
|
+
}
|
|
84
|
+
// The bits of the packaged state the registrar needs BEFORE parsing anything:
|
|
85
|
+
// the stack's name, stage and region feed the CloudFormation pseudo parameters.
|
|
86
|
+
export function readStateIdentity(state) {
|
|
87
|
+
const provider = state?.service?.provider || {};
|
|
88
|
+
const stage = provider.stage || 'dev';
|
|
89
|
+
const serviceName = state?.service?.service;
|
|
90
|
+
const region = typeof provider.region === 'string' && provider.region ? provider.region : undefined;
|
|
91
|
+
const stackName = typeof provider.stackName === 'string' && provider.stackName
|
|
92
|
+
? provider.stackName
|
|
93
|
+
: serviceName ? `${serviceName}-${stage}` : undefined;
|
|
94
|
+
return { serviceName, stage, region, stackName };
|
|
95
|
+
}
|
|
96
|
+
// The stage a packaging command asks for: `--stage X`, `--stage=X`, `-s X`.
|
|
97
|
+
export function stageFromPackageArgs(args) {
|
|
98
|
+
for (let i = 0; i < args.length; i++) {
|
|
99
|
+
const arg = args[i];
|
|
100
|
+
const inline = /^--stage=(.+)$/.exec(arg);
|
|
101
|
+
if (inline)
|
|
102
|
+
return inline[1];
|
|
103
|
+
if ((arg === '--stage' || arg === '-s') && args[i + 1] && !args[i + 1].startsWith('-'))
|
|
104
|
+
return args[i + 1];
|
|
105
|
+
}
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* A `.serverless/` directory is whatever the LAST package run left there, for
|
|
110
|
+
* whichever stage it was run with. Registering it silently meant a service
|
|
111
|
+
* packaged for `prod` came up locally with prod table names and ARNs and no
|
|
112
|
+
* hint as to why nothing matched. Returns one warning per expectation the
|
|
113
|
+
* packaged stage contradicts.
|
|
114
|
+
*/
|
|
115
|
+
export function stageMismatchWarnings(packagedStage, expectations) {
|
|
116
|
+
return expectations
|
|
117
|
+
.filter(e => e.stage && e.stage !== packagedStage)
|
|
118
|
+
.map(e => `The packaged artifacts are for stage "${packagedStage}", but ${e.source} says "${e.stage}" — ` +
|
|
119
|
+
'resource and function names follow the packaged stage. Re-package for the stage you mean (lss register --repackage).');
|
|
120
|
+
}
|
|
35
121
|
// A usable port or nothing — the state file is user-authored, so a string "3010"
|
|
36
122
|
// is accepted but garbage never propagates into a listen() call.
|
|
37
123
|
function asPort(value) {
|
|
@@ -39,36 +125,62 @@ function asPort(value) {
|
|
|
39
125
|
return typeof n === 'number' && Number.isInteger(n) && n >= 1 && n <= 65535 ? n : undefined;
|
|
40
126
|
}
|
|
41
127
|
export class ServerlessStateParser {
|
|
42
|
-
parse
|
|
128
|
+
// Per-parse state: the document `$ref` pointers resolve against, and the
|
|
129
|
+
// function names an authorizer reference may resolve to.
|
|
130
|
+
root = {};
|
|
131
|
+
shortNames = [];
|
|
132
|
+
lambdaNames = new Map();
|
|
133
|
+
fullNames = new Map();
|
|
134
|
+
parse(state, context = {}) {
|
|
43
135
|
const warnings = [];
|
|
44
|
-
|
|
45
|
-
const
|
|
46
|
-
const serviceName = state
|
|
47
|
-
const
|
|
136
|
+
this.root = state;
|
|
137
|
+
const provider = (this.deref(state.service?.provider) || {});
|
|
138
|
+
const { stage, serviceName } = readStateIdentity(state);
|
|
139
|
+
const httpApi = this.deref(provider.httpApi);
|
|
140
|
+
const httpApiCors = Boolean(httpApi?.cors);
|
|
48
141
|
const lss = state.service?.custom?.lss || {};
|
|
49
142
|
const apiPort = asPort(lss.apiPort);
|
|
50
143
|
const invokePort = asPort(lss.invokePort);
|
|
51
|
-
const
|
|
144
|
+
const fnDefs = (this.deref(state.service?.functions) || {});
|
|
145
|
+
this.shortNames = Object.keys(fnDefs);
|
|
146
|
+
this.lambdaNames = context.lambdaNames ?? new Map();
|
|
147
|
+
this.fullNames = new Map();
|
|
148
|
+
for (const [shortName, rawDef] of Object.entries(fnDefs)) {
|
|
149
|
+
const def = (this.deref(rawDef) || {});
|
|
150
|
+
this.fullNames.set(def.name || `${serviceName || 'unknown'}-${stage}-${shortName}`, shortName);
|
|
151
|
+
}
|
|
152
|
+
const authorizers = this.parseHttpApiAuthorizers((this.deref(httpApi?.authorizers) || {}), warnings);
|
|
52
153
|
const functions = [];
|
|
154
|
+
const rawEnvironment = {};
|
|
53
155
|
const routes = [];
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
const
|
|
156
|
+
for (const [shortName, rawDef] of Object.entries(fnDefs)) {
|
|
157
|
+
const def = (this.deref(rawDef) || {});
|
|
158
|
+
const rawEvents = this.deref(def.events);
|
|
159
|
+
const events = Array.isArray(rawEvents) ? rawEvents : [];
|
|
57
160
|
const triggers = new Set();
|
|
58
161
|
for (const rawEvent of events) {
|
|
59
|
-
|
|
162
|
+
const event = this.deref(rawEvent);
|
|
163
|
+
if (!event || typeof event !== 'object' || isStatePointer(event))
|
|
60
164
|
continue;
|
|
61
|
-
const event = rawEvent;
|
|
62
165
|
const [eventType] = Object.keys(event);
|
|
63
166
|
if (!eventType)
|
|
64
167
|
continue;
|
|
65
168
|
triggers.add(this.normalizeTriggerName(eventType));
|
|
66
169
|
if (eventType === 'http' || eventType === 'httpApi') {
|
|
67
|
-
const route = this.parseHttpEvent(shortName, eventType, event[eventType], authorizers, httpApiCors, warnings);
|
|
170
|
+
const route = this.parseHttpEvent(shortName, eventType, this.deref(event[eventType]), authorizers, httpApiCors, warnings);
|
|
68
171
|
if (route)
|
|
69
172
|
routes.push(route);
|
|
70
173
|
}
|
|
71
174
|
}
|
|
175
|
+
const env = {};
|
|
176
|
+
for (const scope of [provider.environment, def.environment]) {
|
|
177
|
+
const vars = this.deref(scope);
|
|
178
|
+
if (!vars || typeof vars !== 'object' || isStatePointer(vars))
|
|
179
|
+
continue;
|
|
180
|
+
for (const [key, value] of Object.entries(vars))
|
|
181
|
+
env[key] = this.deref(value);
|
|
182
|
+
}
|
|
183
|
+
rawEnvironment[shortName] = env;
|
|
72
184
|
functions.push({
|
|
73
185
|
name: shortName,
|
|
74
186
|
fullName: def.name || `${serviceName || 'unknown'}-${stage}-${shortName}`,
|
|
@@ -76,23 +188,90 @@ export class ServerlessStateParser {
|
|
|
76
188
|
runtime: def.runtime || provider.runtime || 'nodejs20.x',
|
|
77
189
|
memorySize: def.memorySize ?? provider.memorySize ?? DEFAULT_MEMORY_MB,
|
|
78
190
|
timeout: def.timeout ?? provider.timeout ?? DEFAULT_TIMEOUT_SECONDS,
|
|
79
|
-
environment: sanitizeEnvironmentValues(
|
|
191
|
+
environment: sanitizeEnvironmentValues(env),
|
|
80
192
|
triggers: [...triggers],
|
|
81
193
|
artifact: def.package?.artifact || state.package?.artifact,
|
|
82
194
|
});
|
|
83
195
|
}
|
|
196
|
+
this.checkAuthorizerTargets(authorizers, warnings);
|
|
84
197
|
return {
|
|
85
198
|
serviceName,
|
|
86
199
|
stage,
|
|
87
|
-
region:
|
|
200
|
+
region: readStateIdentity(state).region,
|
|
88
201
|
apiPort,
|
|
89
202
|
invokePort,
|
|
90
203
|
functions,
|
|
204
|
+
rawEnvironment,
|
|
91
205
|
routes,
|
|
92
206
|
authorizers,
|
|
93
207
|
warnings,
|
|
94
208
|
};
|
|
95
209
|
}
|
|
210
|
+
deref(value) {
|
|
211
|
+
return derefStatePointer(value, this.root);
|
|
212
|
+
}
|
|
213
|
+
// An authorizer pointing at a function this service does not declare is a
|
|
214
|
+
// route that will answer 500 on every request — say so now, at registration,
|
|
215
|
+
// rather than at the first call. Cross-service ARNs are not checked: their
|
|
216
|
+
// owner may simply register later.
|
|
217
|
+
checkAuthorizerTargets(authorizers, warnings) {
|
|
218
|
+
for (const auth of authorizers) {
|
|
219
|
+
if (auth.functionName && !this.shortNames.includes(auth.functionName)) {
|
|
220
|
+
warnings.push(`Authorizer "${auth.name}" targets function "${auth.functionName}", which this service does not declare — routes using it will answer 500.`);
|
|
221
|
+
}
|
|
222
|
+
else if (!auth.functionName && !auth.arn) {
|
|
223
|
+
warnings.push(`Authorizer "${auth.name}" has no function to invoke (neither a function name nor a resolvable ARN) — routes using it will answer 500.`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* An authorizer's function reference → the function to invoke. A string is
|
|
229
|
+
* an ARN (or a name) handed through as-is. A CFN reference to a Lambda in
|
|
230
|
+
* the same template — `!GetAtt AuthLambdaFunction.Arn`, `!Ref …`, or a lone
|
|
231
|
+
* `!Sub '${AuthLambdaFunction.Arn}'` — is resolved to the LOCAL function it
|
|
232
|
+
* names, via the template's FunctionName or, failing that, the framework's
|
|
233
|
+
* logical-id convention. Used to be dropped, which left the authorizer keyed
|
|
234
|
+
* by its display name and every route behind it answering 500.
|
|
235
|
+
*/
|
|
236
|
+
resolveAuthorizerTarget(raw) {
|
|
237
|
+
const value = this.deref(raw);
|
|
238
|
+
if (value === undefined || value === null)
|
|
239
|
+
return {};
|
|
240
|
+
if (typeof value === 'string')
|
|
241
|
+
return { arn: value };
|
|
242
|
+
const logicalId = this.lambdaLogicalIdOf(value);
|
|
243
|
+
if (logicalId) {
|
|
244
|
+
const fullName = this.lambdaNames.get(logicalId);
|
|
245
|
+
const shortName = (fullName && this.fullNames.get(fullName))
|
|
246
|
+
?? this.shortNames.find(name => lambdaLogicalIdFor(name) === logicalId);
|
|
247
|
+
if (shortName)
|
|
248
|
+
return { functionName: shortName };
|
|
249
|
+
if (fullName)
|
|
250
|
+
return { arn: fullName };
|
|
251
|
+
}
|
|
252
|
+
return { unresolved: value };
|
|
253
|
+
}
|
|
254
|
+
warnUnresolvedAuthorizer(label, target, warnings) {
|
|
255
|
+
warnings.push(`Authorizer "${label}": function reference ${JSON.stringify(target.unresolved).slice(0, 160)} does not resolve to a Lambda in this service — routes using it will answer 500.`);
|
|
256
|
+
}
|
|
257
|
+
// The logical id inside `{Ref}`, `{Fn::GetAtt: [Id, Arn]}` / `"Id.Arn"`, or
|
|
258
|
+
// a Fn::Sub whose whole template is `${Id}` / `${Id.Arn}`.
|
|
259
|
+
lambdaLogicalIdOf(value) {
|
|
260
|
+
if (!value || typeof value !== 'object')
|
|
261
|
+
return undefined;
|
|
262
|
+
const obj = value;
|
|
263
|
+
if (typeof obj.Ref === 'string')
|
|
264
|
+
return obj.Ref;
|
|
265
|
+
const getAtt = obj['Fn::GetAtt'];
|
|
266
|
+
if (Array.isArray(getAtt) && typeof getAtt[0] === 'string')
|
|
267
|
+
return getAtt[0];
|
|
268
|
+
if (typeof getAtt === 'string')
|
|
269
|
+
return getAtt.split('.')[0];
|
|
270
|
+
const sub = obj['Fn::Sub'];
|
|
271
|
+
const template = Array.isArray(sub) ? sub[0] : sub;
|
|
272
|
+
const token = typeof template === 'string' ? /^\$\{([^}.]+)(?:\.Arn)?\}$/.exec(template.trim()) : null;
|
|
273
|
+
return token ? token[1] : undefined;
|
|
274
|
+
}
|
|
96
275
|
normalizeTriggerName(eventType) {
|
|
97
276
|
if (eventType === 'stream')
|
|
98
277
|
return 'stream';
|
|
@@ -100,7 +279,8 @@ export class ServerlessStateParser {
|
|
|
100
279
|
}
|
|
101
280
|
parseHttpApiAuthorizers(defs, warnings) {
|
|
102
281
|
const authorizers = [];
|
|
103
|
-
for (const [name,
|
|
282
|
+
for (const [name, rawDef] of Object.entries(defs)) {
|
|
283
|
+
const def = (this.deref(rawDef) || {});
|
|
104
284
|
const type = String(def.type || 'request').toLowerCase();
|
|
105
285
|
if (type === 'jwt') {
|
|
106
286
|
warnings.push(`Authorizer "${name}" is a JWT authorizer — not supported by the LSS gateway yet; routes using it will return 500.`);
|
|
@@ -110,6 +290,10 @@ export class ServerlessStateParser {
|
|
|
110
290
|
warnings.push(`Authorizer "${name}" has unsupported type "${type}"; routes using it will return 500.`);
|
|
111
291
|
continue;
|
|
112
292
|
}
|
|
293
|
+
const functionName = typeof def.functionName === 'string' ? def.functionName : undefined;
|
|
294
|
+
const target = functionName ? {} : this.resolveAuthorizerTarget(def.arn ?? def.functionArn);
|
|
295
|
+
if (target.unresolved !== undefined)
|
|
296
|
+
this.warnUnresolvedAuthorizer(name, target, warnings);
|
|
113
297
|
authorizers.push({
|
|
114
298
|
name,
|
|
115
299
|
type: 'request',
|
|
@@ -118,8 +302,8 @@ export class ServerlessStateParser {
|
|
|
118
302
|
enableSimpleResponses: Boolean(def.enableSimpleResponses),
|
|
119
303
|
identitySource: this.normalizeIdentitySource(def.identitySource),
|
|
120
304
|
resultTtlInSeconds: this.parseTtl(def.resultTtlInSeconds),
|
|
121
|
-
functionName:
|
|
122
|
-
arn:
|
|
305
|
+
functionName: functionName ?? target.functionName,
|
|
306
|
+
arn: target.arn,
|
|
123
307
|
});
|
|
124
308
|
}
|
|
125
309
|
return authorizers;
|
|
@@ -159,7 +343,7 @@ export class ServerlessStateParser {
|
|
|
159
343
|
}
|
|
160
344
|
if (event.cors !== undefined)
|
|
161
345
|
cors = Boolean(event.cors);
|
|
162
|
-
authorizerName = this.registerEventAuthorizer(functionName, eventType, event.authorizer, authorizers, warnings);
|
|
346
|
+
authorizerName = this.registerEventAuthorizer(functionName, eventType, this.deref(event.authorizer), authorizers, warnings);
|
|
163
347
|
}
|
|
164
348
|
if (!method || !path) {
|
|
165
349
|
warnings.push(`Function "${functionName}": could not parse ${eventType} event (${JSON.stringify(raw).slice(0, 120)}); route skipped.`);
|
|
@@ -191,9 +375,11 @@ export class ServerlessStateParser {
|
|
|
191
375
|
warnings.push(`Function "${functionName}": unsupported httpApi authorizer reference; route will return 500.`);
|
|
192
376
|
return `__unresolved__:${functionName}`;
|
|
193
377
|
}
|
|
194
|
-
// REST event authorizer: string shorthand → local function reference
|
|
378
|
+
// REST event authorizer: string shorthand → local function reference, or
|
|
379
|
+
// the ARN of a function elsewhere (the framework accepts both spellings).
|
|
195
380
|
if (typeof raw === 'string') {
|
|
196
381
|
const name = `${functionName}:${raw}`;
|
|
382
|
+
const isArn = raw.startsWith('arn:');
|
|
197
383
|
authorizers.push({
|
|
198
384
|
name,
|
|
199
385
|
type: 'token',
|
|
@@ -202,15 +388,24 @@ export class ServerlessStateParser {
|
|
|
202
388
|
enableSimpleResponses: false,
|
|
203
389
|
identitySource: ['method.request.header.Authorization'],
|
|
204
390
|
resultTtlInSeconds: DEFAULT_AUTHORIZER_TTL,
|
|
205
|
-
functionName: raw,
|
|
391
|
+
functionName: isArn ? undefined : raw,
|
|
392
|
+
arn: isArn ? raw : undefined,
|
|
206
393
|
});
|
|
207
394
|
return name;
|
|
208
395
|
}
|
|
209
396
|
if (typeof raw === 'object') {
|
|
210
397
|
const def = raw;
|
|
211
|
-
const arn = this.extractArn(def.arn);
|
|
212
|
-
const localFn = typeof def.name === 'string' && !arn ? def.name : undefined;
|
|
213
398
|
const displayName = typeof def.name === 'string' ? def.name : `${functionName}-authorizer`;
|
|
399
|
+
// `arn` wins when present; `name` alone names a local function. An `arn`
|
|
400
|
+
// that does not resolve still falls back to `name` when that IS one of
|
|
401
|
+
// this service's functions — the common `{ name: auth, arn: !GetAtt … }`.
|
|
402
|
+
const target = def.arn !== undefined ? this.resolveAuthorizerTarget(def.arn) : {};
|
|
403
|
+
const arn = target.arn;
|
|
404
|
+
const nameIsFallback = typeof def.name === 'string' && !arn
|
|
405
|
+
&& (def.arn === undefined || this.shortNames.includes(def.name));
|
|
406
|
+
const localFn = target.functionName ?? (nameIsFallback ? def.name : undefined);
|
|
407
|
+
if (target.unresolved !== undefined && !localFn)
|
|
408
|
+
this.warnUnresolvedAuthorizer(displayName, target, warnings);
|
|
214
409
|
const type = String(def.type || 'token').toLowerCase();
|
|
215
410
|
if (type !== 'token' && type !== 'request') {
|
|
216
411
|
warnings.push(`Function "${functionName}": authorizer "${displayName}" has unsupported type "${type}"; route will return 500.`);
|
|
@@ -245,13 +440,6 @@ export class ServerlessStateParser {
|
|
|
245
440
|
return parsed;
|
|
246
441
|
return DEFAULT_AUTHORIZER_TTL;
|
|
247
442
|
}
|
|
248
|
-
extractArn(raw) {
|
|
249
|
-
if (typeof raw === 'string')
|
|
250
|
-
return raw;
|
|
251
|
-
// CFN intrinsics (Fn::GetAtt on the authorizer function) mean "local function",
|
|
252
|
-
// which the caller captures via `name`/`functionName` instead.
|
|
253
|
-
return undefined;
|
|
254
|
-
}
|
|
255
443
|
normalizePath(path) {
|
|
256
444
|
if (path === '$default')
|
|
257
445
|
return path;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverless-state-parser.js","sourceRoot":"","sources":["../../../src/server/services/serverless-state-parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"serverless-state-parser.js","sourceRoot":"","sources":["../../../src/server/services/serverless-state-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { Resource } from './cloudformation-parser.js';
|
|
2
|
+
import type { RegisteredFunction, HttpRoute, AuthorizerConfig } from './serverless-state-parser.js';
|
|
3
|
+
/**
|
|
4
|
+
* What a node stands for. `route` and `iam-role` have no counterpart in the
|
|
5
|
+
* parser's `Resource` union: a route is declared in `serverless-state.json`
|
|
6
|
+
* (never as a CFN resource LSS parses), and a role is deliberately not parsed.
|
|
7
|
+
* `external` is anything this service references but does not declare — the
|
|
8
|
+
* cross-service edges, which are the whole reason a monorepo needs one stack.
|
|
9
|
+
*/
|
|
10
|
+
export type GraphNodeKind = 'lambda' | 'dynamodb' | 'sqs' | 'sns' | 's3' | 'eventbus' | 'event-rule' | 'opensearch' | 'secret' | 'route' | 'iam-role' | 'external';
|
|
11
|
+
export interface GraphNode {
|
|
12
|
+
id: string;
|
|
13
|
+
kind: GraphNodeKind;
|
|
14
|
+
label: string;
|
|
15
|
+
logicalId?: string;
|
|
16
|
+
method?: string;
|
|
17
|
+
path?: string;
|
|
18
|
+
fullName?: string;
|
|
19
|
+
handler?: string;
|
|
20
|
+
arn?: string;
|
|
21
|
+
service?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* How an edge was established. The distinction is the point of the whole
|
|
25
|
+
* payload: `iam` and `env` are far weaker evidence than the rest, and a
|
|
26
|
+
* diagram that draws them identically lies about what it knows.
|
|
27
|
+
*/
|
|
28
|
+
export type GraphEdgeKind = 'http-route' | 'authorizer' | 'event-source' | 's3-notification' | 'event-rule-target' | 'event-bus-rule' | 'sns-subscription' | 'redrive' | 'iam' | 'env';
|
|
29
|
+
export interface GraphEdge {
|
|
30
|
+
id: string;
|
|
31
|
+
from: string;
|
|
32
|
+
to: string;
|
|
33
|
+
kind: GraphEdgeKind;
|
|
34
|
+
detail?: string;
|
|
35
|
+
confidence: 'declared' | 'inferred';
|
|
36
|
+
serviceWide?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface ServiceGraph {
|
|
39
|
+
service: string;
|
|
40
|
+
nodes: GraphNode[];
|
|
41
|
+
edges: GraphEdge[];
|
|
42
|
+
edgeKinds: GraphEdgeKind[];
|
|
43
|
+
warnings: string[];
|
|
44
|
+
}
|
|
45
|
+
export interface BuildServiceGraphInput {
|
|
46
|
+
serviceName: string;
|
|
47
|
+
template: unknown;
|
|
48
|
+
resources: Resource[];
|
|
49
|
+
region?: string;
|
|
50
|
+
functions?: RegisteredFunction[];
|
|
51
|
+
routes?: HttpRoute[];
|
|
52
|
+
authorizers?: AuthorizerConfig[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Reduce an ARN to the (aws service, resource name) pair a declared resource
|
|
56
|
+
* would be indexed under.
|
|
57
|
+
*
|
|
58
|
+
* The sub-resource suffixes matter: a policy that grants `dynamodb:Query` on
|
|
59
|
+
* `…:table/Orders/index/*` is about the Orders TABLE, and a stream ARN carries
|
|
60
|
+
* a creation timestamp nobody can predict at synth time. Secrets are the one
|
|
61
|
+
* kind that cannot be matched exactly — AWS appends six random characters at
|
|
62
|
+
* create time — so they match by prefix at the call site.
|
|
63
|
+
*/
|
|
64
|
+
export declare function parseResourceArn(arn: string): {
|
|
65
|
+
service: string;
|
|
66
|
+
name: string;
|
|
67
|
+
} | null;
|
|
68
|
+
/**
|
|
69
|
+
* Builds the wiring graph for one service.
|
|
70
|
+
*
|
|
71
|
+
* Pure: no I/O, no engine calls, no clock. Everything it needs is the template
|
|
72
|
+
* the registrar cached and the metadata that came with it — which is what lets
|
|
73
|
+
* the unit suite cover every edge kind from hand-written templates.
|
|
74
|
+
*/
|
|
75
|
+
export declare function buildServiceGraph(input: BuildServiceGraphInput): ServiceGraph;
|
|
76
|
+
//# sourceMappingURL=service-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-graph.d.ts","sourceRoot":"","sources":["../../../src/server/services/service-graph.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,QAAQ,EAYT,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAepG;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,UAAU,GACV,KAAK,GACL,KAAK,GACL,IAAI,GACJ,UAAU,GACV,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,SAAS;IAIxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IAIpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GACrB,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,iBAAiB,GACjB,mBAAmB,GACnB,gBAAgB,GAChB,kBAAkB,GAClB,SAAS,GACT,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IAGpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAIhB,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC;IAMpC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;IAGnB,SAAS,EAAE,aAAa,EAAE,CAAC;IAI3B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,OAAO,CAAC;IAElB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACjC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAClC;AA4DD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkCtF;AAkDD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,CA6I7E"}
|