@mikarinneoracle/oci-cdk-code-only-preview 0.0.1 → 0.0.3
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/README.md +29 -6
- package/package.json +1 -1
- package/lib/.gen/providers/oci/identity-dynamic-group/index.d.ts +0 -166
- package/lib/.gen/providers/oci/identity-dynamic-group/index.js +0 -408
- package/lib/bin/deploy-with-build.js +0 -132
- package/lib/test/java-function/aws-cdk/bin/app.d.ts +0 -2
- package/lib/test/java-function/aws-cdk/bin/app.js +0 -51
- package/lib/test/java-function/aws-cdk/lib/function-stack.d.ts +0 -11
- package/lib/test/java-function/aws-cdk/lib/function-stack.js +0 -159
- package/lib/test/java-function/aws-cdk/lib/test-function-stack.d.ts +0 -5
- package/lib/test/java-function/aws-cdk/lib/test-function-stack.js +0 -94
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/apigateway-deployment/index.d.ts +0 -5356
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/apigateway-deployment/index.js +0 -14972
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/apigateway-gateway/index.d.ts +0 -449
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/apigateway-gateway/index.js +0 -1149
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/artifacts-container-repository/index.d.ts +0 -217
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/artifacts-container-repository/index.js +0 -563
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-internet-gateway/index.d.ts +0 -176
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-internet-gateway/index.js +0 -431
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-route-table/index.d.ts +0 -255
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-route-table/index.js +0 -644
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-security-list/index.d.ts +0 -752
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-security-list/index.js +0 -2091
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-service-gateway/index.d.ts +0 -220
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-service-gateway/index.js +0 -543
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-subnet/index.d.ts +0 -251
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-subnet/index.js +0 -612
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-vcn/index.d.ts +0 -270
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/core-vcn/index.js +0 -672
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/data-oci-core-services/index.d.ts +0 -150
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/data-oci-core-services/index.js +0 -386
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/functions-application/index.d.ts +0 -330
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/functions-application/index.js +0 -821
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/functions-function/index.d.ts +0 -322
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/functions-function/index.js +0 -820
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/provider/index.d.ts +0 -190
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/provider/index.js +0 -391
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/vault-secret/index.d.ts +0 -439
- package/lib/test/java-function/oci-cdk/.gen/providers/oci/vault-secret/index.js +0 -1146
- package/lib/test/java-function/oci-cdk/bin/app.d.ts +0 -2
- package/lib/test/java-function/oci-cdk/bin/app.js +0 -34
- package/lib/test/java-function/oci-cdk/config/oci-config.d.ts +0 -68
- package/lib/test/java-function/oci-cdk/config/oci-config.js +0 -202
- package/lib/test/java-function/oci-cdk/lib/function-stack.d.ts +0 -31
- package/lib/test/java-function/oci-cdk/lib/function-stack.js +0 -549
- package/lib/test/java-function/oci-cdk/lib/test-function-stack.d.ts +0 -17
- package/lib/test/java-function/oci-cdk/lib/test-function-stack.js +0 -99
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import * as cdk from 'aws-cdk-lib';
|
|
2
|
-
import { Construct } from 'constructs';
|
|
3
|
-
export interface FunctionStackProps extends cdk.StackProps {
|
|
4
|
-
/** PostgreSQL connection URL (same format as OCI: postgresql://user:password@host:port/dbname). When set, stack creates a Secrets Manager secret and passes its ARN to Lambda. Set PG_URL at deploy time. */
|
|
5
|
-
readonly pgUrl?: string;
|
|
6
|
-
/** When PG_URL is not set: ARN of existing Secrets Manager secret (e.g. RDS-generated JSON secret). Set PG_SECRET_ARN at deploy time. RDS is not created by this stack — create RDS manually in the stack VPC and allow the Lambda security group on port 5432. */
|
|
7
|
-
readonly pgSecretArn?: string;
|
|
8
|
-
}
|
|
9
|
-
export declare class FunctionStack extends cdk.Stack {
|
|
10
|
-
constructor(scope: Construct, id: string, props?: FunctionStackProps);
|
|
11
|
-
}
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.FunctionStack = void 0;
|
|
37
|
-
const cdk = __importStar(require("aws-cdk-lib"));
|
|
38
|
-
const lambda = __importStar(require("aws-cdk-lib/aws-lambda"));
|
|
39
|
-
const apigateway = __importStar(require("aws-cdk-lib/aws-apigateway"));
|
|
40
|
-
const secretsmanager = __importStar(require("aws-cdk-lib/aws-secretsmanager"));
|
|
41
|
-
const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
|
|
42
|
-
const rds = __importStar(require("aws-cdk-lib/aws-rds"));
|
|
43
|
-
const path = __importStar(require("path"));
|
|
44
|
-
class FunctionStack extends cdk.Stack {
|
|
45
|
-
constructor(scope, id, props) {
|
|
46
|
-
super(scope, id, props);
|
|
47
|
-
const pgUrl = props?.pgUrl ?? process.env.PG_URL;
|
|
48
|
-
const pgSecretArnFromEnv = props?.pgSecretArn ?? process.env.PG_SECRET_ARN;
|
|
49
|
-
const environment = {
|
|
50
|
-
PLATFORM: 'AWS',
|
|
51
|
-
};
|
|
52
|
-
// PG connection: create secret from PG_URL (like OCI) or use existing PG_SECRET_ARN
|
|
53
|
-
let pgSecretArn;
|
|
54
|
-
if (pgUrl?.trim()) {
|
|
55
|
-
const pgSecret = new secretsmanager.Secret(this, 'PgUrlSecret', {
|
|
56
|
-
secretName: `function-pg-url-${this.stackName}`,
|
|
57
|
-
description: 'PostgreSQL connection URL for function (from PG_URL)',
|
|
58
|
-
secretStringValue: cdk.SecretValue.unsafePlainText(pgUrl.trim()),
|
|
59
|
-
});
|
|
60
|
-
pgSecretArn = pgSecret.secretArn;
|
|
61
|
-
environment.PG_SECRET_ARN = pgSecretArn;
|
|
62
|
-
}
|
|
63
|
-
else if (pgSecretArnFromEnv?.trim()) {
|
|
64
|
-
pgSecretArn = pgSecretArnFromEnv.trim();
|
|
65
|
-
environment.PG_SECRET_ARN = pgSecretArn;
|
|
66
|
-
}
|
|
67
|
-
// VPC created by default (like OCI stack VCN) — create RDS manually in this VPC and allow Lambda security group on port 5432
|
|
68
|
-
const vpc = new ec2.Vpc(this, 'Vpc', {
|
|
69
|
-
maxAzs: 2,
|
|
70
|
-
natGateways: 1,
|
|
71
|
-
});
|
|
72
|
-
// Java Lambda function (in VPC private subnets so it can reach RDS and AWS APIs via NAT). Build JAR first (e.g. ./scripts/build-function.sh aws).
|
|
73
|
-
const javaFunction = new lambda.Function(this, 'JavaFunction', {
|
|
74
|
-
runtime: lambda.Runtime.JAVA_11,
|
|
75
|
-
handler: 'com.example.function.aws.AwsFunctionHandler',
|
|
76
|
-
code: lambda.Code.fromAsset(path.join(__dirname, '../../function-code/target/test-function-aws-1.0.0.jar')),
|
|
77
|
-
memorySize: 512,
|
|
78
|
-
timeout: cdk.Duration.seconds(30),
|
|
79
|
-
description: 'Java function compatible with AWS Lambda and OCI Functions',
|
|
80
|
-
environment,
|
|
81
|
-
vpc,
|
|
82
|
-
vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
|
|
83
|
-
});
|
|
84
|
-
const lambdaSg = javaFunction.connections.securityGroups[0];
|
|
85
|
-
// Dedicated security group for RDS: allow PostgreSQL from Lambda (avoids circular dependency from self-referential rule)
|
|
86
|
-
const rdsSg = new ec2.SecurityGroup(this, 'RdsSecurityGroup', {
|
|
87
|
-
vpc,
|
|
88
|
-
description: 'Security group for RDS - allow Lambda on port 5432',
|
|
89
|
-
allowAllOutbound: true,
|
|
90
|
-
});
|
|
91
|
-
rdsSg.addIngressRule(ec2.Peer.securityGroupId(lambdaSg.securityGroupId), ec2.Port.tcp(5432), 'Allow PostgreSQL from Lambda');
|
|
92
|
-
// DB subnet group for manual RDS: use this when creating RDS in the console/CLI
|
|
93
|
-
const dbSubnetGroup = new rds.SubnetGroup(this, 'DbSubnetGroup', {
|
|
94
|
-
description: 'Private subnets for RDS (use when creating RDS in this VPC)',
|
|
95
|
-
vpc,
|
|
96
|
-
vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
|
|
97
|
-
});
|
|
98
|
-
if (pgSecretArn) {
|
|
99
|
-
const secret = secretsmanager.Secret.fromSecretCompleteArn(this, 'PgSecret', pgSecretArn);
|
|
100
|
-
secret.grantRead(javaFunction);
|
|
101
|
-
}
|
|
102
|
-
// API Gateway REST API
|
|
103
|
-
const api = new apigateway.RestApi(this, 'FunctionApi', {
|
|
104
|
-
restApiName: 'Java Function API',
|
|
105
|
-
description: 'API Gateway for Java function',
|
|
106
|
-
defaultCorsPreflightOptions: {
|
|
107
|
-
allowOrigins: apigateway.Cors.ALL_ORIGINS,
|
|
108
|
-
allowMethods: apigateway.Cors.ALL_METHODS,
|
|
109
|
-
allowHeaders: ['Content-Type', 'X-Amz-Date', 'Authorization', 'X-Api-Key'],
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
// Lambda integration
|
|
113
|
-
const lambdaIntegration = new apigateway.LambdaIntegration(javaFunction, {
|
|
114
|
-
requestTemplates: { 'application/json': '{ "statusCode": "200" }' },
|
|
115
|
-
});
|
|
116
|
-
// Single endpoint with query parameter routing
|
|
117
|
-
// Uses query parameter ?action=hello|echo|info instead of path-based routes
|
|
118
|
-
api.root.addMethod('GET', lambdaIntegration);
|
|
119
|
-
api.root.addMethod('POST', lambdaIntegration);
|
|
120
|
-
// Outputs
|
|
121
|
-
new cdk.CfnOutput(this, 'ApiUrl', {
|
|
122
|
-
value: api.url,
|
|
123
|
-
description: 'API Gateway endpoint URL',
|
|
124
|
-
exportName: 'FunctionApiUrl',
|
|
125
|
-
});
|
|
126
|
-
new cdk.CfnOutput(this, 'FunctionName', {
|
|
127
|
-
value: javaFunction.functionName,
|
|
128
|
-
description: 'Lambda function name',
|
|
129
|
-
exportName: 'FunctionName',
|
|
130
|
-
});
|
|
131
|
-
new cdk.CfnOutput(this, 'FunctionArn', {
|
|
132
|
-
value: javaFunction.functionArn,
|
|
133
|
-
description: 'Lambda function ARN',
|
|
134
|
-
exportName: 'FunctionArn',
|
|
135
|
-
});
|
|
136
|
-
new cdk.CfnOutput(this, 'VpcId', {
|
|
137
|
-
value: vpc.vpcId,
|
|
138
|
-
description: 'VPC ID — create RDS in this VPC',
|
|
139
|
-
exportName: 'FunctionVpcId',
|
|
140
|
-
});
|
|
141
|
-
new cdk.CfnOutput(this, 'LambdaSecurityGroupId', {
|
|
142
|
-
value: lambdaSg.securityGroupId,
|
|
143
|
-
description: 'Lambda security group ID',
|
|
144
|
-
exportName: 'FunctionLambdaSecurityGroupId',
|
|
145
|
-
});
|
|
146
|
-
new cdk.CfnOutput(this, 'RdsSecurityGroupId', {
|
|
147
|
-
value: rdsSg.securityGroupId,
|
|
148
|
-
description: 'Assign this security group to RDS - stack allows inbound 5432 from Lambda',
|
|
149
|
-
exportName: 'FunctionRdsSecurityGroupId',
|
|
150
|
-
});
|
|
151
|
-
new cdk.CfnOutput(this, 'DbSubnetGroupName', {
|
|
152
|
-
value: dbSubnetGroup.subnetGroupName,
|
|
153
|
-
description: 'Select this DB subnet group when creating RDS in this VPC',
|
|
154
|
-
exportName: 'FunctionDbSubnetGroupName',
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
exports.FunctionStack = FunctionStack;
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L2phdmEtZnVuY3Rpb24vYXdzLWNkay9saWIvZnVuY3Rpb24tc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQW1DO0FBRW5DLCtEQUFpRDtBQUNqRCx1RUFBeUQ7QUFDekQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsMkNBQTZCO0FBUzdCLE1BQWEsYUFBYyxTQUFRLEdBQUcsQ0FBQyxLQUFLO0lBQzFDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNqRCxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFBRSxXQUFXLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7UUFDM0UsTUFBTSxXQUFXLEdBQTJCO1lBQzFDLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUM7UUFFRixvRkFBb0Y7UUFDcEYsSUFBSSxXQUErQixDQUFDO1FBQ3BDLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7Z0JBQzlELFVBQVUsRUFBRSxtQkFBbUIsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDL0MsV0FBVyxFQUFFLHNEQUFzRDtnQkFDbkUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2pFLENBQUMs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QVMsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUU7WUFDL0MsS0FBSyxFQUFFLFFBQVEsQ0FBQyxlQUFlO1lBQy9CLFdBQVcsRUFBRSwwQkFBMEI7WUFDdkMsVUFBVSxFQUFFLCtCQUErQjtTQUM1QyxDQUFDLENBQUM7UUFFSCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQzVDLEtBQUssRUFBRSxLQUFLLENBQUMsZUFBZTtZQUM1QixXQUFXLEVBQUUsMkVBQTJFO1lBQ3hGLFVBQVUsRUFBRSw0QkFBNEI7U0FDekMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUMzQyxLQUFLLEVBQUUsYUFBYSxDQUFDLGVBQWU7WUFDcEMsV0FBVyxFQUFFLDJEQUEyRDtZQUN4RSxVQUFVLEVBQUUsMkJBQTJCO1NBQ3hDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXhJRCxzQ0F3SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBhcGlnYXRld2F5IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5JztcbmltcG9ydCAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyByZHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJkcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uU3RhY2tQcm9wcyBleHRlbmRzIGNkay5TdGFja1Byb3BzIHtcbiAgLyoqIFBvc3RncmVTUUwgY29ubmVjdGlvbiBVUkwgKHNhbWUgZm9ybWF0IGFzIE9DSTogcG9zdGdyZXNxbDovL3VzZXI6cGFzc3dvcmRAaG9zdDpwb3J0L2RibmFtZSkuIFdoZW4gc2V0LCBzdGFjayBjcmVhdGVzIGEgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBhbmQgcGFzc2VzIGl0cyBBUk4gdG8gTGFtYmRhLiBTZXQgUEdfVVJMIGF0IGRlcGxveSB0aW1lLiAqL1xuICByZWFkb25seSBwZ1VybD86IHN0cmluZztcbiAgLyoqIFdoZW4gUEdfVVJMIGlzIG5vdCBzZXQ6IEFSTiBvZiBleGlzdGluZyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IChlLmcuIFJEUy1nZW5lcmF0ZWQgSlNPTiBzZWNyZXQpLiBTZXQgUEdfU0VDUkVUX0FSTiBhdCBkZXBsb3kgdGltZS4gUkRTIGlzIG5vdCBjcmVhdGVkIGJ5IHRoaXMgc3RhY2sg4oCUIGNyZWF0ZSBSRFMgbWFudWFsbHkgaW4gdGhlIHN0YWNrIFZQQyBhbmQgYWxsb3cgdGhlIExhbWJkYSBzZWN1cml0eSBncm91cCBvbiBwb3J0IDU0MzIuICovXG4gIHJlYWRvbmx5IHBnU2VjcmV0QXJuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25TdGFjayBleHRlbmRzIGNkay5TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogRnVuY3Rpb25TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCBwZ1VybCA9IHByb3BzPy5wZ1VybCA/PyBwcm9jZXNzLmVudi5QR19VUkw7XG4gICAgY29uc3QgcGdTZWNyZXRBcm5Gcm9tRW52ID0gcHJvcHM/LnBnU2VjcmV0QXJuID8/IHByb2Nlc3MuZW52LlBHX1NFQ1JFVF9BUk47XG4gICAgY29uc3QgZW52aXJvbm1lbnQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBQTEFURk9STTogJ0FXUycsXG4gICAgfTtcblxuICAgIC8vIFBHIGNvbm5lY3Rpb246IGNyZWF0ZSBzZWNyZXQgZnJvbSBQR19VUkwgKGxpa2UgT0NJKSBvciB1c2UgZXhpc3RpbmcgUEdfU0VDUkVUX0FSTlxuICAgIGxldCBwZ1NlY3JldEFybjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwZ1VybD8udHJpbSgpKSB7XG4gICAgICBjb25zdCBwZ1NlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgJ1BnVXJsU2VjcmV0Jywge1xuICAgICAgICBzZWNyZXROYW1lOiBgZnVuY3Rpb24tcGctdXJsLSR7dGhpcy5zdGFja05hbWV9YCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdQb3N0Z3JlU1FMIGNvbm5lY3Rpb24gVVJMIGZvciBmdW5jdGlvbiAoZnJvbSBQR19VUkwpJyxcbiAgICAgICAgc2VjcmV0U3RyaW5nVmFsdWU6IGNkay5TZWNyZXRWYWx1ZS51bnNhZmVQbGFpblRleHQocGdVcmwudHJpbSgpKSxcbiAgICAgIH0pO1xuICAgICAgcGdTZWNyZXRBcm4gPSBwZ1NlY3JldC5zZWNyZXRBcm47XG4gICAgICBlbnZpcm9ubWVudC5QR19TRUNSRVRfQVJOID0gcGdTZWNyZXRBcm47XG4gICAgfSBlbHNlIGlmIChwZ1NlY3JldEFybkZyb21FbnY/LnRyaW0oKSkge1xuICAgICAgcGdTZWNyZXRBcm4gPSBwZ1NlY3JldEFybkZyb21FbnYudHJpbSgpO1xuICAgICAgZW52aXJvbm1lbnQuUEdfU0VDUkVUX0FSTiA9IHBnU2VjcmV0QXJuO1xuICAgIH1cblxuICAgIC8vIFZQQyBjcmVhdGVkIGJ5IGRlZmF1bHQgKGxpa2UgT0NJIHN0YWNrIFZDTikg4oCUIGNyZWF0ZSBSRFMgbWFudWFsbHkgaW4gdGhpcyBWUEMgYW5kIGFsbG93IExhbWJkYSBzZWN1cml0eSBncm91cCBvbiBwb3J0IDU0MzJcbiAgICBjb25zdCB2cGMgPSBuZXcgZWMyLlZwYyh0aGlzLCAnVnBjJywge1xuICAgICAgbWF4QXpzOiAyLFxuICAgICAgbmF0R2F0ZXdheXM6IDEsXG4gICAgfSk7XG5cbiAgICAvLyBKYXZhIExhbWJkYSBmdW5jdGlvbiAoaW4gVlBDIHByaXZhdGUgc3VibmV0cyBzbyBpdCBjYW4gcmVhY2ggUkRTIGFuZCBBV1MgQVBJcyB2aWEgTkFUKS4gQnVpbGQgSkFSIGZpcnN0IChlLmcuIC4vc2NyaXB0cy9idWlsZC1mdW5jdGlvbi5zaCBhd3MpLlxuICAgIGNvbnN0IGphdmFGdW5jdGlvbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ0phdmFGdW5jdGlvbicsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLkpBVkFfMTEsXG4gICAgICBoYW5kbGVyOiAnY29tLmV4YW1wbGUuZnVuY3Rpb24uYXdzLkF3c0Z1bmN0aW9uSGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9mdW5jdGlvbi1jb2RlL3RhcmdldC90ZXN0LWZ1bmN0aW9uLWF3cy0xLjAuMC5qYXInKVxuICAgICAgKSxcbiAgICAgIG1lbW9yeVNpemU6IDUxMixcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSmF2YSBmdW5jdGlvbiBjb21wYXRpYmxlIHdpdGggQVdTIExhbWJkYSBhbmQgT0NJIEZ1bmN0aW9ucycsXG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIHZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGFtYmRhU2cgPSBqYXZhRnVuY3Rpb24uY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHNbMF0gYXMgZWMyLlNlY3VyaXR5R3JvdXA7XG5cbiAgICAvLyBEZWRpY2F0ZWQgc2VjdXJpdHkgZ3JvdXAgZm9yIFJEUzogYWxsb3cgUG9zdGdyZVNRTCBmcm9tIExhbWJkYSAoYXZvaWRzIGNpcmN1bGFyIGRlcGVuZGVuY3kgZnJvbSBzZWxmLXJlZmVyZW50aWFsIHJ1bGUpXG4gICAgY29uc3QgcmRzU2cgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ1Jkc1NlY3VyaXR5R3JvdXAnLCB7XG4gICAgICB2cGMsXG4gICAgICBkZXNjcmlwdGlvbjogJ1NlY3VyaXR5IGdyb3VwIGZvciBSRFMgLSBhbGxvdyBMYW1iZGEgb24gcG9ydCA1NDMyJyxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSk7XG4gICAgcmRzU2cuYWRkSW5ncmVzc1J1bGUoXG4gICAgICBlYzIuUGVlci5zZWN1cml0eUdyb3VwSWQobGFtYmRhU2cuc2VjdXJpdHlHcm91cElkKSxcbiAgICAgIGVjMi5Qb3J0LnRjcCg1NDMyKSxcbiAgICAgICdBbGxvdyBQb3N0Z3JlU1FMIGZyb20gTGFtYmRhJyxcbiAgICApO1xuXG4gICAgLy8gREIgc3VibmV0IGdyb3VwIGZvciBtYW51YWwgUkRTOiB1c2UgdGhpcyB3aGVuIGNyZWF0aW5nIFJEUyBpbiB0aGUgY29uc29sZS9DTElcbiAgICBjb25zdCBkYlN1Ym5ldEdyb3VwID0gbmV3IHJkcy5TdWJuZXRHcm91cCh0aGlzLCAnRGJTdWJuZXRHcm91cCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJpdmF0ZSBzdWJuZXRzIGZvciBSRFMgKHVzZSB3aGVuIGNyZWF0aW5nIFJEUyBpbiB0aGlzIFZQQyknLFxuICAgICAgdnBjLFxuICAgICAgdnBjU3VibmV0czogeyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH0sXG4gICAgfSk7XG5cbiAgICBpZiAocGdTZWNyZXRBcm4pIHtcbiAgICAgIGNvbnN0IHNlY3JldCA9IHNlY3JldHNtYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0Q29tcGxldGVBcm4odGhpcywgJ1BnU2VjcmV0JywgcGdTZWNyZXRBcm4pO1xuICAgICAgc2VjcmV0LmdyYW50UmVhZChqYXZhRnVuY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIEFQSSBHYXRld2F5IFJFU1QgQVBJXG4gICAgY29uc3QgYXBpID0gbmV3IGFwaWdhdGV3YXkuUmVzdEFwaSh0aGlzLCAnRnVuY3Rpb25BcGknLCB7XG4gICAgICByZXN0QXBpTmFtZTogJ0phdmEgRnVuY3Rpb24gQVBJJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQVBJIEdhdGV3YXkgZm9yIEphdmEgZnVuY3Rpb24nLFxuICAgICAgZGVmYXVsdENvcnNQcmVmbGlnaHRPcHRpb25zOiB7XG4gICAgICAgIGFsbG93T3JpZ2luczogYXBpZ2F0ZXdheS5Db3JzLkFMTF9PUklHSU5TLFxuICAgICAgICBhbGxvd01ldGhvZHM6IGFwaWdhdGV3YXkuQ29ycy5BTExfTUVUSE9EUyxcbiAgICAgICAgYWxsb3dIZWFkZXJzOiBbJ0NvbnRlbnQtVHlwZScsICdYLUFtei1EYXRlJywgJ0F1dGhvcml6YXRpb24nLCAnWC1BcGktS2V5J10sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gTGFtYmRhIGludGVncmF0aW9uXG4gICAgY29uc3QgbGFtYmRhSW50ZWdyYXRpb24gPSBuZXcgYXBpZ2F0ZXdheS5MYW1iZGFJbnRlZ3JhdGlvbihqYXZhRnVuY3Rpb24sIHtcbiAgICAgIHJlcXVlc3RUZW1wbGF0ZXM6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiAneyBcInN0YXR1c0NvZGVcIjogXCIyMDBcIiB9JyB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2luZ2xlIGVuZHBvaW50IHdpdGggcXVlcnkgcGFyYW1ldGVyIHJvdXRpbmdcbiAgICAvLyBVc2VzIHF1ZXJ5IHBhcmFtZXRlciA/YWN0aW9uPWhlbGxvfGVjaG98aW5mbyBpbnN0ZWFkIG9mIHBhdGgtYmFzZWQgcm91dGVzXG4gICAgYXBpLnJvb3QuYWRkTWV0aG9kKCdHRVQnLCBsYW1iZGFJbnRlZ3JhdGlvbik7XG4gICAgYXBpLnJvb3QuYWRkTWV0aG9kKCdQT1NUJywgbGFtYmRhSW50ZWdyYXRpb24pO1xuXG4gICAgLy8gT3V0cHV0c1xuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdBcGlVcmwnLCB7XG4gICAgICB2YWx1ZTogYXBpLnVybCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQVBJIEdhdGV3YXkgZW5kcG9pbnQgVVJMJyxcbiAgICAgIGV4cG9ydE5hbWU6ICdGdW5jdGlvbkFwaVVybCcsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnRnVuY3Rpb25OYW1lJywge1xuICAgICAgdmFsdWU6IGphdmFGdW5jdGlvbi5mdW5jdGlvbk5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogJ0xhbWJkYSBmdW5jdGlvbiBuYW1lJyxcbiAgICAgIGV4cG9ydE5hbWU6ICdGdW5jdGlvbk5hbWUnLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ0Z1bmN0aW9uQXJuJywge1xuICAgICAgdmFsdWU6IGphdmFGdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICAgIGRlc2NyaXB0aW9uOiAnTGFtYmRhIGZ1bmN0aW9uIEFSTicsXG4gICAgICBleHBvcnROYW1lOiAnRnVuY3Rpb25Bcm4nLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ1ZwY0lkJywge1xuICAgICAgdmFsdWU6IHZwYy52cGNJZCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVlBDIElEIOKAlCBjcmVhdGUgUkRTIGluIHRoaXMgVlBDJyxcbiAgICAgIGV4cG9ydE5hbWU6ICdGdW5jdGlvblZwY0lkJyxcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdMYW1iZGFTZWN1cml0eUdyb3VwSWQnLCB7XG4gICAgICB2YWx1ZTogbGFtYmRhU2cuc2VjdXJpdHlHcm91cElkLFxuICAgICAgZGVzY3JpcHRpb246ICdMYW1iZGEgc2VjdXJpdHkgZ3JvdXAgSUQnLFxuICAgICAgZXhwb3J0TmFtZTogJ0Z1bmN0aW9uTGFtYmRhU2VjdXJpdHlHcm91cElkJyxcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdSZHNTZWN1cml0eUdyb3VwSWQnLCB7XG4gICAgICB2YWx1ZTogcmRzU2cuc2VjdXJpdHlHcm91cElkLFxuICAgICAgZGVzY3JpcHRpb246ICdBc3NpZ24gdGhpcyBzZWN1cml0eSBncm91cCB0byBSRFMgLSBzdGFjayBhbGxvd3MgaW5ib3VuZCA1NDMyIGZyb20gTGFtYmRhJyxcbiAgICAgIGV4cG9ydE5hbWU6ICdGdW5jdGlvblJkc1NlY3VyaXR5R3JvdXBJZCcsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnRGJTdWJuZXRHcm91cE5hbWUnLCB7XG4gICAgICB2YWx1ZTogZGJTdWJuZXRHcm91cC5zdWJuZXRHcm91cE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1NlbGVjdCB0aGlzIERCIHN1Ym5ldCBncm91cCB3aGVuIGNyZWF0aW5nIFJEUyBpbiB0aGlzIFZQQycsXG4gICAgICBleHBvcnROYW1lOiAnRnVuY3Rpb25EYlN1Ym5ldEdyb3VwTmFtZScsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.TestFunctionStack = void 0;
|
|
37
|
-
const cdk = __importStar(require("aws-cdk-lib"));
|
|
38
|
-
const lambda = __importStar(require("aws-cdk-lib/aws-lambda"));
|
|
39
|
-
const apigateway = __importStar(require("aws-cdk-lib/aws-apigateway"));
|
|
40
|
-
const path = __importStar(require("path"));
|
|
41
|
-
class TestFunctionStack extends cdk.Stack {
|
|
42
|
-
constructor(scope, id, props) {
|
|
43
|
-
super(scope, id, props);
|
|
44
|
-
// Java Lambda function
|
|
45
|
-
// Uses AwsFunctionHandler for platform-specific implementation
|
|
46
|
-
const javaFunction = new lambda.Function(this, 'TestJavaFunction', {
|
|
47
|
-
runtime: lambda.Runtime.JAVA_11,
|
|
48
|
-
handler: 'com.example.function.aws.AwsFunctionHandler',
|
|
49
|
-
code: lambda.Code.fromAsset(path.join(__dirname, '../../function-code/target/test-function-aws-1.0.0.jar')),
|
|
50
|
-
memorySize: 512,
|
|
51
|
-
timeout: cdk.Duration.seconds(30),
|
|
52
|
-
description: 'Test Java function compatible with AWS Lambda and OCI Functions',
|
|
53
|
-
environment: {
|
|
54
|
-
PLATFORM: 'AWS',
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
// API Gateway REST API
|
|
58
|
-
const api = new apigateway.RestApi(this, 'TestFunctionApi', {
|
|
59
|
-
restApiName: 'Test Java Function API',
|
|
60
|
-
description: 'API Gateway for test Java function',
|
|
61
|
-
defaultCorsPreflightOptions: {
|
|
62
|
-
allowOrigins: apigateway.Cors.ALL_ORIGINS,
|
|
63
|
-
allowMethods: apigateway.Cors.ALL_METHODS,
|
|
64
|
-
allowHeaders: ['Content-Type', 'X-Amz-Date', 'Authorization', 'X-Api-Key'],
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
// Lambda integration
|
|
68
|
-
const lambdaIntegration = new apigateway.LambdaIntegration(javaFunction, {
|
|
69
|
-
requestTemplates: { 'application/json': '{ "statusCode": "200" }' },
|
|
70
|
-
});
|
|
71
|
-
// Single endpoint with query parameter routing
|
|
72
|
-
// Uses query parameter ?action=hello|echo|info instead of path-based routes
|
|
73
|
-
api.root.addMethod('GET', lambdaIntegration);
|
|
74
|
-
api.root.addMethod('POST', lambdaIntegration);
|
|
75
|
-
// Outputs
|
|
76
|
-
new cdk.CfnOutput(this, 'ApiUrl', {
|
|
77
|
-
value: api.url,
|
|
78
|
-
description: 'API Gateway endpoint URL',
|
|
79
|
-
exportName: 'TestFunctionApiUrl',
|
|
80
|
-
});
|
|
81
|
-
new cdk.CfnOutput(this, 'FunctionName', {
|
|
82
|
-
value: javaFunction.functionName,
|
|
83
|
-
description: 'Lambda function name',
|
|
84
|
-
exportName: 'TestFunctionName',
|
|
85
|
-
});
|
|
86
|
-
new cdk.CfnOutput(this, 'FunctionArn', {
|
|
87
|
-
value: javaFunction.functionArn,
|
|
88
|
-
description: 'Lambda function ARN',
|
|
89
|
-
exportName: 'TestFunctionArn',
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
exports.TestFunctionStack = TestFunctionStack;
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1mdW5jdGlvbi1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvamF2YS1mdW5jdGlvbi9hd3MtY2RrL2xpYi90ZXN0LWZ1bmN0aW9uLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFtQztBQUVuQywrREFBaUQ7QUFDakQsdUVBQXlEO0FBQ3pELDJDQUE2QjtBQUU3QixNQUFhLGlCQUFrQixTQUFRLEdBQUcsQ0FBQyxLQUFLO0lBQzlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsdUJBQXVCO1FBQ3ZCLCtEQUErRDtRQUMvRCxNQUFNLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ2pFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87WUFDL0IsT0FBTyxFQUFFLDZDQUE2QztZQUN0RCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHdEQUF3RCxDQUFDLENBQy9FO1lBQ0QsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2pDLFdBQVcsRUFBRSxpRUFBaUU7WUFDOUUsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxLQUFLO2FBQ2hCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsdUJBQXVCO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDMUQsV0FBVyxFQUFFLHdCQUF3QjtZQUNyQyxXQUFXLEVBQUUsb0NBQW9DO1lBQ2pELDJCQUEyQixFQUFFO2dCQUMzQixZQUFZLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXO2dCQUN6QyxZQUFZLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXO2dCQUN6QyxZQUFZLEVBQUUsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUM7YUFDM0U7U0FDRixDQUFDLENBQUM7UUFFSCxxQkFBcUI7UUFDckIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUU7WUFDdkUsZ0JBQWdCLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRTtTQUNwRSxDQUFDLENBQUM7UUFFSCwrQ0FBK0M7UUFDL0MsNEVBQTRFO1FBQzVFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRTlDLFVBQVU7UUFDVixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNoQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUc7WUFDZCxXQUFXLEVBQUUsMEJBQTBCO1lBQ3ZDLFVBQVUsRUFBRSxvQkFBb0I7U0FDakMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDdEMsS0FBSyxFQUFFLFlBQVksQ0FBQyxZQUFZO1lBQ2hDLFdBQVcsRUFBRSxzQkFBc0I7WUFDbkMsVUFBVSxFQUFFLGtCQUFrQjtTQUMvQixDQUFDLENBQUM7UUFFSCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNyQyxLQUFLLEVBQUUsWUFBWSxDQUFDLFdBQVc7WUFDL0IsV0FBVyxFQUFFLHFCQUFxQjtZQUNsQyxVQUFVLEVBQUUsaUJBQWlCO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTVERCw4Q0E0REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBhcGlnYXRld2F5IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5JztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmV4cG9ydCBjbGFzcyBUZXN0RnVuY3Rpb25TdGFjayBleHRlbmRzIGNkay5TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogY2RrLlN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIEphdmEgTGFtYmRhIGZ1bmN0aW9uXG4gICAgLy8gVXNlcyBBd3NGdW5jdGlvbkhhbmRsZXIgZm9yIHBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgY29uc3QgamF2YUZ1bmN0aW9uID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnVGVzdEphdmFGdW5jdGlvbicsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLkpBVkFfMTEsXG4gICAgICBoYW5kbGVyOiAnY29tLmV4YW1wbGUuZnVuY3Rpb24uYXdzLkF3c0Z1bmN0aW9uSGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9mdW5jdGlvbi1jb2RlL3RhcmdldC90ZXN0LWZ1bmN0aW9uLWF3cy0xLjAuMC5qYXInKVxuICAgICAgKSxcbiAgICAgIG1lbW9yeVNpemU6IDUxMixcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGVzdCBKYXZhIGZ1bmN0aW9uIGNvbXBhdGlibGUgd2l0aCBBV1MgTGFtYmRhIGFuZCBPQ0kgRnVuY3Rpb25zJyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFBMQVRGT1JNOiAnQVdTJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBUEkgR2F0ZXdheSBSRVNUIEFQSVxuICAgIGNvbnN0IGFwaSA9IG5ldyBhcGlnYXRld2F5LlJlc3RBcGkodGhpcywgJ1Rlc3RGdW5jdGlvbkFwaScsIHtcbiAgICAgIHJlc3RBcGlOYW1lOiAnVGVzdCBKYXZhIEZ1bmN0aW9uIEFQSScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0FQSSBHYXRld2F5IGZvciB0ZXN0IEphdmEgZnVuY3Rpb24nLFxuICAgICAgZGVmYXVsdENvcnNQcmVmbGlnaHRPcHRpb25zOiB7XG4gICAgICAgIGFsbG93T3JpZ2luczogYXBpZ2F0ZXdheS5Db3JzLkFMTF9PUklHSU5TLFxuICAgICAgICBhbGxvd01ldGhvZHM6IGFwaWdhdGV3YXkuQ29ycy5BTExfTUVUSE9EUyxcbiAgICAgICAgYWxsb3dIZWFkZXJzOiBbJ0NvbnRlbnQtVHlwZScsICdYLUFtei1EYXRlJywgJ0F1dGhvcml6YXRpb24nLCAnWC1BcGktS2V5J10sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gTGFtYmRhIGludGVncmF0aW9uXG4gICAgY29uc3QgbGFtYmRhSW50ZWdyYXRpb24gPSBuZXcgYXBpZ2F0ZXdheS5MYW1iZGFJbnRlZ3JhdGlvbihqYXZhRnVuY3Rpb24sIHtcbiAgICAgIHJlcXVlc3RUZW1wbGF0ZXM6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiAneyBcInN0YXR1c0NvZGVcIjogXCIyMDBcIiB9JyB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2luZ2xlIGVuZHBvaW50IHdpdGggcXVlcnkgcGFyYW1ldGVyIHJvdXRpbmdcbiAgICAvLyBVc2VzIHF1ZXJ5IHBhcmFtZXRlciA/YWN0aW9uPWhlbGxvfGVjaG98aW5mbyBpbnN0ZWFkIG9mIHBhdGgtYmFzZWQgcm91dGVzXG4gICAgYXBpLnJvb3QuYWRkTWV0aG9kKCdHRVQnLCBsYW1iZGFJbnRlZ3JhdGlvbik7XG4gICAgYXBpLnJvb3QuYWRkTWV0aG9kKCdQT1NUJywgbGFtYmRhSW50ZWdyYXRpb24pO1xuXG4gICAgLy8gT3V0cHV0c1xuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdBcGlVcmwnLCB7XG4gICAgICB2YWx1ZTogYXBpLnVybCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQVBJIEdhdGV3YXkgZW5kcG9pbnQgVVJMJyxcbiAgICAgIGV4cG9ydE5hbWU6ICdUZXN0RnVuY3Rpb25BcGlVcmwnLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ0Z1bmN0aW9uTmFtZScsIHtcbiAgICAgIHZhbHVlOiBqYXZhRnVuY3Rpb24uZnVuY3Rpb25OYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdMYW1iZGEgZnVuY3Rpb24gbmFtZScsXG4gICAgICBleHBvcnROYW1lOiAnVGVzdEZ1bmN0aW9uTmFtZScsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnRnVuY3Rpb25Bcm4nLCB7XG4gICAgICB2YWx1ZTogamF2YUZ1bmN0aW9uLmZ1bmN0aW9uQXJuLFxuICAgICAgZGVzY3JpcHRpb246ICdMYW1iZGEgZnVuY3Rpb24gQVJOJyxcbiAgICAgIGV4cG9ydE5hbWU6ICdUZXN0RnVuY3Rpb25Bcm4nLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|