local-serverless-stack 0.4.0 → 0.5.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.
Files changed (98) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/client/index.d.ts +7 -0
  3. package/dist/client/index.d.ts.map +1 -1
  4. package/dist/client/index.js +6 -0
  5. package/dist/client/index.js.map +1 -1
  6. package/dist/client/namespaces/apis.d.ts +48 -0
  7. package/dist/client/namespaces/apis.d.ts.map +1 -0
  8. package/dist/client/namespaces/apis.js +12 -0
  9. package/dist/client/namespaces/apis.js.map +1 -0
  10. package/dist/client/namespaces/lambdas.d.ts +61 -0
  11. package/dist/client/namespaces/lambdas.d.ts.map +1 -0
  12. package/dist/client/namespaces/lambdas.js +13 -0
  13. package/dist/client/namespaces/lambdas.js.map +1 -0
  14. package/dist/client/namespaces/services.d.ts +40 -0
  15. package/dist/client/namespaces/services.d.ts.map +1 -1
  16. package/dist/client/namespaces/services.js +3 -0
  17. package/dist/client/namespaces/services.js.map +1 -1
  18. package/dist/client/types.d.ts +2 -0
  19. package/dist/client/types.d.ts.map +1 -1
  20. package/dist/server/index.js +25 -2
  21. package/dist/server/index.js.map +1 -1
  22. package/dist/server/routes/apis.d.ts +3 -0
  23. package/dist/server/routes/apis.d.ts.map +1 -0
  24. package/dist/server/routes/apis.js +54 -0
  25. package/dist/server/routes/apis.js.map +1 -0
  26. package/dist/server/routes/lambdas.d.ts +3 -0
  27. package/dist/server/routes/lambdas.d.ts.map +1 -0
  28. package/dist/server/routes/lambdas.js +85 -0
  29. package/dist/server/routes/lambdas.js.map +1 -0
  30. package/dist/server/routes/services.d.ts.map +1 -1
  31. package/dist/server/routes/services.js +91 -81
  32. package/dist/server/routes/services.js.map +1 -1
  33. package/dist/server/runtime/runtime-worker.d.ts +2 -0
  34. package/dist/server/runtime/runtime-worker.d.ts.map +1 -0
  35. package/dist/server/runtime/runtime-worker.js +207 -0
  36. package/dist/server/runtime/runtime-worker.js.map +1 -0
  37. package/dist/server/services/api-gateway-events.d.ts +44 -0
  38. package/dist/server/services/api-gateway-events.d.ts.map +1 -0
  39. package/dist/server/services/api-gateway-events.js +299 -0
  40. package/dist/server/services/api-gateway-events.js.map +1 -0
  41. package/dist/server/services/authorizer-service.d.ts +25 -0
  42. package/dist/server/services/authorizer-service.d.ts.map +1 -0
  43. package/dist/server/services/authorizer-service.js +0 -0
  44. package/dist/server/services/authorizer-service.js.map +1 -0
  45. package/dist/server/services/cache-manager.d.ts +6 -0
  46. package/dist/server/services/cache-manager.d.ts.map +1 -1
  47. package/dist/server/services/cache-manager.js.map +1 -1
  48. package/dist/server/services/config-manager.d.ts +34 -0
  49. package/dist/server/services/config-manager.d.ts.map +1 -1
  50. package/dist/server/services/config-manager.js +48 -0
  51. package/dist/server/services/config-manager.js.map +1 -1
  52. package/dist/server/services/function-registry.d.ts +33 -0
  53. package/dist/server/services/function-registry.d.ts.map +1 -0
  54. package/dist/server/services/function-registry.js +100 -0
  55. package/dist/server/services/function-registry.js.map +1 -0
  56. package/dist/server/services/gateway-manager.d.ts +31 -0
  57. package/dist/server/services/gateway-manager.d.ts.map +1 -0
  58. package/dist/server/services/gateway-manager.js +292 -0
  59. package/dist/server/services/gateway-manager.js.map +1 -0
  60. package/dist/server/services/lambda-runtime-manager.d.ts +52 -0
  61. package/dist/server/services/lambda-runtime-manager.d.ts.map +1 -0
  62. package/dist/server/services/lambda-runtime-manager.js +326 -0
  63. package/dist/server/services/lambda-runtime-manager.js.map +1 -0
  64. package/dist/server/services/localstack-manager.d.ts.map +1 -1
  65. package/dist/server/services/localstack-manager.js +9 -0
  66. package/dist/server/services/localstack-manager.js.map +1 -1
  67. package/dist/server/services/serverless-state-parser.d.ts +86 -0
  68. package/dist/server/services/serverless-state-parser.d.ts.map +1 -0
  69. package/dist/server/services/serverless-state-parser.js +245 -0
  70. package/dist/server/services/serverless-state-parser.js.map +1 -0
  71. package/dist/server/services/service-registrar.d.ts +34 -0
  72. package/dist/server/services/service-registrar.d.ts.map +1 -0
  73. package/dist/server/services/service-registrar.js +262 -0
  74. package/dist/server/services/service-registrar.js.map +1 -0
  75. package/dist/server/services/source-watcher.d.ts +24 -0
  76. package/dist/server/services/source-watcher.d.ts.map +1 -0
  77. package/dist/server/services/source-watcher.js +101 -0
  78. package/dist/server/services/source-watcher.js.map +1 -0
  79. package/dist/ui/assets/ApisPage-DdgKjEdS.js +1 -0
  80. package/dist/ui/assets/{BucketDetailPage-Hg4Gg3jC.js → BucketDetailPage-DZQGxm0y.js} +1 -1
  81. package/dist/ui/assets/{BucketsPage-BHkg7TQp.js → BucketsPage-xYXzxCvd.js} +1 -1
  82. package/dist/ui/assets/{DynamoPage-CH_TgPh_.js → DynamoPage-B1__Rjr2.js} +1 -1
  83. package/dist/ui/assets/{DynamoTablePage-BPvl5y6_.js → DynamoTablePage-BCoxPdXW.js} +1 -1
  84. package/dist/ui/assets/LambdaDetailPage-B85CA8tb.js +4 -0
  85. package/dist/ui/assets/LambdasPage-_TtxQMT_.js +1 -0
  86. package/dist/ui/assets/{OverviewPage-CwLnw4VW.css → OverviewPage-6jDXV1jr.css} +1 -1
  87. package/dist/ui/assets/OverviewPage-CqTKTY64.js +1 -0
  88. package/dist/ui/assets/{QueueDetailPage-DHDPgRDc.js → QueueDetailPage-BOr_sImA.js} +1 -1
  89. package/dist/ui/assets/{QueuesPage-D5YcEbUU.js → QueuesPage-DpByfcM5.js} +1 -1
  90. package/dist/ui/assets/{ServiceDetailPage-DxJ0t7HQ.js → ServiceDetailPage-DsWgV-ad.js} +1 -1
  91. package/dist/ui/assets/{ServicesPage-DWDaaOz9.js → ServicesPage-CGlpsj98.js} +1 -1
  92. package/dist/ui/assets/{index-D3WwZ4lY.js → index-BWlB542w.js} +11 -11
  93. package/dist/ui/index.html +1 -1
  94. package/package.json +1 -1
  95. package/packages/serverless-plugin/README.md +21 -3
  96. package/packages/serverless-plugin/dist/index.js +8 -3
  97. package/packages/serverless-plugin/dist/index.js.map +1 -1
  98. package/dist/ui/assets/OverviewPage-nhomNDqx.js +0 -1
