stacktape 2.24.0-rc.2 → 2.24.0-rc.21

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/bin/stacktape.js CHANGED
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
- /* eslint-disable */
3
2
 
4
3
  /**
5
4
  * Stacktape CLI launcher
6
5
  * Downloads and caches the platform-specific binary on first run
7
6
  */
7
+
8
8
  const { spawnSync, execSync } = require('node:child_process');
9
- const { createWriteStream, existsSync, chmodSync, mkdirSync } = require('node:fs');
9
+ const { createWriteStream, existsSync, chmodSync, mkdirSync, accessSync, constants } = require('node:fs');
10
10
  const { get: httpsGet } = require('node:https');
11
11
  const { platform, arch, homedir } = require('node:os');
12
12
  const { join } = require('node:path');
13
13
 
14
14
  const PACKAGE_VERSION = require('../package.json').version;
15
15
 
16
- const GITHUB_REPO = 'stacktape/stacktape';
16
+ const GITHUB_REPO = 'stacktape/core';
17
17
 
18
18
  const PLATFORM_MAP = {
19
19
  'win32-x64': { fileName: 'windows.zip', extract: extractZip },
@@ -24,7 +24,7 @@ const PLATFORM_MAP = {
24
24
  'linux-x64-musl': { fileName: 'alpine.tar.gz', extract: extractTarGz }
25
25
  };
26
26
 
27
- const detectPlatform = () => {
27
+ function detectPlatform() {
28
28
  const currentPlatform = platform();
29
29
  const currentArch = arch();
30
30
 
@@ -52,9 +52,9 @@ const detectPlatform = () => {
52
52
  }
53
53
 
54
54
  return platformKey;
55
- };
55
+ }
56
56
 
57
- const downloadFile = async (url, destPath, retries = 3) => {
57
+ async function downloadFile(url, destPath, retries = 3) {
58
58
  for (let i = 0; i < retries; i++) {
59
59
  try {
60
60
  await new Promise((resolve, reject) => {
@@ -119,27 +119,25 @@ const downloadFile = async (url, destPath, retries = 3) => {
119
119
  console.info(`\nRetrying download (${i + 1}/${retries})...`);
120
120
  }
121
121
  }
122
- };
122
+ }
123
123
 
124
- // lazy load only when needed
125
- const extractTarGz = async (archivePath, destDir) => {
124
+ async function extractTarGz(archivePath, destDir) {
126
125
  const tar = require('tar');
127
126
  await tar.x({
128
127
  file: archivePath,
129
128
  cwd: destDir
130
129
  });
131
- };
130
+ }
132
131
 
133
- // lazy load only when needed
134
- const extractZip = async (archivePath, destDir) => {
132
+ async function extractZip(archivePath, destDir) {
135
133
  const AdmZip = require('adm-zip');
136
134
  const zip = new AdmZip(archivePath);
137
135
  zip.extractAllTo(destDir, true);
138
- };
136
+ }
139
137
 
140
- const setExecutablePermissions = (binDir) => {
138
+ function setExecutablePermissions(binDir) {
141
139
  if (platform() === 'win32') {
142
- return; // Windows doesn't need chmod
140
+ return;
143
141
  }
144
142
 
145
143
  const executables = [
@@ -159,22 +157,32 @@ const setExecutablePermissions = (binDir) => {
159
157
  }
160
158
  }
161
159
  }
162
- };
160
+ }
163
161
 
164
- const ensureBinary = async () => {
162
+ async function ensureBinary() {
165
163
  const platformKey = detectPlatform();
166
164
  const platformInfo = PLATFORM_MAP[platformKey];
167
165
  const version = PACKAGE_VERSION;
168
166
 
169
- const cacheDir = join(homedir(), '.stacktape', 'bin', version);
170
167
  const binaryName = platform() === 'win32' ? 'stacktape.exe' : 'stacktape';
168
+
169
+ let cacheDir;
170
+ try {
171
+ const localDir = join(__dirname, '..', '.stacktape', 'bin', version);
172
+ mkdirSync(localDir, { recursive: true });
173
+ accessSync(localDir, constants.W_OK);
174
+ cacheDir = localDir;
175
+ } catch {
176
+ cacheDir = join(homedir(), '.stacktape', 'bin', version);
177
+ }
178
+
171
179
  const binaryPath = join(cacheDir, binaryName);
172
180
 
173
181
  if (existsSync(binaryPath)) {
174
182
  return binaryPath;
175
183
  }
176
184
 
177
- console.info(`Stacktape binary not found. Installing version ${version} for ${platformKey}...`);
185
+ console.info(`Stacktape binary not found. Installing version ${version} for ${platformKey}...`);
178
186
 
179
187
  if (!existsSync(cacheDir)) {
180
188
  mkdirSync(cacheDir, { recursive: true });
@@ -211,11 +219,8 @@ You can also install Stacktape directly using:
211
219
  ${getManualInstallCommand(platformKey)}`);
212
220
  process.exit(1);
213
221
  }
214
- };
222
+ }
215
223
 
216
- /**
217
- * Gets the manual installation command for the platform
218
- */
219
224
  function getManualInstallCommand(platformKey) {
220
225
  const commands = {
221
226
  'win32-x64': 'iwr https://installs.stacktape.com/windows.ps1 -useb | iex',
@@ -228,9 +233,6 @@ function getManualInstallCommand(platformKey) {
228
233
  return commands[platformKey] || 'See https://docs.stacktape.com for installation instructions';
229
234
  }
230
235
 
231
- /**
232
- * Main execution
233
- */
234
236
  async function main() {
235
237
  try {
236
238
  const binaryPath = await ensureBinary();
package/index.d.ts CHANGED
@@ -70,6 +70,8 @@ import type {
70
70
  RateBasedStatementProps,
71
71
  SqsQueueEventBusIntegrationProps,
72
72
  ContainerWorkloadHttpApiIntegrationProps,
73
+ ContainerWorkloadLoadBalancerIntegrationProps,
74
+ ContainerWorkloadNetworkLoadBalancerIntegrationProps,
73
75
  ContainerWorkloadInternalIntegrationProps,
74
76
  ContainerWorkloadServiceConnectIntegrationProps,
75
77
  HttpEndpointLogForwardingProps,
@@ -190,7 +192,7 @@ export type GetConfigParams = {
190
192
  type WebServiceConnectTo = RelationalDatabase | Bucket | HostingBucket | DynamoDbTable | EventBus | RedisCluster | MongoDbAtlasCluster | UpstashRedis | SqsQueue | SnsTopic | OpenSearchDomain | EfsFilesystem | PrivateService | GlobalAwsServiceConstant;
191
193
  type PrivateServiceConnectTo = RelationalDatabase | Bucket | HostingBucket | DynamoDbTable | EventBus | RedisCluster | MongoDbAtlasCluster | UpstashRedis | SqsQueue | SnsTopic | OpenSearchDomain | EfsFilesystem | GlobalAwsServiceConstant;
192
194
  type WorkerServiceConnectTo = RelationalDatabase | Bucket | HostingBucket | DynamoDbTable | EventBus | RedisCluster | MongoDbAtlasCluster | UpstashRedis | SqsQueue | SnsTopic | OpenSearchDomain | EfsFilesystem | GlobalAwsServiceConstant;
193
- type ContainerWorkloadConnectTo = RelationalDatabase | Bucket | HostingBucket | DynamoDbTable | EventBus | RedisCluster | MongoDbAtlasCluster | UpstashRedis | SqsQueue | SnsTopic | OpenSearchDomain | EfsFilesystem | GlobalAwsServiceConstant;
195
+ type MultiContainerWorkloadConnectTo = RelationalDatabase | Bucket | HostingBucket | DynamoDbTable | EventBus | RedisCluster | MongoDbAtlasCluster | UpstashRedis | SqsQueue | SnsTopic | OpenSearchDomain | EfsFilesystem | GlobalAwsServiceConstant;
194
196
  type LambdaFunctionConnectTo = RelationalDatabase | Bucket | HostingBucket | DynamoDbTable | EventBus | RedisCluster | MongoDbAtlasCluster | UpstashRedis | SqsQueue | SnsTopic | OpenSearchDomain | EfsFilesystem | PrivateService | WebService | GlobalAwsServiceConstant;
195
197
  type BatchJobConnectTo = RelationalDatabase | Bucket | HostingBucket | DynamoDbTable | EventBus | RedisCluster | MongoDbAtlasCluster | UpstashRedis | SqsQueue | SnsTopic | OpenSearchDomain | EfsFilesystem | GlobalAwsServiceConstant;
196
198
  type StateMachineConnectTo = LambdaFunction | BatchJob | GlobalAwsServiceConstant;
@@ -257,7 +259,7 @@ export type ContainerWorkloadProps = Omit<SdkContainerWorkloadProps, 'connectTo'
257
259
  * List of resources or AWS services to which this resource receives permissions.
258
260
  * Automatically grants necessary IAM permissions for accessing the connected resources.
259
261
  */
260
- connectTo?: Array<ContainerWorkloadConnectTo>;
262
+ connectTo?: Array<MultiContainerWorkloadConnectTo>;
261
263
  /**
262
264
  * Environment variables to set for this resource.
263
265
  * You can reference resource parameters using directive syntax: $ResourceParam('resourceName', 'paramName')
@@ -267,7 +269,7 @@ export type ContainerWorkloadProps = Omit<SdkContainerWorkloadProps, 'connectTo'
267
269
  * Override properties of underlying CloudFormation resources.
268
270
  * Allows fine-grained control over the generated infrastructure.
269
271
  */
270
- overrides?: ContainerWorkloadOverrides;
272
+ overrides?: MultiContainerWorkloadOverrides;
271
273
  };
272
274
 
273
275
  export type LambdaFunctionProps = Omit<SdkLambdaFunctionProps, 'connectTo' | 'environment'> & {
@@ -621,7 +623,7 @@ export type WorkerServiceOverrides = {
621
623
  [key: string]: { [propName: string]: any } | undefined;
622
624
  };
623
625
 
624
- export type ContainerWorkloadOverrides = {
626
+ export type MultiContainerWorkloadOverrides = {
625
627
  ecsExecutionRole?: Partial<IAMRoleProperties>;
626
628
  ecsAutoScalingRole?: Partial<IAMRoleProperties>;
627
629
  autoScalingTarget?: Partial<ApplicationAutoScalingScalableTargetProperties>;
@@ -925,8 +927,10 @@ export declare class PrivateService extends BaseResource {
925
927
  export declare class WorkerService extends BaseResource {
926
928
  constructor(name: string, properties: WorkerServiceProps);
927
929
  }
928
- export declare class ContainerWorkload extends BaseResource {
930
+ export declare class MultiContainerWorkload extends BaseResource {
929
931
  constructor(name: string, properties: ContainerWorkloadProps);
932
+ /** Log group ARN */
933
+ readonly logGroupArn: string;
930
934
  }
931
935
  export declare class LambdaFunction extends BaseResource {
932
936
  constructor(name: string, properties: LambdaFunctionProps);
@@ -1086,6 +1090,18 @@ export declare class Bastion extends BaseResource {
1086
1090
  constructor(name: string, properties: BastionPropsWithOverrides);
1087
1091
  }
1088
1092
 
1093
+ // ==========================================
1094
+ // STACKTAPE CONFIG TYPE
1095
+ // ==========================================
1096
+
1097
+ // Re-export StacktapeConfig with properly typed resources
1098
+ // Accepts both class instances and plain objects
1099
+ import type { StacktapeResourceDefinition } from './sdk';
1100
+
1101
+ export type StacktapeConfig = Omit<import('./sdk').StacktapeConfig, 'resources'> & {
1102
+ resources: { [resourceName: string]: RelationalDatabase | WebService | PrivateService | WorkerService | MultiContainerWorkload | LambdaFunction | BatchJob | Bucket | HostingBucket | DynamoDbTable | EventBus | HttpApiGateway | ApplicationLoadBalancer | NetworkLoadBalancer | RedisCluster | MongoDbAtlasCluster | StateMachine | UserAuthPool | UpstashRedis | SqsQueue | SnsTopic | WebAppFirewall | OpenSearchDomain | EfsFilesystem | NextjsWeb | Bastion | StacktapeResourceDefinition };
1103
+ };
1104
+
1089
1105
  // ==========================================
1090
1106
  // TYPE PROPERTIES CLASS DECLARATIONS
1091
1107
  // ==========================================
@@ -1306,17 +1322,27 @@ export declare class SqsQueueEventBusIntegration extends BaseTypeProperties {
1306
1322
  readonly type: 'event-bus';
1307
1323
  }
1308
1324
 
1309
- export declare class ContainerWorkloadHttpApiIntegration extends BaseTypeProperties {
1325
+ export declare class MultiContainerWorkloadHttpApiIntegration extends BaseTypeProperties {
1310
1326
  constructor(properties: ContainerWorkloadHttpApiIntegrationProps);
1311
1327
  readonly type: 'http-api-gateway';
1312
1328
  }
1313
1329
 
1314
- export declare class ContainerWorkloadInternalIntegration extends BaseTypeProperties {
1330
+ export declare class MultiContainerWorkloadLoadBalancerIntegration extends BaseTypeProperties {
1331
+ constructor(properties: ContainerWorkloadLoadBalancerIntegrationProps);
1332
+ readonly type: 'application-load-balancer';
1333
+ }
1334
+
1335
+ export declare class MultiContainerWorkloadNetworkLoadBalancerIntegration extends BaseTypeProperties {
1336
+ constructor(properties: ContainerWorkloadNetworkLoadBalancerIntegrationProps);
1337
+ readonly type: 'network-load-balancer';
1338
+ }
1339
+
1340
+ export declare class MultiContainerWorkloadInternalIntegration extends BaseTypeProperties {
1315
1341
  constructor(properties: ContainerWorkloadInternalIntegrationProps);
1316
- readonly type: 'internal';
1342
+ readonly type: 'workload-internal';
1317
1343
  }
1318
1344
 
1319
- export declare class ContainerWorkloadServiceConnectIntegration extends BaseTypeProperties {
1345
+ export declare class MultiContainerWorkloadServiceConnectIntegration extends BaseTypeProperties {
1320
1346
  constructor(properties: ContainerWorkloadServiceConnectIntegrationProps);
1321
1347
  readonly type: 'service-connect';
1322
1348
  }
@@ -5845,7 +5871,7 @@ export declare const $GitInfo: () => string;
5845
5871
  * 3. Ensure child resources are defined in child-resources.ts
5846
5872
  * 4. That's it! The types will be generated automatically.
5847
5873
  */
5848
- export type ResourceTypeName = 'RelationalDatabase' | 'WebService' | 'PrivateService' | 'WorkerService' | 'ContainerWorkload' | 'LambdaFunction' | 'BatchJob' | 'Bucket' | 'HostingBucket' | 'DynamoDbTable' | 'EventBus' | 'HttpApiGateway' | 'ApplicationLoadBalancer' | 'NetworkLoadBalancer' | 'RedisCluster' | 'MongoDbAtlasCluster' | 'StateMachine' | 'UserAuthPool' | 'UpstashRedis' | 'SqsQueue' | 'SnsTopic' | 'WebAppFirewall' | 'OpenSearchDomain' | 'EfsFilesystem' | 'NextjsWeb' | 'Bastion';
5874
+ export type ResourceTypeName = 'RelationalDatabase' | 'WebService' | 'PrivateService' | 'WorkerService' | 'MultiContainerWorkload' | 'LambdaFunction' | 'BatchJob' | 'Bucket' | 'HostingBucket' | 'DynamoDbTable' | 'EventBus' | 'HttpApiGateway' | 'ApplicationLoadBalancer' | 'NetworkLoadBalancer' | 'RedisCluster' | 'MongoDbAtlasCluster' | 'StateMachine' | 'UserAuthPool' | 'UpstashRedis' | 'SqsQueue' | 'SnsTopic' | 'WebAppFirewall' | 'OpenSearchDomain' | 'EfsFilesystem' | 'NextjsWeb' | 'Bastion';
5849
5875
  export type ResourceDefinition = {
5850
5876
  /** Class name for the resource (e.g., 'LambdaFunction') */
5851
5877
  className: ResourceTypeName;
package/index.js CHANGED
@@ -50,10 +50,6 @@ __export(index_exports, {
50
50
  CdnLoadBalancerRoute: () => CdnLoadBalancerRoute,
51
51
  CloudwatchLogIntegration: () => CloudwatchLogIntegration,
52
52
  ContainerEfsMount: () => ContainerEfsMount,
53
- ContainerWorkload: () => ContainerWorkload,
54
- ContainerWorkloadHttpApiIntegration: () => ContainerWorkloadHttpApiIntegration,
55
- ContainerWorkloadInternalIntegration: () => ContainerWorkloadInternalIntegration,
56
- ContainerWorkloadServiceConnectIntegration: () => ContainerWorkloadServiceConnectIntegration,
57
53
  CustomArtifactLambdaPackaging: () => CustomArtifactLambdaPackaging,
58
54
  CustomDockerfilePackaging: () => CustomDockerfilePackaging,
59
55
  CustomRuleGroup: () => CustomRuleGroup,
@@ -84,6 +80,12 @@ __export(index_exports, {
84
80
  LocalScriptWithFileScripts: () => LocalScriptWithFileScripts,
85
81
  ManagedRuleGroup: () => ManagedRuleGroup,
86
82
  MongoDbAtlasCluster: () => MongoDbAtlasCluster,
83
+ MultiContainerWorkload: () => MultiContainerWorkload,
84
+ MultiContainerWorkloadHttpApiIntegration: () => MultiContainerWorkloadHttpApiIntegration,
85
+ MultiContainerWorkloadInternalIntegration: () => MultiContainerWorkloadInternalIntegration,
86
+ MultiContainerWorkloadLoadBalancerIntegration: () => MultiContainerWorkloadLoadBalancerIntegration,
87
+ MultiContainerWorkloadNetworkLoadBalancerIntegration: () => MultiContainerWorkloadNetworkLoadBalancerIntegration,
88
+ MultiContainerWorkloadServiceConnectIntegration: () => MultiContainerWorkloadServiceConnectIntegration,
87
89
  NetworkLoadBalancer: () => NetworkLoadBalancer,
88
90
  NextjsWeb: () => NextjsWeb,
89
91
  NixpacksPackaging: () => NixpacksPackaging,
@@ -2972,7 +2974,8 @@ var REFERENCEABLE_PARAMS = {
2972
2974
  { name: "arn", description: "EFS ARN" },
2973
2975
  { name: "id", description: "EFS ID" }
2974
2976
  ],
2975
- "nextjs-web": [{ name: "url", description: "Website URL" }]
2977
+ "nextjs-web": [{ name: "url", description: "Website URL" }],
2978
+ "multi-container-workload": [{ name: "logGroupArn", description: "Log group ARN" }]
2976
2979
  };
2977
2980
 
2978
2981
  // src/api/npm/ts/resources.ts
@@ -3004,7 +3007,7 @@ var RelationalDatabase = createResourceClass("RelationalDatabase", "relational-d
3004
3007
  var WebService = createResourceClass("WebService", "web-service");
3005
3008
  var PrivateService = createResourceClass("PrivateService", "private-service");
3006
3009
  var WorkerService = createResourceClass("WorkerService", "worker-service");
3007
- var ContainerWorkload = createResourceClass("ContainerWorkload", "multi-container-workload");
3010
+ var MultiContainerWorkload = createResourceClass("MultiContainerWorkload", "multi-container-workload");
3008
3011
  var LambdaFunction = createResourceClass("LambdaFunction", "function");
3009
3012
  var BatchJob = createResourceClass("BatchJob", "batch-job");
3010
3013
  var Bucket = createResourceClass("Bucket", "bucket");
@@ -3108,16 +3111,24 @@ var ManagedRuleGroup = createTypePropertiesClass("ManagedRuleGroup", "managed-ru
3108
3111
  var CustomRuleGroup = createTypePropertiesClass("CustomRuleGroup", "custom-rule-group");
3109
3112
  var RateBasedRule = createTypePropertiesClass("RateBasedRule", "rate-based-rule");
3110
3113
  var SqsQueueEventBusIntegration = createTypePropertiesClass("SqsQueueEventBusIntegration", "event-bus");
3111
- var ContainerWorkloadHttpApiIntegration = createTypePropertiesClass(
3112
- "ContainerWorkloadHttpApiIntegration",
3114
+ var MultiContainerWorkloadHttpApiIntegration = createTypePropertiesClass(
3115
+ "MultiContainerWorkloadHttpApiIntegration",
3113
3116
  "http-api-gateway"
3114
3117
  );
3115
- var ContainerWorkloadInternalIntegration = createTypePropertiesClass(
3116
- "ContainerWorkloadInternalIntegration",
3117
- "internal"
3118
+ var MultiContainerWorkloadLoadBalancerIntegration = createTypePropertiesClass(
3119
+ "MultiContainerWorkloadLoadBalancerIntegration",
3120
+ "application-load-balancer"
3121
+ );
3122
+ var MultiContainerWorkloadNetworkLoadBalancerIntegration = createTypePropertiesClass(
3123
+ "MultiContainerWorkloadNetworkLoadBalancerIntegration",
3124
+ "network-load-balancer"
3125
+ );
3126
+ var MultiContainerWorkloadInternalIntegration = createTypePropertiesClass(
3127
+ "MultiContainerWorkloadInternalIntegration",
3128
+ "workload-internal"
3118
3129
  );
3119
- var ContainerWorkloadServiceConnectIntegration = createTypePropertiesClass(
3120
- "ContainerWorkloadServiceConnectIntegration",
3130
+ var MultiContainerWorkloadServiceConnectIntegration = createTypePropertiesClass(
3131
+ "MultiContainerWorkloadServiceConnectIntegration",
3121
3132
  "service-connect"
3122
3133
  );
3123
3134
  var LocalScriptWithCommand = createTypePropertiesClass("LocalScriptWithCommand", "local-script");
@@ -3184,10 +3195,6 @@ var LambdaEfsMount = createTypePropertiesClass("LambdaEfsMount", "efs");
3184
3195
  CdnLoadBalancerRoute,
3185
3196
  CloudwatchLogIntegration,
3186
3197
  ContainerEfsMount,
3187
- ContainerWorkload,
3188
- ContainerWorkloadHttpApiIntegration,
3189
- ContainerWorkloadInternalIntegration,
3190
- ContainerWorkloadServiceConnectIntegration,
3191
3198
  CustomArtifactLambdaPackaging,
3192
3199
  CustomDockerfilePackaging,
3193
3200
  CustomRuleGroup,
@@ -3218,6 +3225,12 @@ var LambdaEfsMount = createTypePropertiesClass("LambdaEfsMount", "efs");
3218
3225
  LocalScriptWithFileScripts,
3219
3226
  ManagedRuleGroup,
3220
3227
  MongoDbAtlasCluster,
3228
+ MultiContainerWorkload,
3229
+ MultiContainerWorkloadHttpApiIntegration,
3230
+ MultiContainerWorkloadInternalIntegration,
3231
+ MultiContainerWorkloadLoadBalancerIntegration,
3232
+ MultiContainerWorkloadNetworkLoadBalancerIntegration,
3233
+ MultiContainerWorkloadServiceConnectIntegration,
3221
3234
  NetworkLoadBalancer,
3222
3235
  NextjsWeb,
3223
3236
  NixpacksPackaging,