cdk-turso 0.3.4 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +66 -11
- package/AGENTS.md +128 -125
- package/API.md +48 -0
- package/README.md +7 -1
- package/lib/handler/index.js +41 -2
- package/lib/turso-auth-token.d.ts +7 -0
- package/lib/turso-auth-token.js +6 -3
- package/lib/turso-database.d.ts +16 -0
- package/lib/turso-database.js +8 -2
- package/lib/turso-provider.js +1 -1
- package/package.json +1 -1
- package/CLAUDE.md +0 -1
package/.jsii
CHANGED
|
@@ -3992,7 +3992,7 @@
|
|
|
3992
3992
|
},
|
|
3993
3993
|
"name": "cdk-turso",
|
|
3994
3994
|
"readme": {
|
|
3995
|
-
"markdown": "# CDK Turso\n\nCDK constructs to create [Turso cloud](https://docs.turso.tech/turso-cloud) databases and manage auth tokens.\n\n## Installation\n\n```bash\nnpm install cdk-turso\n```\n\n## Usage\n\nCreate a `TursoProvider` with your API token:\n\n```typescript\nimport { Stack } from 'aws-cdk-lib';\nimport { ParameterType, StringParameter } from 'aws-cdk-lib/aws-ssm';\nimport { TursoProvider, TursoDatabase, TursoAuthToken } from 'cdk-turso';\n\nconst stack = new Stack();\n\n// SSM Parameter containing your Turso API token (must be a SecureString)\nconst apiToken = new StringParameter(stack, 'TursoApiToken', {\n parameterName: '/turso/api-token',\n stringValue: 'your-api-token',\n type: ParameterType.SECURE_STRING,\n});\n\n// Create the provider (one per stack)\nconst provider = new TursoProvider(stack, 'TursoProvider', {\n apiToken,\n});\n\nconst database = new TursoDatabase(stack, 'Database', {\n provider,\n databaseName: 'my-database',\n group: 'group-name',\n organizationSlug: 'my-org',\n});\n\n// Access database attributes\ndatabase.dbId; // Database ID\ndatabase.hostname; // Database hostname (e.g., my-database-my-org.turso.io)\ndatabase.databaseName; // Database name\n```\n\nIf you run a shared provider in another stack, import it by service token:\n\n```typescript\nconst provider = TursoProvider.fromServiceToken(\n stack,\n 'TursoProvider',\n 'arn:aws:lambda:us-east-1:123456789012:function:shared-turso-provider',\n);\n```\n\n### Auth Token\n\nGenerate a database auth token and store it as a SecureString in SSM Parameter Store:\n\n```typescript\nconst authToken = new TursoAuthToken(stack, 'AuthToken', {\n provider,\n databaseName: database.databaseName,\n organizationSlug: 'my-org',\n parameterName: '/turso/db-token',\n expiration: '2w', // optional, default: 'never'\n authorization: 'read-only', // optional, default: 'full-access'\n});\n\n// The SSM parameter name where the JWT is stored\nauthToken.parameterName;\n```\n\n## API\n\n### TursoProviderProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `apiToken` | `ssm.IParameter` | Yes | SSM Parameter containing the Turso platform API token (must be SecureString) |\n| `logGroup` | `ILogGroup` | No | Optional CloudWatch log group for the Lambda handler |\n\n### TursoProvider\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `handler` | `Function` | The Lambda function backing all Turso custom resources (for attaching IAM permissions) |\n| `serviceToken` | `string` | The CDK custom-resource provider service token |\n\nStatic method:\n\n| Method | Returns | Description |\n|--------|---------|-------------|\n| `fromServiceToken(scope, id, serviceToken)` | `ITursoProvider` | Imports an existing Turso custom-resource provider |\n\n### ITursoProvider\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `serviceToken` | `string` | The CDK custom-resource provider service token |\n\n### TursoDatabaseProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `provider` | `ITursoProvider` | Yes | The Turso provider to use for this database |\n| `databaseName` | `string` | Yes | Database name (lowercase, numbers, dashes only, max 64 chars) |\n| `group` | `string` | Yes | Turso group name (must already exist) |\n| `organizationSlug` | `string` | Yes | Organization slug |\n| `sizeLimit` | `string` | No | Size limit (e.g., '256mb') |\n| `seed` | `TursoDatabaseSeed` | No | Database seed configuration |\n| `encryption` | `TursoDatabaseEncryption` | No | Encryption configuration |\n\n### TursoDatabaseSeed\n\n```typescript\ninterface TursoDatabaseSeed {\n readonly type: string; // Seed type (e.g., 'schema')\n readonly name: string; // Seed name\n readonly timestamp?: string; // Optional timestamp\n}\n```\n\n### TursoDatabaseEncryption\n\n```typescript\ninterface TursoDatabaseEncryption {\n readonly encryptionKey: string; // KMS key ARN\n readonly encryptionCipher: string; // Cipher type (e.g., 'AES')\n}\n```\n\n### TursoDatabase\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `dbId` | `string` | Turso database ID |\n| `hostname` | `string` | DNS hostname (e.g., `my-database-my-org.turso.io`) for libSQL/HTTP connections |\n| `databaseName` | `string` | Database name |\n\n### TursoAuthTokenProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `provider` | `ITursoProvider` | Yes | The Turso provider to use for this auth token |\n| `databaseName` | `string` | Yes | The name of the Turso database to create an auth token for |\n| `organizationSlug` | `string` | Yes | The Turso organization slug that owns the database |\n| `parameterName` | `string` | Yes | SSM parameter name where the generated JWT will be stored as a SecureString |\n| `expiration` | `string` | No | Token expiry (e.g., `'2w'`, `'1d30m'`). Default: `'never'` |\n| `authorization` | `string` | No | `'full-access'` or `'read-only'`. Default: `'full-access'` |\n\n### TursoAuthToken\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `parameterName` | `string` | The SSM parameter name where the auth token is stored |\n\n## Requirements\n\n- Node.js 24.x runtime for the Lambda handler\n- The Lambda handler requires the AWS SDK for JavaScript v3 (pre-installed in Lambda runtime)\n"
|
|
3995
|
+
"markdown": "# CDK Turso\n\nCDK constructs to create [Turso cloud](https://docs.turso.tech/turso-cloud) databases and manage auth tokens.\n\n## Installation\n\n```bash\nnpm install cdk-turso\n```\n\n## Usage\n\nCreate a `TursoProvider` with your API token:\n\n```typescript\nimport { RemovalPolicy, Stack } from 'aws-cdk-lib';\nimport { ParameterType, StringParameter } from 'aws-cdk-lib/aws-ssm';\nimport { TursoProvider, TursoDatabase, TursoAuthToken } from 'cdk-turso';\n\nconst stack = new Stack();\n\n// SSM Parameter containing your Turso API token (must be a SecureString)\nconst apiToken = new StringParameter(stack, 'TursoApiToken', {\n parameterName: '/turso/api-token',\n stringValue: 'your-api-token',\n type: ParameterType.SECURE_STRING,\n});\n\n// Create the provider (one per stack)\nconst provider = new TursoProvider(stack, 'TursoProvider', {\n apiToken,\n});\n\nconst database = new TursoDatabase(stack, 'Database', {\n provider,\n databaseName: 'my-database',\n group: 'group-name',\n organizationSlug: 'my-org',\n adopt: true, // optional: adopt existing database if it already exists\n removalPolicy: RemovalPolicy.RETAIN, // optional: keep DB on stack delete\n});\n\n// Access database attributes\ndatabase.dbId; // Database ID\ndatabase.hostname; // Database hostname (e.g., my-database-my-org.turso.io)\ndatabase.databaseName; // Database name\n```\n\nIf you run a shared provider in another stack, import it by service token:\n\n```typescript\nconst provider = TursoProvider.fromServiceToken(\n stack,\n 'TursoProvider',\n 'arn:aws:lambda:us-east-1:123456789012:function:shared-turso-provider',\n);\n```\n\n### Auth Token\n\nGenerate a database auth token and store it as a SecureString in SSM Parameter Store:\n\n```typescript\nconst authToken = new TursoAuthToken(stack, 'AuthToken', {\n provider,\n databaseName: database.databaseName,\n organizationSlug: 'my-org',\n parameterName: '/turso/db-token',\n expiration: '2w', // optional, default: 'never'\n authorization: 'read-only', // optional, default: 'full-access'\n removalPolicy: RemovalPolicy.RETAIN, // optional: keep SSM parameter\n});\n\n// The SSM parameter name where the JWT is stored\nauthToken.parameterName;\n```\n\n## API\n\n### TursoProviderProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `apiToken` | `ssm.IParameter` | Yes | SSM Parameter containing the Turso platform API token (must be SecureString) |\n| `logGroup` | `ILogGroup` | No | Optional CloudWatch log group for the Lambda handler |\n\n### TursoProvider\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `handler` | `Function` | The Lambda function backing all Turso custom resources (for attaching IAM permissions) |\n| `serviceToken` | `string` | The CDK custom-resource provider service token |\n\nStatic method:\n\n| Method | Returns | Description |\n|--------|---------|-------------|\n| `fromServiceToken(scope, id, serviceToken)` | `ITursoProvider` | Imports an existing Turso custom-resource provider |\n\n### ITursoProvider\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `serviceToken` | `string` | The CDK custom-resource provider service token |\n\n### TursoDatabaseProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `provider` | `ITursoProvider` | Yes | The Turso provider to use for this database |\n| `databaseName` | `string` | Yes | Database name (lowercase, numbers, dashes only, max 64 chars) |\n| `group` | `string` | Yes | Turso group name (must already exist) |\n| `organizationSlug` | `string` | Yes | Organization slug |\n| `sizeLimit` | `string` | No | Size limit (e.g., '256mb') |\n| `seed` | `TursoDatabaseSeed` | No | Database seed configuration |\n| `encryption` | `TursoDatabaseEncryption` | No | Encryption configuration |\n| `adopt` | `boolean` | No | On create, adopt an existing database when create returns \"already exists\" |\n| `removalPolicy` | `RemovalPolicy` | No | Custom resource removal policy (for example `RemovalPolicy.RETAIN`) |\n\n### TursoDatabaseSeed\n\n```typescript\ninterface TursoDatabaseSeed {\n readonly type: string; // Seed type (e.g., 'schema')\n readonly name: string; // Seed name\n readonly timestamp?: string; // Optional timestamp\n}\n```\n\n### TursoDatabaseEncryption\n\n```typescript\ninterface TursoDatabaseEncryption {\n readonly encryptionKey: string; // KMS key ARN\n readonly encryptionCipher: string; // Cipher type (e.g., 'AES')\n}\n```\n\n### TursoDatabase\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `dbId` | `string` | Turso database ID |\n| `hostname` | `string` | DNS hostname (e.g., `my-database-my-org.turso.io`) for libSQL/HTTP connections |\n| `databaseName` | `string` | Database name |\n\n### TursoAuthTokenProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `provider` | `ITursoProvider` | Yes | The Turso provider to use for this auth token |\n| `databaseName` | `string` | Yes | The name of the Turso database to create an auth token for |\n| `organizationSlug` | `string` | Yes | The Turso organization slug that owns the database |\n| `parameterName` | `string` | Yes | SSM parameter name where the generated JWT will be stored as a SecureString |\n| `expiration` | `string` | No | Token expiry (e.g., `'2w'`, `'1d30m'`). Default: `'never'` |\n| `authorization` | `string` | No | `'full-access'` or `'read-only'`. Default: `'full-access'` |\n| `removalPolicy` | `RemovalPolicy` | No | Custom resource removal policy (for example `RemovalPolicy.RETAIN`) |\n\n### TursoAuthToken\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `parameterName` | `string` | The SSM parameter name where the auth token is stored |\n\n## Requirements\n\n- Node.js 24.x runtime for the Lambda handler\n- The Lambda handler requires the AWS SDK for JavaScript v3 (pre-installed in Lambda runtime)\n"
|
|
3996
3996
|
},
|
|
3997
3997
|
"repository": {
|
|
3998
3998
|
"type": "git",
|
|
@@ -4051,7 +4051,7 @@
|
|
|
4051
4051
|
},
|
|
4052
4052
|
"locationInModule": {
|
|
4053
4053
|
"filename": "src/turso-auth-token.ts",
|
|
4054
|
-
"line":
|
|
4054
|
+
"line": 53
|
|
4055
4055
|
},
|
|
4056
4056
|
"parameters": [
|
|
4057
4057
|
{
|
|
@@ -4077,7 +4077,7 @@
|
|
|
4077
4077
|
"kind": "class",
|
|
4078
4078
|
"locationInModule": {
|
|
4079
4079
|
"filename": "src/turso-auth-token.ts",
|
|
4080
|
-
"line":
|
|
4080
|
+
"line": 47
|
|
4081
4081
|
},
|
|
4082
4082
|
"name": "TursoAuthToken",
|
|
4083
4083
|
"properties": [
|
|
@@ -4089,7 +4089,7 @@
|
|
|
4089
4089
|
"immutable": true,
|
|
4090
4090
|
"locationInModule": {
|
|
4091
4091
|
"filename": "src/turso-auth-token.ts",
|
|
4092
|
-
"line":
|
|
4092
|
+
"line": 51
|
|
4093
4093
|
},
|
|
4094
4094
|
"name": "parameterName",
|
|
4095
4095
|
"type": {
|
|
@@ -4211,6 +4211,24 @@
|
|
|
4211
4211
|
"type": {
|
|
4212
4212
|
"primitive": "string"
|
|
4213
4213
|
}
|
|
4214
|
+
},
|
|
4215
|
+
{
|
|
4216
|
+
"abstract": true,
|
|
4217
|
+
"docs": {
|
|
4218
|
+
"remarks": "Set to `RemovalPolicy.RETAIN` to keep the SSM parameter on stack\ndeletion.",
|
|
4219
|
+
"stability": "stable",
|
|
4220
|
+
"summary": "Removal policy for the underlying custom resource."
|
|
4221
|
+
},
|
|
4222
|
+
"immutable": true,
|
|
4223
|
+
"locationInModule": {
|
|
4224
|
+
"filename": "src/turso-auth-token.ts",
|
|
4225
|
+
"line": 44
|
|
4226
|
+
},
|
|
4227
|
+
"name": "removalPolicy",
|
|
4228
|
+
"optional": true,
|
|
4229
|
+
"type": {
|
|
4230
|
+
"fqn": "aws-cdk-lib.RemovalPolicy"
|
|
4231
|
+
}
|
|
4214
4232
|
}
|
|
4215
4233
|
],
|
|
4216
4234
|
"symbolId": "src/turso-auth-token:TursoAuthTokenProps"
|
|
@@ -4228,7 +4246,7 @@
|
|
|
4228
4246
|
},
|
|
4229
4247
|
"locationInModule": {
|
|
4230
4248
|
"filename": "src/turso-database.ts",
|
|
4231
|
-
"line":
|
|
4249
|
+
"line": 52
|
|
4232
4250
|
},
|
|
4233
4251
|
"parameters": [
|
|
4234
4252
|
{
|
|
@@ -4254,7 +4272,7 @@
|
|
|
4254
4272
|
"kind": "class",
|
|
4255
4273
|
"locationInModule": {
|
|
4256
4274
|
"filename": "src/turso-database.ts",
|
|
4257
|
-
"line":
|
|
4275
|
+
"line": 43
|
|
4258
4276
|
},
|
|
4259
4277
|
"name": "TursoDatabase",
|
|
4260
4278
|
"properties": [
|
|
@@ -4265,7 +4283,7 @@
|
|
|
4265
4283
|
"immutable": true,
|
|
4266
4284
|
"locationInModule": {
|
|
4267
4285
|
"filename": "src/turso-database.ts",
|
|
4268
|
-
"line":
|
|
4286
|
+
"line": 50
|
|
4269
4287
|
},
|
|
4270
4288
|
"name": "databaseName",
|
|
4271
4289
|
"type": {
|
|
@@ -4279,7 +4297,7 @@
|
|
|
4279
4297
|
"immutable": true,
|
|
4280
4298
|
"locationInModule": {
|
|
4281
4299
|
"filename": "src/turso-database.ts",
|
|
4282
|
-
"line":
|
|
4300
|
+
"line": 44
|
|
4283
4301
|
},
|
|
4284
4302
|
"name": "dbId",
|
|
4285
4303
|
"type": {
|
|
@@ -4294,7 +4312,7 @@
|
|
|
4294
4312
|
"immutable": true,
|
|
4295
4313
|
"locationInModule": {
|
|
4296
4314
|
"filename": "src/turso-database.ts",
|
|
4297
|
-
"line":
|
|
4315
|
+
"line": 49
|
|
4298
4316
|
},
|
|
4299
4317
|
"name": "hostname",
|
|
4300
4318
|
"type": {
|
|
@@ -4425,6 +4443,25 @@
|
|
|
4425
4443
|
"fqn": "cdk-turso.ITursoProvider"
|
|
4426
4444
|
}
|
|
4427
4445
|
},
|
|
4446
|
+
{
|
|
4447
|
+
"abstract": true,
|
|
4448
|
+
"docs": {
|
|
4449
|
+
"default": "false",
|
|
4450
|
+
"remarks": "This flag is only used during Create requests.",
|
|
4451
|
+
"stability": "stable",
|
|
4452
|
+
"summary": "If true, the provider will adopt an existing Turso database when creation reports that the database already exists."
|
|
4453
|
+
},
|
|
4454
|
+
"immutable": true,
|
|
4455
|
+
"locationInModule": {
|
|
4456
|
+
"filename": "src/turso-database.ts",
|
|
4457
|
+
"line": 33
|
|
4458
|
+
},
|
|
4459
|
+
"name": "adopt",
|
|
4460
|
+
"optional": true,
|
|
4461
|
+
"type": {
|
|
4462
|
+
"primitive": "boolean"
|
|
4463
|
+
}
|
|
4464
|
+
},
|
|
4428
4465
|
{
|
|
4429
4466
|
"abstract": true,
|
|
4430
4467
|
"docs": {
|
|
@@ -4441,6 +4478,24 @@
|
|
|
4441
4478
|
"fqn": "cdk-turso.TursoDatabaseEncryption"
|
|
4442
4479
|
}
|
|
4443
4480
|
},
|
|
4481
|
+
{
|
|
4482
|
+
"abstract": true,
|
|
4483
|
+
"docs": {
|
|
4484
|
+
"remarks": "Set to `RemovalPolicy.RETAIN` to keep the Turso database on stack\ndeletion.",
|
|
4485
|
+
"stability": "stable",
|
|
4486
|
+
"summary": "Removal policy for the underlying custom resource."
|
|
4487
|
+
},
|
|
4488
|
+
"immutable": true,
|
|
4489
|
+
"locationInModule": {
|
|
4490
|
+
"filename": "src/turso-database.ts",
|
|
4491
|
+
"line": 40
|
|
4492
|
+
},
|
|
4493
|
+
"name": "removalPolicy",
|
|
4494
|
+
"optional": true,
|
|
4495
|
+
"type": {
|
|
4496
|
+
"fqn": "aws-cdk-lib.RemovalPolicy"
|
|
4497
|
+
}
|
|
4498
|
+
},
|
|
4444
4499
|
{
|
|
4445
4500
|
"abstract": true,
|
|
4446
4501
|
"docs": {
|
|
@@ -4713,6 +4768,6 @@
|
|
|
4713
4768
|
"symbolId": "src/turso-provider:TursoProviderProps"
|
|
4714
4769
|
}
|
|
4715
4770
|
},
|
|
4716
|
-
"version": "0.
|
|
4717
|
-
"fingerprint": "
|
|
4771
|
+
"version": "0.4.1",
|
|
4772
|
+
"fingerprint": "WHKzvJeCw9C/i+shTTkKOW2J2EX8q9lly9Rq/iIDggQ="
|
|
4718
4773
|
}
|
package/AGENTS.md
CHANGED
|
@@ -1,146 +1,149 @@
|
|
|
1
1
|
# AGENTS.md
|
|
2
|
-
|
|
3
|
-
Guidance for AI coding agents working in this repository.
|
|
2
|
+
Guidance for agentic coding assistants working in this repository.
|
|
4
3
|
|
|
5
4
|
## Project Overview
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
`cdk-turso` is a JSII-based AWS CDK construct library for Turso resources,
|
|
6
|
+
implemented through Lambda-backed CloudFormation custom resources.
|
|
7
|
+
- Main constructs: `TursoProvider`, `TursoDatabase`, `TursoAuthToken`
|
|
8
|
+
- Language: TypeScript with strict settings
|
|
9
|
+
- Build system: projen (`AwsCdkConstructLibrary`)
|
|
10
|
+
- Lint/format: Biome (ESLint is disabled)
|
|
11
|
+
|
|
12
|
+
## Build, Lint, and Test Commands
|
|
13
|
+
Use npm/projen tasks from the repo root.
|
|
11
14
|
```bash
|
|
12
|
-
npm run build #
|
|
13
|
-
npm run compile # jsii
|
|
14
|
-
npm run test #
|
|
15
|
-
npm run test:watch #
|
|
16
|
-
npm run watch # jsii
|
|
17
|
-
npx projen biome #
|
|
18
|
-
npx projen #
|
|
15
|
+
npm run build # compile -> docgen -> test -> package
|
|
16
|
+
npm run compile # jsii compile + esbuild bundle
|
|
17
|
+
npm run test # jest + biome
|
|
18
|
+
npm run test:watch # jest watch mode
|
|
19
|
+
npm run watch # jsii watch mode
|
|
20
|
+
npx projen biome # biome check/format with --write
|
|
21
|
+
npx projen # regenerate projen-managed files
|
|
19
22
|
```
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
### Single-test execution (important)
|
|
25
|
+
Run one test file:
|
|
22
26
|
```bash
|
|
23
27
|
npx jest --passWithNoTests test/handler.test.ts
|
|
24
28
|
```
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
Run one named test:
|
|
30
|
+
```bash
|
|
31
|
+
npx jest --passWithNoTests test/handler.test.ts -t "create with adopt"
|
|
32
|
+
```
|
|
33
|
+
Run construct tests only:
|
|
34
|
+
```bash
|
|
35
|
+
npx jest --passWithNoTests test/turso-database.test.ts
|
|
32
36
|
```
|
|
37
|
+
|
|
38
|
+
## Projen and Generated Files
|
|
39
|
+
Do not manually edit generated files; edit `.projenrc.ts`, then run
|
|
40
|
+
`npx projen`.
|
|
41
|
+
Common generated files include:
|
|
42
|
+
- `package.json`
|
|
43
|
+
- `biome.jsonc`
|
|
44
|
+
- `tsconfig.json`
|
|
45
|
+
- `tsconfig.dev.json`
|
|
46
|
+
- `.github/workflows/*`
|
|
47
|
+
- `.mergify.yml`
|
|
48
|
+
- files with `~~ Generated by projen`
|
|
49
|
+
`API.md` is generated by `jsii-docgen` during `npm run build`.
|
|
50
|
+
|
|
51
|
+
## Repository Layout
|
|
52
|
+
```text
|
|
33
53
|
src/
|
|
34
|
-
index.ts #
|
|
35
|
-
turso-
|
|
36
|
-
turso-
|
|
37
|
-
turso-
|
|
38
|
-
handler/index.ts # Lambda
|
|
54
|
+
index.ts # Public exports barrel
|
|
55
|
+
turso-provider.ts # Shared provider (Lambda + Provider)
|
|
56
|
+
turso-database.ts # Database construct
|
|
57
|
+
turso-auth-token.ts # Auth token construct
|
|
58
|
+
handler/index.ts # Lambda custom-resource handler
|
|
39
59
|
test/
|
|
40
|
-
turso-database.test.ts #
|
|
41
|
-
turso-auth-token.test.ts #
|
|
42
|
-
handler.test.ts # Handler unit tests
|
|
43
|
-
lib/ #
|
|
44
|
-
dist/ #
|
|
60
|
+
turso-database.test.ts # CDK assertion tests
|
|
61
|
+
turso-auth-token.test.ts # CDK assertion tests
|
|
62
|
+
handler.test.ts # Handler unit tests with mocks
|
|
63
|
+
lib/ # Generated compile output
|
|
64
|
+
dist/ # Generated JSII packaging output
|
|
45
65
|
```
|
|
46
66
|
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
### Linting Rules
|
|
67
|
+
## Dependency and Runtime Notes
|
|
68
|
+
- Peer deps: `aws-cdk-lib` `^2.201.0`, `constructs` `^10.3.0`
|
|
69
|
+
- Lambda target/runtime: Node.js 24.x
|
|
70
|
+
- Handler bundle command is configured in `.projenrc.ts`
|
|
71
|
+
- Pre-commit hook runs: `npx projen biome && npx projen build`
|
|
72
|
+
|
|
73
|
+
## Formatting and Linting (Biome)
|
|
74
|
+
Follow the enforced formatting profile:
|
|
75
|
+
- 2-space indentation, no tabs
|
|
76
|
+
- line width 80
|
|
77
|
+
- double quotes
|
|
78
|
+
- semicolons only when required
|
|
79
|
+
- trailing commas in multiline literals/params
|
|
80
|
+
- always parenthesize arrow function args: `(x) => x`
|
|
81
|
+
- bracket spacing: `{ a }`
|
|
82
|
+
Important lint rules:
|
|
65
83
|
- `noUnusedImports`: error
|
|
66
84
|
- `noUnusedVariables`: error
|
|
67
85
|
- `noConfusingVoidType`: error
|
|
68
|
-
- `noNonNullAssertion`:
|
|
69
|
-
- `useNodejsImportProtocol`: off
|
|
86
|
+
- `noNonNullAssertion`: off only in `**/*.test.ts`
|
|
87
|
+
- `useNodejsImportProtocol`: off (`"path"` over `"node:path"`)
|
|
70
88
|
|
|
71
89
|
## Import Conventions
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
-
|
|
90
|
+
Order imports in this sequence:
|
|
91
|
+
1. CDK/framework (`aws-cdk-lib`, `aws-cdk-lib/*`, `constructs`)
|
|
92
|
+
2. External packages (`@aws-sdk/client-ssm`, etc.)
|
|
93
|
+
3. Node builtins (`import * as path from "path"`)
|
|
94
|
+
4. Relative imports (`"./..."`, `"../..."`)
|
|
95
|
+
Style rules:
|
|
96
|
+
- Prefer named imports
|
|
97
|
+
- Use namespace imports for Node builtins
|
|
98
|
+
- Use `import type` for type-only imports
|
|
99
|
+
- Use inline `type` specifiers in mixed imports when needed
|
|
100
|
+
- Keep `src/index.ts` exports alphabetically ordered
|
|
101
|
+
|
|
102
|
+
## TypeScript and API Design
|
|
103
|
+
- Keep code JSII-compatible (public API types should be simple/stable)
|
|
104
|
+
- Respect `strict` mode and avoid `any`
|
|
105
|
+
- Avoid unused locals/parameters and implicit returns
|
|
106
|
+
- Use explicit, narrow interfaces for custom resource properties
|
|
107
|
+
- Prefer `readonly` on interface and public class properties
|
|
86
108
|
|
|
87
109
|
## Naming Conventions
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
- Use `describe("ClassName", () => { ... })` as outer wrapper
|
|
130
|
-
- Use **`test()`** (not `it()`) for individual cases
|
|
131
|
-
- Test names are descriptive sentences: `"creates custom resource with correct properties"`
|
|
132
|
-
|
|
133
|
-
### Construct Tests
|
|
134
|
-
- Helper function `createStack()` at top of describe block for shared setup
|
|
135
|
-
- CDK assertions: `Template.fromStack(stack)`, `template.hasResource()`, `template.hasResourceProperties()`
|
|
136
|
-
- Partial matching: `Match.arrayWith([...])`, `Match.objectLike({...})`
|
|
137
|
-
- Validation tests: `expect(() => { ... }).toThrow("exact message")`
|
|
138
|
-
- Import constructs from barrel: `import { TursoDatabase } from "../src"`
|
|
139
|
-
|
|
140
|
-
### Handler Tests
|
|
141
|
-
- `jest.mock()` at file top level, before imports
|
|
142
|
-
- Mock `global.fetch` per test: `global.fetch = jest.fn()`
|
|
143
|
-
- `beforeEach`: clear mocks, set env vars, configure default mock responses
|
|
144
|
-
- `afterEach`: clean up env vars
|
|
145
|
-
- Async error assertions: `await expect(handler(...)).rejects.toThrow("message")`
|
|
146
|
-
- Argument checking: `expect(mockFetch).toHaveBeenCalledWith(url, expect.objectContaining({...}))`
|
|
110
|
+
- Files: kebab-case (`turso-database.ts`)
|
|
111
|
+
- Tests: `<source>.test.ts`
|
|
112
|
+
- Classes: PascalCase
|
|
113
|
+
- Props interfaces: `<ClassName>Props`
|
|
114
|
+
- Function/method names: camelCase
|
|
115
|
+
- CDK logical IDs: PascalCase strings (`"Handler"`, `"Provider"`)
|
|
116
|
+
- Custom resource payload keys: PascalCase (`DatabaseName`, `OrganizationSlug`)
|
|
117
|
+
- Env vars: SCREAMING_SNAKE_CASE
|
|
118
|
+
|
|
119
|
+
## Construct Patterns
|
|
120
|
+
- Extend `Construct` from `constructs`
|
|
121
|
+
- Constructor pattern: `(scope, id, props)` and `super(scope, id)` first
|
|
122
|
+
- Validate inputs early with clear `Error` messages
|
|
123
|
+
- Pattern is `Lambda -> Provider -> CustomResource`
|
|
124
|
+
- Expose CR outputs using `cr.getAttString(...)`
|
|
125
|
+
- Forward `removalPolicy` with `cr.applyRemovalPolicy(...)`
|
|
126
|
+
- `TursoDatabase.adopt` is create-only behavior; updates ignore it
|
|
127
|
+
|
|
128
|
+
## Error Handling Guidelines
|
|
129
|
+
- Fail fast if required environment variables are missing
|
|
130
|
+
- Include status code and response text for API failures
|
|
131
|
+
- Keep delete operations idempotent (404 is tolerated where intended)
|
|
132
|
+
- Skip destructive delete work for unknown/failed physical IDs
|
|
133
|
+
- In adopt flows, only suppress expected "already exists" create errors
|
|
134
|
+
|
|
135
|
+
## Testing Guidelines
|
|
136
|
+
- Use `describe(...)` and `test(...)` (not `it(...)`)
|
|
137
|
+
- Use behavior-focused test names
|
|
138
|
+
- Keep construct tests focused on synthesized template assertions
|
|
139
|
+
- Use `Template.fromStack`, `hasResource`, `hasResourceProperties`
|
|
140
|
+
- Use `Match.objectLike` / `Match.arrayWith` for partial assertions
|
|
141
|
+
- In handler tests, mock `global.fetch` per scenario
|
|
142
|
+
- Keep `jest.mock(...)` declarations at top-level before imports
|
|
143
|
+
- Use `await expect(...).rejects.toThrow(...)` for async error checks
|
|
144
|
+
|
|
145
|
+
## Agent Checklist Before Finishing
|
|
146
|
+
- Run focused tests for changed behavior first
|
|
147
|
+
- Run `npm run test`
|
|
148
|
+
- Run `npm run build` when API surface/types/docs changed
|
|
149
|
+
- Regenerate files only through projen workflows
|
package/API.md
CHANGED
|
@@ -476,6 +476,7 @@ const tursoAuthTokenProps: TursoAuthTokenProps = { ... }
|
|
|
476
476
|
| <code><a href="#cdk-turso.TursoAuthTokenProps.property.provider">provider</a></code> | <code><a href="#cdk-turso.ITursoProvider">ITursoProvider</a></code> | *No description.* |
|
|
477
477
|
| <code><a href="#cdk-turso.TursoAuthTokenProps.property.authorization">authorization</a></code> | <code>string</code> | Authorization level for the token. |
|
|
478
478
|
| <code><a href="#cdk-turso.TursoAuthTokenProps.property.expiration">expiration</a></code> | <code>string</code> | Expiration time for the token (e.g., `"2w"`, `"1d30m"`). |
|
|
479
|
+
| <code><a href="#cdk-turso.TursoAuthTokenProps.property.removalPolicy">removalPolicy</a></code> | <code>aws-cdk-lib.RemovalPolicy</code> | Removal policy for the underlying custom resource. |
|
|
479
480
|
|
|
480
481
|
---
|
|
481
482
|
|
|
@@ -551,6 +552,21 @@ Expiration time for the token (e.g., `"2w"`, `"1d30m"`).
|
|
|
551
552
|
|
|
552
553
|
---
|
|
553
554
|
|
|
555
|
+
##### `removalPolicy`<sup>Optional</sup> <a name="removalPolicy" id="cdk-turso.TursoAuthTokenProps.property.removalPolicy"></a>
|
|
556
|
+
|
|
557
|
+
```typescript
|
|
558
|
+
public readonly removalPolicy: RemovalPolicy;
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
- *Type:* aws-cdk-lib.RemovalPolicy
|
|
562
|
+
|
|
563
|
+
Removal policy for the underlying custom resource.
|
|
564
|
+
|
|
565
|
+
Set to `RemovalPolicy.RETAIN` to keep the SSM parameter on stack
|
|
566
|
+
deletion.
|
|
567
|
+
|
|
568
|
+
---
|
|
569
|
+
|
|
554
570
|
### TursoDatabaseEncryption <a name="TursoDatabaseEncryption" id="cdk-turso.TursoDatabaseEncryption"></a>
|
|
555
571
|
|
|
556
572
|
#### Initializer <a name="Initializer" id="cdk-turso.TursoDatabaseEncryption.Initializer"></a>
|
|
@@ -608,7 +624,9 @@ const tursoDatabaseProps: TursoDatabaseProps = { ... }
|
|
|
608
624
|
| <code><a href="#cdk-turso.TursoDatabaseProps.property.group">group</a></code> | <code>string</code> | *No description.* |
|
|
609
625
|
| <code><a href="#cdk-turso.TursoDatabaseProps.property.organizationSlug">organizationSlug</a></code> | <code>string</code> | *No description.* |
|
|
610
626
|
| <code><a href="#cdk-turso.TursoDatabaseProps.property.provider">provider</a></code> | <code><a href="#cdk-turso.ITursoProvider">ITursoProvider</a></code> | *No description.* |
|
|
627
|
+
| <code><a href="#cdk-turso.TursoDatabaseProps.property.adopt">adopt</a></code> | <code>boolean</code> | If true, the provider will adopt an existing Turso database when creation reports that the database already exists. |
|
|
611
628
|
| <code><a href="#cdk-turso.TursoDatabaseProps.property.encryption">encryption</a></code> | <code><a href="#cdk-turso.TursoDatabaseEncryption">TursoDatabaseEncryption</a></code> | *No description.* |
|
|
629
|
+
| <code><a href="#cdk-turso.TursoDatabaseProps.property.removalPolicy">removalPolicy</a></code> | <code>aws-cdk-lib.RemovalPolicy</code> | Removal policy for the underlying custom resource. |
|
|
612
630
|
| <code><a href="#cdk-turso.TursoDatabaseProps.property.seed">seed</a></code> | <code><a href="#cdk-turso.TursoDatabaseSeed">TursoDatabaseSeed</a></code> | *No description.* |
|
|
613
631
|
| <code><a href="#cdk-turso.TursoDatabaseProps.property.sizeLimit">sizeLimit</a></code> | <code>string</code> | *No description.* |
|
|
614
632
|
|
|
@@ -654,6 +672,21 @@ public readonly provider: ITursoProvider;
|
|
|
654
672
|
|
|
655
673
|
---
|
|
656
674
|
|
|
675
|
+
##### `adopt`<sup>Optional</sup> <a name="adopt" id="cdk-turso.TursoDatabaseProps.property.adopt"></a>
|
|
676
|
+
|
|
677
|
+
```typescript
|
|
678
|
+
public readonly adopt: boolean;
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
- *Type:* boolean
|
|
682
|
+
- *Default:* false
|
|
683
|
+
|
|
684
|
+
If true, the provider will adopt an existing Turso database when creation reports that the database already exists.
|
|
685
|
+
|
|
686
|
+
This flag is only used during Create requests.
|
|
687
|
+
|
|
688
|
+
---
|
|
689
|
+
|
|
657
690
|
##### `encryption`<sup>Optional</sup> <a name="encryption" id="cdk-turso.TursoDatabaseProps.property.encryption"></a>
|
|
658
691
|
|
|
659
692
|
```typescript
|
|
@@ -664,6 +697,21 @@ public readonly encryption: TursoDatabaseEncryption;
|
|
|
664
697
|
|
|
665
698
|
---
|
|
666
699
|
|
|
700
|
+
##### `removalPolicy`<sup>Optional</sup> <a name="removalPolicy" id="cdk-turso.TursoDatabaseProps.property.removalPolicy"></a>
|
|
701
|
+
|
|
702
|
+
```typescript
|
|
703
|
+
public readonly removalPolicy: RemovalPolicy;
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
- *Type:* aws-cdk-lib.RemovalPolicy
|
|
707
|
+
|
|
708
|
+
Removal policy for the underlying custom resource.
|
|
709
|
+
|
|
710
|
+
Set to `RemovalPolicy.RETAIN` to keep the Turso database on stack
|
|
711
|
+
deletion.
|
|
712
|
+
|
|
713
|
+
---
|
|
714
|
+
|
|
667
715
|
##### `seed`<sup>Optional</sup> <a name="seed" id="cdk-turso.TursoDatabaseProps.property.seed"></a>
|
|
668
716
|
|
|
669
717
|
```typescript
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ npm install cdk-turso
|
|
|
13
13
|
Create a `TursoProvider` with your API token:
|
|
14
14
|
|
|
15
15
|
```typescript
|
|
16
|
-
import { Stack } from 'aws-cdk-lib';
|
|
16
|
+
import { RemovalPolicy, Stack } from 'aws-cdk-lib';
|
|
17
17
|
import { ParameterType, StringParameter } from 'aws-cdk-lib/aws-ssm';
|
|
18
18
|
import { TursoProvider, TursoDatabase, TursoAuthToken } from 'cdk-turso';
|
|
19
19
|
|
|
@@ -36,6 +36,8 @@ const database = new TursoDatabase(stack, 'Database', {
|
|
|
36
36
|
databaseName: 'my-database',
|
|
37
37
|
group: 'group-name',
|
|
38
38
|
organizationSlug: 'my-org',
|
|
39
|
+
adopt: true, // optional: adopt existing database if it already exists
|
|
40
|
+
removalPolicy: RemovalPolicy.RETAIN, // optional: keep DB on stack delete
|
|
39
41
|
});
|
|
40
42
|
|
|
41
43
|
// Access database attributes
|
|
@@ -66,6 +68,7 @@ const authToken = new TursoAuthToken(stack, 'AuthToken', {
|
|
|
66
68
|
parameterName: '/turso/db-token',
|
|
67
69
|
expiration: '2w', // optional, default: 'never'
|
|
68
70
|
authorization: 'read-only', // optional, default: 'full-access'
|
|
71
|
+
removalPolicy: RemovalPolicy.RETAIN, // optional: keep SSM parameter
|
|
69
72
|
});
|
|
70
73
|
|
|
71
74
|
// The SSM parameter name where the JWT is stored
|
|
@@ -111,6 +114,8 @@ Static method:
|
|
|
111
114
|
| `sizeLimit` | `string` | No | Size limit (e.g., '256mb') |
|
|
112
115
|
| `seed` | `TursoDatabaseSeed` | No | Database seed configuration |
|
|
113
116
|
| `encryption` | `TursoDatabaseEncryption` | No | Encryption configuration |
|
|
117
|
+
| `adopt` | `boolean` | No | On create, adopt an existing database when create returns "already exists" |
|
|
118
|
+
| `removalPolicy` | `RemovalPolicy` | No | Custom resource removal policy (for example `RemovalPolicy.RETAIN`) |
|
|
114
119
|
|
|
115
120
|
### TursoDatabaseSeed
|
|
116
121
|
|
|
@@ -149,6 +154,7 @@ interface TursoDatabaseEncryption {
|
|
|
149
154
|
| `parameterName` | `string` | Yes | SSM parameter name where the generated JWT will be stored as a SecureString |
|
|
150
155
|
| `expiration` | `string` | No | Token expiry (e.g., `'2w'`, `'1d30m'`). Default: `'never'` |
|
|
151
156
|
| `authorization` | `string` | No | `'full-access'` or `'read-only'`. Default: `'full-access'` |
|
|
157
|
+
| `removalPolicy` | `RemovalPolicy` | No | Custom resource removal policy (for example `RemovalPolicy.RETAIN`) |
|
|
152
158
|
|
|
153
159
|
### TursoAuthToken
|
|
154
160
|
|
package/lib/handler/index.js
CHANGED
|
@@ -591,16 +591,28 @@ var retryOptions = {
|
|
|
591
591
|
numOfAttempts: 4,
|
|
592
592
|
jitter: "none"
|
|
593
593
|
};
|
|
594
|
-
async function fetchWithRetry(url, options, errorMessage, allow404 = false) {
|
|
594
|
+
async function fetchWithRetry(url, options, errorMessage, allow404 = false, allowError) {
|
|
595
595
|
return (0, import_exponential_backoff.backOff)(async () => {
|
|
596
596
|
const response = await fetch(url, options);
|
|
597
597
|
if (!response.ok && !(allow404 && response.status === 404)) {
|
|
598
598
|
const errorText = await response.text();
|
|
599
|
+
if (allowError?.(response.status, errorText)) {
|
|
600
|
+
return response;
|
|
601
|
+
}
|
|
599
602
|
throw new Error(`${errorMessage}: ${response.status} ${errorText}`);
|
|
600
603
|
}
|
|
601
604
|
return response;
|
|
602
605
|
}, retryOptions);
|
|
603
606
|
}
|
|
607
|
+
function isAlreadyExistsError(status, errorText) {
|
|
608
|
+
return status === 409 || /already exists|already been taken/i.test(errorText);
|
|
609
|
+
}
|
|
610
|
+
function isTrueValue(value) {
|
|
611
|
+
if (typeof value === "string") {
|
|
612
|
+
return value.trim().toLowerCase() === "true";
|
|
613
|
+
}
|
|
614
|
+
return value === true;
|
|
615
|
+
}
|
|
604
616
|
async function getApiToken(parameterName) {
|
|
605
617
|
const command = new import_client_ssm.GetParameterCommand({
|
|
606
618
|
Name: parameterName,
|
|
@@ -618,6 +630,7 @@ async function handleDatabase(event, apiToken) {
|
|
|
618
630
|
const baseUrl = "https://api.turso.tech/v1";
|
|
619
631
|
if (RequestType === "Create") {
|
|
620
632
|
const dbName = ResourceProperties.DatabaseName;
|
|
633
|
+
const adopt = isTrueValue(ResourceProperties.Adopt);
|
|
621
634
|
const body = {
|
|
622
635
|
name: dbName,
|
|
623
636
|
group: ResourceProperties.Group
|
|
@@ -641,8 +654,34 @@ async function handleDatabase(event, apiToken) {
|
|
|
641
654
|
},
|
|
642
655
|
body: JSON.stringify(body)
|
|
643
656
|
},
|
|
644
|
-
"Failed to create database"
|
|
657
|
+
"Failed to create database",
|
|
658
|
+
false,
|
|
659
|
+
(status, errorText) => {
|
|
660
|
+
return adopt && isAlreadyExistsError(status, errorText);
|
|
661
|
+
}
|
|
645
662
|
);
|
|
663
|
+
if (!response.ok) {
|
|
664
|
+
const existingDbName = encodeURIComponent(dbName);
|
|
665
|
+
const existingResponse = await fetchWithRetry(
|
|
666
|
+
`${baseUrl}/organizations/${orgSlug}/databases/${existingDbName}`,
|
|
667
|
+
{
|
|
668
|
+
method: "GET",
|
|
669
|
+
headers: {
|
|
670
|
+
Authorization: `Bearer ${apiToken}`
|
|
671
|
+
}
|
|
672
|
+
},
|
|
673
|
+
"Failed to get database"
|
|
674
|
+
);
|
|
675
|
+
const existingData = await existingResponse.json();
|
|
676
|
+
return {
|
|
677
|
+
PhysicalResourceId: dbName,
|
|
678
|
+
Data: {
|
|
679
|
+
DbId: existingData.database.DbId,
|
|
680
|
+
Hostname: existingData.database.Hostname,
|
|
681
|
+
Name: existingData.database.Name
|
|
682
|
+
}
|
|
683
|
+
};
|
|
684
|
+
}
|
|
646
685
|
const data = await response.json();
|
|
647
686
|
return {
|
|
648
687
|
PhysicalResourceId: dbName,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RemovalPolicy } from "aws-cdk-lib";
|
|
1
2
|
import { Construct } from "constructs";
|
|
2
3
|
import type { ITursoProvider } from "./turso-provider";
|
|
3
4
|
export interface TursoAuthTokenProps {
|
|
@@ -27,6 +28,12 @@ export interface TursoAuthTokenProps {
|
|
|
27
28
|
* @default "full-access"
|
|
28
29
|
*/
|
|
29
30
|
readonly authorization?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Removal policy for the underlying custom resource.
|
|
33
|
+
* Set to `RemovalPolicy.RETAIN` to keep the SSM parameter on stack
|
|
34
|
+
* deletion.
|
|
35
|
+
*/
|
|
36
|
+
readonly removalPolicy?: RemovalPolicy;
|
|
30
37
|
}
|
|
31
38
|
export declare class TursoAuthToken extends Construct {
|
|
32
39
|
/**
|
package/lib/turso-auth-token.js
CHANGED
|
@@ -39,15 +39,18 @@ class TursoAuthToken extends constructs_1.Construct {
|
|
|
39
39
|
if (props.authorization) {
|
|
40
40
|
resourceProps.Authorization = props.authorization;
|
|
41
41
|
}
|
|
42
|
-
new aws_cdk_lib_1.CustomResource(this, "TursoAuthToken", {
|
|
42
|
+
const cr = new aws_cdk_lib_1.CustomResource(this, "TursoAuthToken", {
|
|
43
43
|
serviceToken: props.provider.serviceToken,
|
|
44
44
|
resourceType: "Custom::TursoAuthToken",
|
|
45
45
|
properties: resourceProps,
|
|
46
46
|
});
|
|
47
|
+
if (props.removalPolicy !== undefined) {
|
|
48
|
+
cr.applyRemovalPolicy(props.removalPolicy);
|
|
49
|
+
}
|
|
47
50
|
this.parameterName = props.parameterName;
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
53
|
exports.TursoAuthToken = TursoAuthToken;
|
|
51
54
|
_a = JSII_RTTI_SYMBOL_1;
|
|
52
|
-
TursoAuthToken[_a] = { fqn: "cdk-turso.TursoAuthToken", version: "0.
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
TursoAuthToken[_a] = { fqn: "cdk-turso.TursoAuthToken", version: "0.4.1" };
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyc28tYXV0aC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90dXJzby1hdXRoLXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQWtFO0FBQ2xFLGlEQUE2RDtBQUM3RCwyQ0FBc0M7QUE0Q3RDLE1BQWEsY0FBZSxTQUFRLHNCQUFTO0lBTTNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUNFLEtBQUssQ0FBQyxhQUFhO1lBQ25CLEtBQUssQ0FBQyxhQUFhLEtBQUssYUFBYTtZQUNyQyxLQUFLLENBQUMsYUFBYSxLQUFLLFdBQVcsRUFDbkMsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQTtRQUN2RSxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLFdBQVc7WUFDckIsWUFBWSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhO1NBQ3hCLENBQUMsQ0FBQTtRQUVGLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLFFBSWpDLENBQUE7UUFFRCxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUMxQyxJQUFJLHlCQUFlLENBQUM7WUFDbEIsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztZQUNwQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQztZQUNwRCxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FDMUIsQ0FBQyxDQUNILENBQUE7UUFFRCxNQUFNLGFBQWEsR0FBNEI7WUFDN0MsWUFBWSxFQUFFLFdBQVc7WUFDekIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1NBQ25DLENBQUE7UUFFRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixhQUFhLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUE7UUFDN0MsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLGFBQWEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtRQUNuRCxDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNwRCxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFlBQVksRUFBRSx3QkFBd0I7WUFDdEMsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDNUMsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtJQUMxQyxDQUFDOztBQWhFSCx3Q0FpRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgdHlwZSB7IElUdXJzb1Byb3ZpZGVyIH0gZnJvbSBcIi4vdHVyc28tcHJvdmlkZXJcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cnNvQXV0aFRva2VuUHJvcHMge1xuICByZWFkb25seSBwcm92aWRlcjogSVR1cnNvUHJvdmlkZXJcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFR1cnNvIGRhdGFiYXNlIHRvIGNyZWF0ZSBhbiBhdXRoIHRva2VuIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBUdXJzbyBvcmdhbml6YXRpb24gc2x1ZyB0aGF0IG93bnMgdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uU2x1Zzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBTU00gcGFyYW1ldGVyIG5hbWUgd2hlcmUgdGhlIGdlbmVyYXRlZCBKV1Qgd2lsbCBiZSBzdG9yZWRcbiAgICogYXMgYSBTZWN1cmVTdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJOYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogRXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgdG9rZW4gKGUuZy4sIGBcIjJ3XCJgLCBgXCIxZDMwbVwiYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwibmV2ZXJcIlxuICAgKi9cbiAgcmVhZG9ubHkgZXhwaXJhdGlvbj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBBdXRob3JpemF0aW9uIGxldmVsIGZvciB0aGUgdG9rZW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiZnVsbC1hY2Nlc3NcIlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXphdGlvbj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIHVuZGVybHlpbmcgY3VzdG9tIHJlc291cmNlLlxuICAgKiBTZXQgdG8gYFJlbW92YWxQb2xpY3kuUkVUQUlOYCB0byBrZWVwIHRoZSBTU00gcGFyYW1ldGVyIG9uIHN0YWNrXG4gICAqIGRlbGV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3lcbn1cblxuZXhwb3J0IGNsYXNzIFR1cnNvQXV0aFRva2VuIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBTU00gcGFyYW1ldGVyIG5hbWUgd2hlcmUgdGhlIGF1dGggdG9rZW4gaXMgc3RvcmVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUdXJzb0F1dGhUb2tlblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMuYXV0aG9yaXphdGlvbiAmJlxuICAgICAgcHJvcHMuYXV0aG9yaXphdGlvbiAhPT0gXCJmdWxsLWFjY2Vzc1wiICYmXG4gICAgICBwcm9wcy5hdXRob3JpemF0aW9uICE9PSBcInJlYWQtb25seVwiXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGhvcml6YXRpb24gbXVzdCBiZSBcImZ1bGwtYWNjZXNzXCIgb3IgXCJyZWFkLW9ubHlcIicpXG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyQXJuID0gU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6IFwic3NtXCIsXG4gICAgICByZXNvdXJjZTogXCJwYXJhbWV0ZXJcIixcbiAgICAgIHJlc291cmNlTmFtZTogcHJvcHMucGFyYW1ldGVyTmFtZS5zdGFydHNXaXRoKFwiL1wiKVxuICAgICAgICA/IHByb3BzLnBhcmFtZXRlck5hbWUuc2xpY2UoMSlcbiAgICAgICAgOiBwcm9wcy5wYXJhbWV0ZXJOYW1lLFxuICAgIH0pXG5cbiAgICBjb25zdCBwcm92aWRlcldpdGhIYW5kbGVyID0gcHJvcHMucHJvdmlkZXIgYXMgSVR1cnNvUHJvdmlkZXIgJiB7XG4gICAgICByZWFkb25seSBoYW5kbGVyPzoge1xuICAgICAgICBhZGRUb1JvbGVQb2xpY3koc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQpOiB2b2lkXG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdmlkZXJXaXRoSGFuZGxlci5oYW5kbGVyPy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpQdXRQYXJhbWV0ZXJcIiwgXCJzc206RGVsZXRlUGFyYW1ldGVyXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtwYXJhbWV0ZXJBcm5dLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgY29uc3QgcmVzb3VyY2VQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBSZXNvdXJjZVR5cGU6IFwiQXV0aFRva2VuXCIsXG4gICAgICBEYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIE9yZ2FuaXphdGlvblNsdWc6IHByb3BzLm9yZ2FuaXphdGlvblNsdWcsXG4gICAgICBQYXJhbWV0ZXJOYW1lOiBwcm9wcy5wYXJhbWV0ZXJOYW1lLFxuICAgIH1cblxuICAgIGlmIChwcm9wcy5leHBpcmF0aW9uKSB7XG4gICAgICByZXNvdXJjZVByb3BzLkV4cGlyYXRpb24gPSBwcm9wcy5leHBpcmF0aW9uXG4gICAgfVxuICAgIGlmIChwcm9wcy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXNvdXJjZVByb3BzLkF1dGhvcml6YXRpb24gPSBwcm9wcy5hdXRob3JpemF0aW9uXG4gICAgfVxuXG4gICAgY29uc3QgY3IgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJUdXJzb0F1dGhUb2tlblwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlR1cnNvQXV0aFRva2VuXCIsXG4gICAgICBwcm9wZXJ0aWVzOiByZXNvdXJjZVByb3BzLFxuICAgIH0pXG5cbiAgICBpZiAocHJvcHMucmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjci5hcHBseVJlbW92YWxQb2xpY3kocHJvcHMucmVtb3ZhbFBvbGljeSlcbiAgICB9XG5cbiAgICB0aGlzLnBhcmFtZXRlck5hbWUgPSBwcm9wcy5wYXJhbWV0ZXJOYW1lXG4gIH1cbn1cbiJdfQ==
|
package/lib/turso-database.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RemovalPolicy } from "aws-cdk-lib";
|
|
1
2
|
import { Construct } from "constructs";
|
|
2
3
|
import type { ITursoProvider } from "./turso-provider";
|
|
3
4
|
export interface TursoDatabaseSeed {
|
|
@@ -17,6 +18,21 @@ export interface TursoDatabaseProps {
|
|
|
17
18
|
readonly sizeLimit?: string;
|
|
18
19
|
readonly seed?: TursoDatabaseSeed;
|
|
19
20
|
readonly encryption?: TursoDatabaseEncryption;
|
|
21
|
+
/**
|
|
22
|
+
* If true, the provider will adopt an existing Turso database when
|
|
23
|
+
* creation reports that the database already exists.
|
|
24
|
+
*
|
|
25
|
+
* This flag is only used during Create requests.
|
|
26
|
+
*
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
29
|
+
readonly adopt?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Removal policy for the underlying custom resource.
|
|
32
|
+
* Set to `RemovalPolicy.RETAIN` to keep the Turso database on stack
|
|
33
|
+
* deletion.
|
|
34
|
+
*/
|
|
35
|
+
readonly removalPolicy?: RemovalPolicy;
|
|
20
36
|
}
|
|
21
37
|
export declare class TursoDatabase extends Construct {
|
|
22
38
|
readonly dbId: string;
|
package/lib/turso-database.js
CHANGED
|
@@ -29,11 +29,17 @@ class TursoDatabase extends constructs_1.Construct {
|
|
|
29
29
|
if (props.encryption) {
|
|
30
30
|
resourceProps.Encryption = props.encryption;
|
|
31
31
|
}
|
|
32
|
+
if (props.adopt !== undefined) {
|
|
33
|
+
resourceProps.Adopt = props.adopt;
|
|
34
|
+
}
|
|
32
35
|
const cr = new aws_cdk_lib_1.CustomResource(this, "TursoDb", {
|
|
33
36
|
serviceToken: props.provider.serviceToken,
|
|
34
37
|
resourceType: "Custom::TursoDatabase",
|
|
35
38
|
properties: resourceProps,
|
|
36
39
|
});
|
|
40
|
+
if (props.removalPolicy !== undefined) {
|
|
41
|
+
cr.applyRemovalPolicy(props.removalPolicy);
|
|
42
|
+
}
|
|
37
43
|
this.dbId = cr.getAttString("DbId");
|
|
38
44
|
this.hostname = cr.getAttString("Hostname");
|
|
39
45
|
this.databaseName = cr.getAttString("Name");
|
|
@@ -41,5 +47,5 @@ class TursoDatabase extends constructs_1.Construct {
|
|
|
41
47
|
}
|
|
42
48
|
exports.TursoDatabase = TursoDatabase;
|
|
43
49
|
_a = JSII_RTTI_SYMBOL_1;
|
|
44
|
-
TursoDatabase[_a] = { fqn: "cdk-turso.TursoDatabase", version: "0.
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
TursoDatabase[_a] = { fqn: "cdk-turso.TursoDatabase", version: "0.4.1" };
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyc28tZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHVyc28tZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBMkQ7QUFDM0QsMkNBQXNDO0FBeUN0QyxNQUFhLGFBQWMsU0FBUSxzQkFBUztJQVMxQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUUsQ0FDeEUsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQTtRQUMvRCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQTRCO1lBQzdDLFlBQVksRUFBRSxVQUFVO1lBQ3hCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtTQUN6QyxDQUFBO1FBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsYUFBYSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFBO1FBQzNDLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLGFBQWEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUNqQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFBO1FBQzdDLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1FBQ25DLENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUM3QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFlBQVksRUFBRSx1QkFBdUI7WUFDckMsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDNUMsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzdDLENBQUM7O0FBdERILHNDQXVEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB0eXBlIHsgSVR1cnNvUHJvdmlkZXIgfSBmcm9tIFwiLi90dXJzby1wcm92aWRlclwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyc29EYXRhYmFzZVNlZWQge1xuICByZWFkb25seSB0eXBlOiBzdHJpbmdcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG4gIHJlYWRvbmx5IHRpbWVzdGFtcD86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cnNvRGF0YWJhc2VFbmNyeXB0aW9uIHtcbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogc3RyaW5nXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25DaXBoZXI6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cnNvRGF0YWJhc2VQcm9wcyB7XG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBJVHVyc29Qcm92aWRlclxuICByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuICByZWFkb25seSBncm91cDogc3RyaW5nXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblNsdWc6IHN0cmluZ1xuICByZWFkb25seSBzaXplTGltaXQ/OiBzdHJpbmdcbiAgcmVhZG9ubHkgc2VlZD86IFR1cnNvRGF0YWJhc2VTZWVkXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBUdXJzb0RhdGFiYXNlRW5jcnlwdGlvblxuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGUgcHJvdmlkZXIgd2lsbCBhZG9wdCBhbiBleGlzdGluZyBUdXJzbyBkYXRhYmFzZSB3aGVuXG4gICAqIGNyZWF0aW9uIHJlcG9ydHMgdGhhdCB0aGUgZGF0YWJhc2UgYWxyZWFkeSBleGlzdHMuXG4gICAqXG4gICAqIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWQgZHVyaW5nIENyZWF0ZSByZXF1ZXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFkb3B0PzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIHVuZGVybHlpbmcgY3VzdG9tIHJlc291cmNlLlxuICAgKiBTZXQgdG8gYFJlbW92YWxQb2xpY3kuUkVUQUlOYCB0byBrZWVwIHRoZSBUdXJzbyBkYXRhYmFzZSBvbiBzdGFja1xuICAgKiBkZWxldGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5XG59XG5cbmV4cG9ydCBjbGFzcyBUdXJzb0RhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGRiSWQ6IHN0cmluZ1xuICAvKipcbiAgICogRE5TIGhvc3RuYW1lIGZvciB0aGUgZGF0YWJhc2UgKGUuZy4sIGBteS1kYi1teS1vcmcudHVyc28uaW9gKS5cbiAgICogVXNlIHdpdGggbGliU1FMIG9yIEhUVFAgY29ubmVjdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaG9zdG5hbWU6IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVHVyc29EYXRhYmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgaWYgKCEvXlthLXowLTktXSskLy50ZXN0KHByb3BzLmRhdGFiYXNlTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJkYXRhYmFzZU5hbWUgbXVzdCBjb250YWluIG9ubHkgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIGFuZCBkYXNoZXNcIixcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHByb3BzLmRhdGFiYXNlTmFtZS5sZW5ndGggPiA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGF0YWJhc2VOYW1lIG11c3QgYmUgYXQgbW9zdCA2NCBjaGFyYWN0ZXJzXCIpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBSZXNvdXJjZVR5cGU6IFwiRGF0YWJhc2VcIixcbiAgICAgIERhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgR3JvdXA6IHByb3BzLmdyb3VwLFxuICAgICAgT3JnYW5pemF0aW9uU2x1ZzogcHJvcHMub3JnYW5pemF0aW9uU2x1ZyxcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2l6ZUxpbWl0KSB7XG4gICAgICByZXNvdXJjZVByb3BzLlNpemVMaW1pdCA9IHByb3BzLnNpemVMaW1pdFxuICAgIH1cbiAgICBpZiAocHJvcHMuc2VlZCkge1xuICAgICAgcmVzb3VyY2VQcm9wcy5TZWVkID0gcHJvcHMuc2VlZFxuICAgIH1cbiAgICBpZiAocHJvcHMuZW5jcnlwdGlvbikge1xuICAgICAgcmVzb3VyY2VQcm9wcy5FbmNyeXB0aW9uID0gcHJvcHMuZW5jcnlwdGlvblxuICAgIH1cbiAgICBpZiAocHJvcHMuYWRvcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzb3VyY2VQcm9wcy5BZG9wdCA9IHByb3BzLmFkb3B0XG4gICAgfVxuXG4gICAgY29uc3QgY3IgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJUdXJzb0RiXCIsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6VHVyc29EYXRhYmFzZVwiLFxuICAgICAgcHJvcGVydGllczogcmVzb3VyY2VQcm9wcyxcbiAgICB9KVxuXG4gICAgaWYgKHByb3BzLnJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3IuYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLnJlbW92YWxQb2xpY3kpXG4gICAgfVxuXG4gICAgdGhpcy5kYklkID0gY3IuZ2V0QXR0U3RyaW5nKFwiRGJJZFwiKVxuICAgIHRoaXMuaG9zdG5hbWUgPSBjci5nZXRBdHRTdHJpbmcoXCJIb3N0bmFtZVwiKVxuICAgIHRoaXMuZGF0YWJhc2VOYW1lID0gY3IuZ2V0QXR0U3RyaW5nKFwiTmFtZVwiKVxuICB9XG59XG4iXX0=
|
package/lib/turso-provider.js
CHANGED
|
@@ -48,5 +48,5 @@ class TursoProvider extends constructs_1.Construct {
|
|
|
48
48
|
}
|
|
49
49
|
exports.TursoProvider = TursoProvider;
|
|
50
50
|
_a = JSII_RTTI_SYMBOL_1;
|
|
51
|
-
TursoProvider[_a] = { fqn: "cdk-turso.TursoProvider", version: "0.
|
|
51
|
+
TursoProvider[_a] = { fqn: "cdk-turso.TursoProvider", version: "0.4.1" };
|
|
52
52
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyc28tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHVyc28tcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBc0M7QUFDdEMsdURBQStFO0FBRy9FLG1FQUF1RDtBQUN2RCwyQ0FBc0M7QUFDdEMsNkJBQTRCO0FBWTVCLE1BQU0scUJBQXNCLFNBQVEsc0JBQVM7SUFHM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxZQUFvQjtRQUM1RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0lBQ2xDLENBQUM7Q0FDRjtBQWdCRDs7OztHQUlHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsc0JBQVM7SUFDMUM7O09BRUc7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQzVCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixZQUFvQjtRQUVwQixPQUFPLElBQUkscUJBQXFCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBY0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxxQkFBUSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDM0MsT0FBTyxFQUFFLElBQUksb0JBQU8sQ0FBQyxZQUFZLEVBQUUsMEJBQWEsQ0FBQyxNQUFNLENBQUM7WUFDeEQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFdBQVcsRUFBRTtnQkFDWCw4QkFBOEIsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWE7YUFDN0Q7U0FDRixDQUFDLENBQUE7UUFFRixLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDOUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQzVCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtTQUN6QixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUE7SUFDM0MsQ0FBQzs7QUE5Q0gsc0NBK0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgQ29kZSwgRnVuY3Rpb24sIFJ1bnRpbWUsIFJ1bnRpbWVGYW1pbHkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgdHlwZSB7IElMb2dHcm91cCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiXG5pbXBvcnQgdHlwZSB7IElQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIlxuXG4vKipcbiAqIFNoYXJlZCBUdXJzbyBjdXN0b20tcmVzb3VyY2UgcHJvdmlkZXIgY29udHJhY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVR1cnNvUHJvdmlkZXIge1xuICAvKipcbiAgICogVGhlIENESyBjdXN0b20tcmVzb3VyY2UgcHJvdmlkZXIgc2VydmljZSB0b2tlbi5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VUb2tlbjogc3RyaW5nXG59XG5cbmNsYXNzIEltcG9ydGVkVHVyc29Qcm92aWRlciBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElUdXJzb1Byb3ZpZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VUb2tlbjogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgc2VydmljZVRva2VuOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLnNlcnZpY2VUb2tlbiA9IHNlcnZpY2VUb2tlblxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyc29Qcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIFNTTSBwYXJhbWV0ZXIgdGhhdCBob2xkcyB0aGUgVHVyc28gcGxhdGZvcm0gQVBJIHRva2VuXG4gICAqIChzdG9yZWQgYXMgU2VjdXJlU3RyaW5nKS5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVRva2VuOiBJUGFyYW1ldGVyXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGxvZyBncm91cCBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhIGxvZyBncm91cCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogSUxvZ0dyb3VwIHwgdW5kZWZpbmVkXG59XG5cbi8qKlxuICogU2hhcmVkIExhbWJkYSArIENsb3VkRm9ybWF0aW9uIGN1c3RvbS1yZXNvdXJjZSBwcm92aWRlciBmb3IgYWxsXG4gKiBUdXJzbyByZXNvdXJjZXMuICBDcmVhdGUgb25lIHBlciBzdGFjayBhbmQgcGFzcyBpdCB0byBldmVyeVxuICogYFR1cnNvRGF0YWJhc2VgLCBgVHVyc29BdXRoVG9rZW5gLCBldGMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUdXJzb1Byb3ZpZGVyIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVR1cnNvUHJvdmlkZXIge1xuICAvKipcbiAgICogSW1wb3J0cyBhbiBleGlzdGluZyBUdXJzbyBwcm92aWRlciBieSBzZXJ2aWNlIHRva2VuLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU2VydmljZVRva2VuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzZXJ2aWNlVG9rZW46IHN0cmluZyxcbiAgKTogSVR1cnNvUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRUdXJzb1Byb3ZpZGVyKHNjb3BlLCBpZCwgc2VydmljZVRva2VuKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gYmFja2luZyBhbGwgVHVyc28gY3VzdG9tIHJlc291cmNlcy5cbiAgICogVXNlIHRoaXMgdG8gYXR0YWNoIGFkZGl0aW9uYWwgSUFNIHBlcm1pc3Npb25zIHdoZW4gYSByZXNvdXJjZVxuICAgKiB0eXBlIG5lZWRzIHRoZW0gKGUuZy4gYHNzbTpQdXRQYXJhbWV0ZXJgIGZvciBhdXRoLXRva2VuIHN0b3JhZ2UpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGhhbmRsZXI6IEZ1bmN0aW9uXG5cbiAgLyoqXG4gICAqIFRoZSBDREsgY3VzdG9tLXJlc291cmNlIHByb3ZpZGVyIHNlcnZpY2UgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZVRva2VuOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVHVyc29Qcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5oYW5kbGVyID0gbmV3IEZ1bmN0aW9uKHRoaXMsIFwiSGFuZGxlclwiLCB7XG4gICAgICBydW50aW1lOiBuZXcgUnVudGltZShcIm5vZGVqczI0LnhcIiwgUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCBcImhhbmRsZXJcIikpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygzKSxcbiAgICAgIGxvZ0dyb3VwOiBwcm9wcy5sb2dHcm91cCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFRVUlNPX0FQSV9UT0tFTl9QQVJBTUVURVJfTkFNRTogcHJvcHMuYXBpVG9rZW4ucGFyYW1ldGVyTmFtZSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHByb3BzLmFwaVRva2VuLmdyYW50UmVhZCh0aGlzLmhhbmRsZXIpXG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCBcIlByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiB0aGlzLmhhbmRsZXIsXG4gICAgICBsb2dHcm91cDogcHJvcHMubG9nR3JvdXAsXG4gICAgfSlcblxuICAgIHRoaXMuc2VydmljZVRva2VuID0gcHJvdmlkZXIuc2VydmljZVRva2VuXG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
package/CLAUDE.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@AGENTS.md
|