@@ -0,0 +1,245 @@
1
+ // Parses `.serverless/serverless-state.json` — the resolved service definition the
2
+ // Serverless Framework writes next to the CloudFormation template on `sls package`.
3
+ // It is the declarative source for HTTP routes and authorizers (the CFN template
4
+ // only carries them as an ApiGateway resource graph, which is much harder to walk),
5
+ // keeping LSS's "sls artifacts as the source of truth, no custom manifest" principle.
6
+ const DEFAULT_TIMEOUT_SECONDS = 6;
7
+ const DEFAULT_MEMORY_MB = 1024;
8
+ const DEFAULT_AUTHORIZER_TTL = 300;
9
+ // Env values may still carry CloudFormation intrinsics ({Ref}, {Fn::GetAtt}) or
10
+ // numbers. Coerce everything to strings; intrinsic objects fall back to the
11
+ // referenced logical id so the value is at least recognizable.
12
+ export function sanitizeEnvironmentValues(env) {
13
+ const result = {};
14
+ for (const [key, value] of Object.entries(env)) {
15
+ if (value === undefined || value === null)
16
+ continue;
17
+ if (typeof value === 'string') {
18
+ result[key] = value;
19
+ }
20
+ else if (typeof value === 'number' || typeof value === 'boolean') {
21
+ result[key] = String(value);
22
+ }
23
+ else if (typeof value === 'object') {
24
+ const obj = value;
25
+ if (typeof obj.Ref === 'string')
26
+ result[key] = obj.Ref;
27
+ else if (Array.isArray(obj['Fn::GetAtt']))
28
+ result[key] = obj['Fn::GetAtt'].join('.');
29
+ else
30
+ result[key] = JSON.stringify(value);
31
+ }
32
+ }
33
+ return result;
34
+ }
35
+ export class ServerlessStateParser {
36
+ parse(state) {
37
+ const warnings = [];
38
+ const provider = state.service?.provider || {};
39
+ const stage = provider.stage || 'dev';
40
+ const serviceName = state.service?.service;
41
+ const httpApiCors = Boolean(provider.httpApi?.cors);
42
+ const authorizers = this.parseHttpApiAuthorizers(provider.httpApi?.authorizers || {}, warnings);
43
+ const functions = [];
44
+ const routes = [];
45
+ const fnDefs = state.service?.functions || {};
46
+ for (const [shortName, def] of Object.entries(fnDefs)) {
47
+ const events = Array.isArray(def.events) ? def.events : [];
48
+ const triggers = new Set();
49
+ for (const rawEvent of events) {
50
+ if (!rawEvent || typeof rawEvent !== 'object')
51
+ continue;
52
+ const event = rawEvent;
53
+ const [eventType] = Object.keys(event);
54
+ if (!eventType)
55
+ continue;
56
+ triggers.add(this.normalizeTriggerName(eventType));
57
+ if (eventType === 'http' || eventType === 'httpApi') {
58
+ const route = this.parseHttpEvent(shortName, eventType, event[eventType], authorizers, httpApiCors, warnings);
59
+ if (route)
60
+ routes.push(route);
61
+ }
62
+ }
63
+ functions.push({
64
+ name: shortName,
65
+ fullName: def.name || `${serviceName || 'unknown'}-${stage}-${shortName}`,
66
+ handler: def.handler || '',
67
+ runtime: def.runtime || provider.runtime || 'nodejs20.x',
68
+ memorySize: def.memorySize ?? provider.memorySize ?? DEFAULT_MEMORY_MB,
69
+ timeout: def.timeout ?? provider.timeout ?? DEFAULT_TIMEOUT_SECONDS,
70
+ environment: sanitizeEnvironmentValues({ ...(provider.environment || {}), ...(def.environment || {}) }),
71
+ triggers: [...triggers],
72
+ artifact: def.package?.artifact || state.package?.artifact,
73
+ });
74
+ }
75
+ return { serviceName, stage, functions, routes, authorizers, warnings };
76
+ }
77
+ normalizeTriggerName(eventType) {
78
+ if (eventType === 'stream')
79
+ return 'stream';
80
+ return eventType;
81
+ }
82
+ parseHttpApiAuthorizers(defs, warnings) {
83
+ const authorizers = [];
84
+ for (const [name, def] of Object.entries(defs)) {
85
+ const type = String(def.type || 'request').toLowerCase();
86
+ if (type === 'jwt') {
87
+ warnings.push(`Authorizer "${name}" is a JWT authorizer — not supported by the LSS gateway yet; routes using it will return 500.`);
88
+ continue;
89
+ }
90
+ if (type !== 'request') {
91
+ warnings.push(`Authorizer "${name}" has unsupported type "${type}"; routes using it will return 500.`);
92
+ continue;
93
+ }
94
+ authorizers.push({
95
+ name,
96
+ type: 'request',
97
+ eventType: 'httpApi',
98
+ payloadVersion: String(def.payloadVersion || '2.0'),
99
+ enableSimpleResponses: Boolean(def.enableSimpleResponses),
100
+ identitySource: this.normalizeIdentitySource(def.identitySource),
101
+ resultTtlInSeconds: this.parseTtl(def.resultTtlInSeconds),
102
+ functionName: typeof def.functionName === 'string' ? def.functionName : undefined,
103
+ arn: this.extractArn(def.arn ?? def.functionArn),
104
+ });
105
+ }
106
+ return authorizers;
107
+ }
108
+ parseHttpEvent(functionName, eventType, raw, authorizers, httpApiCors, warnings) {
109
+ let method;
110
+ let path;
111
+ let cors = eventType === 'httpApi' ? httpApiCors : false;
112
+ let authorizerName;
113
+ if (typeof raw === 'string') {
114
+ // Shorthand: "GET /users" or "post users" — httpApi also allows "*".
115
+ if (raw.trim() === '*') {
116
+ method = 'ANY';
117
+ path = '$default';
118
+ }
119
+ else {
120
+ const [m, p] = raw.trim().split(/\s+/);
121
+ method = m;
122
+ path = p;
123
+ }
124
+ }
125
+ else if (raw && typeof raw === 'object') {
126
+ const event = raw;
127
+ method = typeof event.method === 'string' ? event.method : undefined;
128
+ path = typeof event.path === 'string' ? event.path : undefined;
129
+ if (!method && !path && typeof event.routeKey === 'string') {
130
+ // httpApi may normalize into routeKey ("GET /users" or "$default").
131
+ if (event.routeKey === '$default') {
132
+ method = 'ANY';
133
+ path = '$default';
134
+ }
135
+ else {
136
+ const [m, p] = event.routeKey.trim().split(/\s+/);
137
+ method = m;
138
+ path = p;
139
+ }
140
+ }
141
+ if (event.cors !== undefined)
142
+ cors = Boolean(event.cors);
143
+ authorizerName = this.registerEventAuthorizer(functionName, eventType, event.authorizer, authorizers, warnings);
144
+ }
145
+ if (!method || !path) {
146
+ warnings.push(`Function "${functionName}": could not parse ${eventType} event (${JSON.stringify(raw).slice(0, 120)}); route skipped.`);
147
+ return null;
148
+ }
149
+ return {
150
+ functionName,
151
+ method: method.toUpperCase() === '*' ? 'ANY' : method.toUpperCase(),
152
+ path: this.normalizePath(path),
153
+ eventType,
154
+ cors,
155
+ authorizerName,
156
+ };
157
+ }
158
+ // REST (v1) authorizers are declared inline on the event; httpApi (v2) events
159
+ // reference a named entry in provider.httpApi.authorizers. Inline definitions
160
+ // are appended to the shared list so the gateway resolves both the same way.
161
+ registerEventAuthorizer(functionName, eventType, raw, authorizers, warnings) {
162
+ if (!raw)
163
+ return undefined;
164
+ if (eventType === 'httpApi') {
165
+ if (typeof raw === 'string')
166
+ return raw;
167
+ if (typeof raw === 'object') {
168
+ const ref = raw;
169
+ if (typeof ref.name === 'string')
170
+ return ref.name;
171
+ }
172
+ warnings.push(`Function "${functionName}": unsupported httpApi authorizer reference; route will return 500.`);
173
+ return `__unresolved__:${functionName}`;
174
+ }
175
+ // REST event authorizer: string shorthand → local function reference.
176
+ if (typeof raw === 'string') {
177
+ const name = `${functionName}:${raw}`;
178
+ authorizers.push({
179
+ name,
180
+ type: 'token',
181
+ eventType: 'http',
182
+ payloadVersion: '1.0',
183
+ enableSimpleResponses: false,
184
+ identitySource: ['method.request.header.Authorization'],
185
+ resultTtlInSeconds: DEFAULT_AUTHORIZER_TTL,
186
+ functionName: raw,
187
+ });
188
+ return name;
189
+ }
190
+ if (typeof raw === 'object') {
191
+ const def = raw;
192
+ const arn = this.extractArn(def.arn);
193
+ const localFn = typeof def.name === 'string' && !arn ? def.name : undefined;
194
+ const displayName = typeof def.name === 'string' ? def.name : `${functionName}-authorizer`;
195
+ const type = String(def.type || 'token').toLowerCase();
196
+ if (type !== 'token' && type !== 'request') {
197
+ warnings.push(`Function "${functionName}": authorizer "${displayName}" has unsupported type "${type}"; route will return 500.`);
198
+ return `__unresolved__:${displayName}`;
199
+ }
200
+ const name = `${functionName}:${displayName}`;
201
+ authorizers.push({
202
+ name,
203
+ type: type,
204
+ eventType: 'http',
205
+ payloadVersion: '1.0',
206
+ enableSimpleResponses: false,
207
+ identitySource: this.normalizeIdentitySource(def.identitySource ?? 'method.request.header.Authorization'),
208
+ resultTtlInSeconds: this.parseTtl(def.resultTtlInSeconds),
209
+ functionName: localFn,
210
+ arn,
211
+ });
212
+ return name;
213
+ }
214
+ return undefined;
215
+ }
216
+ normalizeIdentitySource(raw) {
217
+ if (Array.isArray(raw))
218
+ return raw.map(String).filter(Boolean);
219
+ if (typeof raw === 'string')
220
+ return raw.split(',').map(s => s.trim()).filter(Boolean);
221
+ return [];
222
+ }
223
+ parseTtl(raw) {
224
+ const parsed = Number(raw);
225
+ if (Number.isFinite(parsed) && parsed >= 0)
226
+ return parsed;
227
+ return DEFAULT_AUTHORIZER_TTL;
228
+ }
229
+ extractArn(raw) {
230
+ if (typeof raw === 'string')
231
+ return raw;
232
+ // CFN intrinsics (Fn::GetAtt on the authorizer function) mean "local function",
233
+ // which the caller captures via `name`/`functionName` instead.
234
+ return undefined;
235
+ }
236
+ normalizePath(path) {
237
+ if (path === '$default')
238
+ return path;
239
+ const trimmed = path.trim().replace(/\/+$/, '');
240
+ if (trimmed === '' || trimmed === '/')
241
+ return '/';
242
+ return trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
243
+ }
244
+ }
245
+ //# sourceMappingURL=serverless-state-parser.js.map
@@ -0,0 +1 @@
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,34 @@
1
+ import { Resource } from './cloudformation-parser.js';
2
+ import { ServiceMetadata } from './cache-manager.js';
3
+ export interface RegisterInput {
4
+ servicePath: string;
5
+ invokePort?: number;
6
+ apiPort?: number;
7
+ region?: string;
8
+ }
9
+ export interface RegisterResult {
10
+ serviceName: string;
11
+ resources: Resource[];
12
+ functionsCount: number;
13
+ routesCount: number;
14
+ warnings: string[];
15
+ }
16
+ export declare class ServiceRegistrar {
17
+ private static instance;
18
+ private cache;
19
+ private cacheReady;
20
+ static getInstance(): ServiceRegistrar;
21
+ private ensureCache;
22
+ register(input: RegisterInput): Promise<RegisterResult>;
23
+ activate(metadata: ServiceMetadata): Promise<void>;
24
+ rehydrateAll(): Promise<void>;
25
+ reregister(serviceName: string): Promise<void>;
26
+ deactivate(serviceName: string): Promise<void>;
27
+ private readTemplate;
28
+ private readState;
29
+ }
30
+ export declare class RegistrationError extends Error {
31
+ statusCode: number;
32
+ constructor(statusCode: number, message: string);
33
+ }
34
+ //# sourceMappingURL=service-registrar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-registrar.d.ts","sourceRoot":"","sources":["../../../src/server/services/service-registrar.ts"],"names":[],"mappings":"AAQA,OAAO,EAAwB,QAAQ,EAAkB,MAAM,4BAA4B,CAAC;AAM5F,OAAO,EAAgB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASnE,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAC1C,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,UAAU,CAAS;IAE3B,MAAM,CAAC,WAAW,IAAI,gBAAgB;YAOxB,WAAW;IAQnB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAkGvD,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB7B,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9C,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAOtC,YAAY;YAyDZ,SAAS;CAQxB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IACvB,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIvD"}
@@ -0,0 +1,262 @@
1
+ // End-to-end service (re-)registration: read the `sls package` artifacts
2
+ // (CloudFormation template + serverless-state.json), parse resources, functions,
3
+ // routes and authorizers, persist to the cache, provision LocalStack resources,
4
+ // and activate the data plane (runtime worker + gateway/invoke listeners +
5
+ // watcher). Shared by the /register route, boot rehydration and hot reload.
6
+ import fs from 'fs/promises';
7
+ import path from 'path';
8
+ import { CloudFormationParser } from './cloudformation-parser.js';
9
+ import { ServerlessStateParser, sanitizeEnvironmentValues, } from './serverless-state-parser.js';
10
+ import { CacheManager } from './cache-manager.js';
11
+ import { ResourceProvisioner } from './resource-provisioner.js';
12
+ import { ConfigManager } from './config-manager.js';
13
+ import { FunctionRegistry } from './function-registry.js';
14
+ import { LambdaRuntimeManager } from './lambda-runtime-manager.js';
15
+ import { GatewayManager } from './gateway-manager.js';
16
+ import { SourceWatcher } from './source-watcher.js';
17
+ import { runServerlessPackage, ServerlessPackageError } from './serverless-packager.js';
18
+ const cfnParser = new CloudFormationParser();
19
+ const stateParser = new ServerlessStateParser();
20
+ export class ServiceRegistrar {
21
+ static instance;
22
+ cache = new CacheManager();
23
+ cacheReady = false;
24
+ static getInstance() {
25
+ if (!ServiceRegistrar.instance) {
26
+ ServiceRegistrar.instance = new ServiceRegistrar();
27
+ }
28
+ return ServiceRegistrar.instance;
29
+ }
30
+ async ensureCache() {
31
+ if (!this.cacheReady) {
32
+ await this.cache.init();
33
+ this.cacheReady = true;
34
+ }
35
+ return this.cache;
36
+ }
37
+ async register(input) {
38
+ const configManager = ConfigManager.getInstance();
39
+ const cache = await this.ensureCache();
40
+ const resolvedPath = path.resolve(input.servicePath);
41
+ const serviceName = path.basename(resolvedPath);
42
+ const effectiveRegion = input.region || configManager.getConfig().region || 'us-east-1';
43
+ const template = await this.readTemplate(resolvedPath, serviceName);
44
+ const resources = cfnParser.parse(template);
45
+ const templateHash = cfnParser.calculateHash(template);
46
+ // serverless-state.json is the declarative source for routes/authorizers.
47
+ // Missing state (older setups) degrades gracefully: functions still come
48
+ // from the CFN template, HTTP routes are just unavailable.
49
+ const state = await this.readState(resolvedPath);
50
+ const warnings = [];
51
+ let functions = [];
52
+ let routes = [];
53
+ let authorizers = [];
54
+ let stage = 'dev';
55
+ const cfnLambdas = resources.filter((r) => r.type === 'lambda');
56
+ if (state) {
57
+ const parsed = stateParser.parse(state);
58
+ warnings.push(...parsed.warnings);
59
+ stage = parsed.stage;
60
+ routes = parsed.routes;
61
+ authorizers = parsed.authorizers;
62
+ // The CFN template carries the fully resolved function env (state may
63
+ // still hold unresolved refs) — prefer it when the names line up.
64
+ functions = parsed.functions.map(fn => {
65
+ const cfn = cfnLambdas.find(l => l.name === fn.fullName);
66
+ return cfn
67
+ ? { ...fn, environment: { ...fn.environment, ...sanitizeEnvironmentValues(cfn.environment) } }
68
+ : fn;
69
+ });
70
+ }
71
+ else {
72
+ warnings.push('serverless-state.json not found — functions registered from the CloudFormation template only (no HTTP routes).');
73
+ functions = cfnLambdas.map(l => ({
74
+ name: l.name,
75
+ fullName: l.name,
76
+ handler: l.handler,
77
+ runtime: l.runtime,
78
+ memorySize: l.memorySize,
79
+ timeout: l.timeout,
80
+ environment: sanitizeEnvironmentValues(l.environment),
81
+ triggers: [],
82
+ }));
83
+ }
84
+ // Port resolution: lss.config.json serviceRuntime > plugin payload >
85
+ // invokePortOffset rule (apiPort 30xx → invokePort 130xx).
86
+ const runtimeConfig = configManager.getRuntimeConfigForService(resolvedPath);
87
+ const apiPort = runtimeConfig.apiPort ?? input.apiPort;
88
+ const invokePort = runtimeConfig.invokePort
89
+ ?? input.invokePort
90
+ ?? (apiPort ? apiPort + configManager.getInvokePortOffset() : undefined);
91
+ const metadata = {
92
+ root: resolvedPath,
93
+ templateHash,
94
+ lastUpdated: Date.now(),
95
+ status: 'registered',
96
+ invokePort,
97
+ apiPort,
98
+ region: effectiveRegion,
99
+ stage,
100
+ functions,
101
+ routes,
102
+ authorizers,
103
+ };
104
+ await cache.saveTemplate(serviceName, template, metadata);
105
+ // Provision infra resources to LocalStack (unchanged behavior).
106
+ await ResourceProvisioner.getInstance().provisionResources(serviceName, resources, {
107
+ invokePort,
108
+ region: effectiveRegion,
109
+ });
110
+ await this.activate({ name: serviceName, ...metadata });
111
+ for (const warning of warnings) {
112
+ console.warn(`⚠️ [${serviceName}] ${warning}`);
113
+ }
114
+ return {
115
+ serviceName,
116
+ resources,
117
+ functionsCount: functions.length,
118
+ routesCount: routes?.length ?? 0,
119
+ warnings,
120
+ };
121
+ }
122
+ // Bring the data plane (registry, runtime worker, listeners, watcher) in line
123
+ // with a service's metadata. Also used at boot for every cached service.
124
+ async activate(metadata) {
125
+ const configManager = ConfigManager.getInstance();
126
+ const registry = FunctionRegistry.getInstance();
127
+ const runtime = LambdaRuntimeManager.getInstance();
128
+ const gateway = GatewayManager.getInstance();
129
+ const watcher = SourceWatcher.getInstance();
130
+ const entry = registry.registerService(metadata);
131
+ const runtimeConfig = configManager.getRuntimeConfigForService(metadata.root);
132
+ await runtime.syncService(entry);
133
+ await gateway.syncService(entry, runtimeConfig.enabled);
134
+ // Watch default depends on how handlers are loaded: source mode reloads are
135
+ // cheap (worker restart), artifact mode would need a re-package per save.
136
+ const resolvedMode = runtime.getRuntimeInfo(metadata.name).resolvedMode;
137
+ const watchEnabled = runtimeConfig.enabled
138
+ && (runtimeConfig.watch ?? resolvedMode === 'source')
139
+ && (metadata.functions?.length ?? 0) > 0;
140
+ if (watchEnabled) {
141
+ watcher.watch(metadata.name, metadata.root);
142
+ }
143
+ else {
144
+ watcher.unwatch(metadata.name);
145
+ }
146
+ }
147
+ async rehydrateAll() {
148
+ const cache = await this.ensureCache();
149
+ const services = await cache.listServices();
150
+ for (const metadata of services) {
151
+ try {
152
+ await this.activate(metadata);
153
+ }
154
+ catch (err) {
155
+ console.error(`❌ Failed to activate cached service "${metadata.name}":`, err);
156
+ }
157
+ }
158
+ if (services.length) {
159
+ console.log(`🔁 Reactivated ${services.length} cached service(s)`);
160
+ }
161
+ }
162
+ // Full reload for the watcher: re-package (when autoPackage allows) and
163
+ // re-register using the ports/region already on record.
164
+ async reregister(serviceName) {
165
+ const cache = await this.ensureCache();
166
+ const metadata = await cache.getMetadata(serviceName);
167
+ if (!metadata)
168
+ throw new Error(`Service ${serviceName} not found in cache`);
169
+ if (ConfigManager.getInstance().isAutoPackage()) {
170
+ const pkgConfig = ConfigManager.getInstance().getPackageConfigForService(metadata.root);
171
+ await runServerlessPackage({
172
+ command: pkgConfig.command,
173
+ args: pkgConfig.args,
174
+ cwd: metadata.root,
175
+ timeoutMs: pkgConfig.timeoutMs,
176
+ env: pkgConfig.env,
177
+ });
178
+ }
179
+ await this.register({
180
+ servicePath: metadata.root,
181
+ invokePort: metadata.invokePort,
182
+ apiPort: metadata.apiPort,
183
+ region: metadata.region,
184
+ });
185
+ }
186
+ async deactivate(serviceName) {
187
+ SourceWatcher.getInstance().unwatch(serviceName);
188
+ await LambdaRuntimeManager.getInstance().stopRuntime(serviceName);
189
+ await GatewayManager.getInstance().removeService(serviceName);
190
+ FunctionRegistry.getInstance().removeService(serviceName);
191
+ }
192
+ async readTemplate(resolvedPath, serviceName) {
193
+ const configManager = ConfigManager.getInstance();
194
+ const templatePath = path.join(resolvedPath, '.serverless', 'cloudformation-template-update-stack.json');
195
+ let templateContent;
196
+ try {
197
+ templateContent = await fs.readFile(templatePath, 'utf-8');
198
+ }
199
+ catch (err) {
200
+ const isENOENT = err?.code === 'ENOENT';
201
+ if (!isENOENT)
202
+ throw err;
203
+ if (!configManager.isAutoPackage()) {
204
+ throw new RegistrationError(400, `CloudFormation template not found at ${templatePath}. Run 'serverless package' in the service directory, or enable autoPackage in lss.config.json.`);
205
+ }
206
+ const pkgConfig = configManager.getPackageConfigForService(resolvedPath);
207
+ const displayCmd = [pkgConfig.command, ...pkgConfig.args].join(' ');
208
+ console.log(`📦 Template missing — running '${displayCmd}' in ${resolvedPath} (service: ${serviceName})`);
209
+ try {
210
+ const result = await runServerlessPackage({
211
+ command: pkgConfig.command,
212
+ args: pkgConfig.args,
213
+ cwd: resolvedPath,
214
+ timeoutMs: pkgConfig.timeoutMs,
215
+ env: pkgConfig.env,
216
+ });
217
+ console.log(`✅ Auto-package finished for ${resolvedPath} (exit 0)`);
218
+ if (result.stdout.trim()) {
219
+ console.log(`--- ${displayCmd} stdout ---\n${result.stdout.trimEnd()}\n--- end ---`);
220
+ }
221
+ }
222
+ catch (packageErr) {
223
+ if (packageErr instanceof ServerlessPackageError) {
224
+ console.error(`❌ Auto-package failed for ${resolvedPath}: ${packageErr.message}`);
225
+ if (packageErr.result.stdout.trim()) {
226
+ console.error(`--- ${displayCmd} stdout ---\n${packageErr.result.stdout.trimEnd()}\n--- end ---`);
227
+ }
228
+ if (packageErr.result.stderr.trim()) {
229
+ console.error(`--- ${displayCmd} stderr ---\n${packageErr.result.stderr.trimEnd()}\n--- end ---`);
230
+ }
231
+ }
232
+ else {
233
+ console.error(`❌ Auto-package failed for ${resolvedPath}:`, packageErr);
234
+ }
235
+ const detail = packageErr instanceof ServerlessPackageError
236
+ ? `${packageErr.message}\n${packageErr.result.stderr || packageErr.result.stdout}`.trim()
237
+ : packageErr instanceof Error ? packageErr.message : 'Unknown error';
238
+ throw new RegistrationError(500, `Auto-package failed for ${resolvedPath}: ${detail}. Full stderr/stdout is in the orchestrator log (/tmp/lss-orchestrator.log).`);
239
+ }
240
+ templateContent = await fs.readFile(templatePath, 'utf-8');
241
+ }
242
+ return JSON.parse(templateContent);
243
+ }
244
+ async readState(resolvedPath) {
245
+ try {
246
+ const statePath = path.join(resolvedPath, '.serverless', 'serverless-state.json');
247
+ return JSON.parse(await fs.readFile(statePath, 'utf-8'));
248
+ }
249
+ catch {
250
+ return null;
251
+ }
252
+ }
253
+ }
254
+ export class RegistrationError extends Error {
255
+ statusCode;
256
+ constructor(statusCode, message) {
257
+ super(message);
258
+ this.statusCode = statusCode;
259
+ this.name = 'RegistrationError';
260
+ }
261
+ }
262
+ //# sourceMappingURL=service-registrar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-registrar.js","sourceRoot":"","sources":["../../../src/server/services/service-registrar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface WatchStatus {
2
+ watching: boolean;
3
+ lastReloadAt?: number;
4
+ lastReloadKind?: 'runtime' | 'full';
5
+ lastError?: string;
6
+ }
7
+ export interface ReloadHandlers {
8
+ onRuntimeReload: (serviceName: string) => Promise<void>;
9
+ onFullReload: (serviceName: string) => Promise<void>;
10
+ }
11
+ export declare class SourceWatcher {
12
+ private static instance;
13
+ private watched;
14
+ private handlers?;
15
+ static getInstance(): SourceWatcher;
16
+ setHandlers(handlers: ReloadHandlers): void;
17
+ watch(serviceName: string, root: string): void;
18
+ unwatch(serviceName: string): void;
19
+ unwatchAll(): void;
20
+ getStatus(serviceName: string): WatchStatus;
21
+ private onChange;
22
+ private reload;
23
+ }
24
+ //# sourceMappingURL=source-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-watcher.d.ts","sourceRoot":"","sources":["../../../src/server/services/source-watcher.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,MAAM,WAAW,cAAc;IAE7B,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAMD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAElC,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAI3C,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAsB9C,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQlC,UAAU,IAAI,IAAI;IAMlB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW;IAI3C,OAAO,CAAC,QAAQ;YAmBF,MAAM;CAiBrB"}