@fjall/generator 2.24.0 → 2.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.minified +1 -1
- package/dist/src/presets/tierTypes.d.ts +1 -1
- package/dist/src/schemas/constants.d.ts +6 -3
- package/dist/src/schemas/constants.js +1 -1
- package/dist/src/schemas/devRolePolicies.d.ts +151 -0
- package/dist/src/schemas/devRolePolicies.js +1 -0
- package/dist/src/schemas/index.d.ts +1 -0
- package/dist/src/schemas/index.js +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +3 -3
package/dist/.minified
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
142 files minified at 2026-07-07T01:04:31.721Z
|
|
@@ -85,7 +85,7 @@ export interface DatabaseTierPreset {
|
|
|
85
85
|
publiclyAccessible?: boolean;
|
|
86
86
|
encryption?: TierEncryptionConfig;
|
|
87
87
|
databaseInsights?: TierDatabaseInsightsConfig | false;
|
|
88
|
-
/** Database port. Default:
|
|
88
|
+
/** Database port. Default: engine default (5432 postgresql / 3306 mysql) */
|
|
89
89
|
port?: number;
|
|
90
90
|
/** RDS Proxy configuration for connection pooling. */
|
|
91
91
|
proxy?: TierProxyConfig | false;
|
|
@@ -63,10 +63,13 @@ export declare function constIncludes<T extends ReadonlyArray<string | number>>(
|
|
|
63
63
|
export declare const MIN_PORT = 1;
|
|
64
64
|
export declare const MAX_PORT = 65535;
|
|
65
65
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
66
|
+
* Engine-default database ports, used when no explicit port is specified in
|
|
67
|
+
* tier presets or configuration. These MUST stay the engine defaults: AWS RDS
|
|
68
|
+
* Proxy listens exclusively on the engine family's default port (CreateDBProxy
|
|
69
|
+
* has no port parameter), so a non-default fallback breaks every proxied tier.
|
|
70
|
+
* Single source of truth — the CDK constructs import this map.
|
|
68
71
|
*/
|
|
69
|
-
export declare const
|
|
72
|
+
export declare const ENGINE_DEFAULT_DATABASE_PORTS: Record<DatabaseEngine, number>;
|
|
70
73
|
export declare const MIN_LAMBDA_MEMORY = 128;
|
|
71
74
|
export declare const MAX_LAMBDA_MEMORY = 10240;
|
|
72
75
|
export declare const MIN_LAMBDA_TIMEOUT = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const t=Object.freeze({RESOURCE_SUFFIXES:Object.freeze({storage:"Storage",database:"Database",cluster:"Cluster",function:"Function",instance:"Instance",compute:"Compute"})});import{DATABASE_TYPES as q}from"./sharedTypes.js";const g=["ecs","lambda","ec2"],x=Object.freeze({ECS:"ecs",LAMBDA:"lambda",EC2:"ec2"}),o=["code","container"],l=Object.freeze({CODE:"code",CONTAINER:"container"}),E=["ARM_64","X86_64"],c="ARM_64",A=["NONE","AWS_IAM"],T=["public","internal"],_=["CPU","MEMORY"],n=["ARM","STANDARD"],s=["Instance","Aurora"],S=["postgresql","mysql"],p=["foundation","compliance","hardened"];import{ECS_CAPACITY_PROVIDERS as
|
|
1
|
+
const t=Object.freeze({RESOURCE_SUFFIXES:Object.freeze({storage:"Storage",database:"Database",cluster:"Cluster",function:"Function",instance:"Instance",compute:"Compute"})});import{DATABASE_TYPES as q}from"./sharedTypes.js";const g=["ecs","lambda","ec2"],x=Object.freeze({ECS:"ecs",LAMBDA:"lambda",EC2:"ec2"}),o=["code","container"],l=Object.freeze({CODE:"code",CONTAINER:"container"}),E=["ARM_64","X86_64"],c="ARM_64",A=["NONE","AWS_IAM"],T=["public","internal"],_=["CPU","MEMORY"],n=["ARM","STANDARD"],s=["Instance","Aurora"],S=["postgresql","mysql"],p=["foundation","compliance","hardened"];import{ECS_CAPACITY_PROVIDERS as w}from"./sharedTypes.js";const P="FARGATE",a=["payload","nextjs"],O=new Set(a);import{APP_TYPES as Z,CUSTOM_TIER as h}from"./sharedTypes.js";const R=["t3.nano","t3.micro","t3.small","t3.medium","t3.large","t3.xlarge","t3.2xlarge","t3a.nano","t3a.micro","t3a.small","t3a.medium","t3a.large","t3a.xlarge","t3a.2xlarge","t4g.nano","t4g.micro","t4g.small","t4g.medium","t4g.large","t4g.xlarge","t4g.2xlarge","c5.large","c5.xlarge","c5.2xlarge","c5.4xlarge","c5.9xlarge","c5.12xlarge","c5.18xlarge","c5.24xlarge","c5a.large","c5a.xlarge","c5a.2xlarge","c5a.4xlarge","c5a.8xlarge","c5a.12xlarge","c5a.16xlarge","c5a.24xlarge","c6g.medium","c6g.large","c6g.xlarge","c6g.2xlarge","c6g.4xlarge","c6g.8xlarge","c6g.12xlarge","c6g.16xlarge","r5.large","r5.xlarge","r5.2xlarge","r5.4xlarge","r5.8xlarge","r5.12xlarge","r5.16xlarge","r5.24xlarge","r5a.large","r5a.xlarge","r5a.2xlarge","r5a.4xlarge","r5a.8xlarge","r5a.12xlarge","r5a.16xlarge","r5a.24xlarge","r6g.medium","r6g.large","r6g.xlarge","r6g.2xlarge","r6g.4xlarge","r6g.8xlarge","r6g.12xlarge","r6g.16xlarge","i3.large","i3.xlarge","i3.2xlarge","i3.4xlarge","i3.8xlarge","i3.16xlarge","p3.2xlarge","p3.8xlarge","p3.16xlarge","g4dn.xlarge","g4dn.2xlarge","g4dn.4xlarge","g4dn.8xlarge","g4dn.12xlarge","g4dn.16xlarge","m5.large","m5.xlarge","m5.2xlarge","m5.4xlarge","m5.8xlarge","m5.12xlarge","m5.16xlarge","m5.24xlarge","m5a.large","m5a.xlarge","m5a.2xlarge","m5a.4xlarge","m5a.8xlarge","m5a.12xlarge","m5a.16xlarge","m5a.24xlarge"],C=[0,1,5,10,15,30,60];function m(e,r){return e.includes(r)}const I=1,M=65535,N=Object.freeze({postgresql:5432,mysql:3306}),D=128,L=10240,U=1,Y=900,i=1,d=1e3,u=100,F=100,f=1,b=!1,B=3e3,G="t4g.micro",H=30,X=["GET","POST","PUT","DELETE","HEAD","OPTIONS","PATCH"],V=["standard","assets","upload","website"],j=["AES256","KMS"];import{BACKUP_VAULT_TIERS as v}from"./sharedTypes.js";export{n as AMI_HARDWARE_TYPES,Z as APP_TYPES,v as BACKUP_VAULT_TIERS,E as COMPUTE_ARCHITECTURES,x as COMPUTE_TYPE,g as COMPUTE_TYPES,h as CUSTOM_TIER,S as DATABASE_ENGINES,q as DATABASE_TYPES,t as DEFAULTS,P as DEFAULT_CAPACITY_PROVIDER,c as DEFAULT_COMPUTE_ARCHITECTURE,B as DEFAULT_CONTAINER_PORT,G as DEFAULT_EC2_INSTANCE_TYPE,H as DEFAULT_SECRET_ROTATION_DAYS,f as DEFAULT_WARM_POOL_MIN_SIZE,b as DEFAULT_WARM_POOL_REUSE_ON_SCALE_IN,l as DEPLOYMENT_TYPE,o as DEPLOYMENT_TYPES,R as EC2_INSTANCE_TYPES,w as ECS_CAPACITY_PROVIDERS,N as ENGINE_DEFAULT_DATABASE_PORTS,A as FUNCTION_URL_AUTH_TYPES,p as GOVERNANCE_PRESETS,X as HTTP_METHODS,T as LOAD_BALANCER_TYPES,d as MAX_ECS_CAPACITY,L as MAX_LAMBDA_MEMORY,Y as MAX_LAMBDA_TIMEOUT,M as MAX_PORT,u as MAX_SCALING_CAPACITY,F as MAX_WARM_POOL_SIZE,i as MIN_ECS_CAPACITY,D as MIN_LAMBDA_MEMORY,U as MIN_LAMBDA_TIMEOUT,I as MIN_PORT,s as PATTERN_DATABASE_TYPES,O as PATTERN_TYPES,a as PATTERN_TYPE_VALUES,j as S3_ENCRYPTION_TYPES,_ as SCALING_TYPES,V as STORAGE_PRESET_TYPES,C as VALID_MONITORING_INTERVALS,m as constIncludes};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { type BoundaryStatement } from "./securityBoundary.js";
|
|
2
|
+
/**
|
|
3
|
+
* Dev-tier IAM surface for the fast-dev-environments server-side gate
|
|
4
|
+
* (aiDocs plans/2026-07-05-fast-dev-environments-implementation.md §4.2 G3/G4).
|
|
5
|
+
*
|
|
6
|
+
* This module is the single source of truth for the THREE policy vehicles that
|
|
7
|
+
* render the same dev-tier documents (three-rendering parity — security-load-
|
|
8
|
+
* bearing coupled values):
|
|
9
|
+
* 1. the connector CDK construct
|
|
10
|
+
* (`components/infrastructure/lib/config/aws/oidcConnector.ts`) — consumes
|
|
11
|
+
* these builders directly, so construct⇔SSoT parity holds by construction;
|
|
12
|
+
* 2. the static Quick-Create template
|
|
13
|
+
* (`publicAssets/fjall/publicAssets/assets/oidc-connector.yaml`) — hand-
|
|
14
|
+
* mirrors the rendered JSON, locked by the deep-compare fixture in
|
|
15
|
+
* `components/infrastructure/lib/__tests__/devRoleParity.test.ts`;
|
|
16
|
+
* 3. the webapp `dev-gate-remediate` pass (Phase-2 Increment C) — imports
|
|
17
|
+
* these builders via the `@fjall/generator/schemas` subpath.
|
|
18
|
+
*
|
|
19
|
+
* Roles rendered ONLY in development-STAGE accounts (workload stage — never
|
|
20
|
+
* the account TIER axis):
|
|
21
|
+
* - `FjallDevDeploy{orgId}` — member-reachable, scoped dev policy (never
|
|
22
|
+
* AdministratorAccess), trusted by `org:{orgId}:dev:{accountId}:*` only.
|
|
23
|
+
* - `FjallDevProvisioner{orgId}` — worker-only IAM/master-secret privileges,
|
|
24
|
+
* trusted by the server-minted `org:{orgId}:dev-provisioner` subject.
|
|
25
|
+
* - `FjallDevSyncWriter{orgId}` — the §7 presigning principal, trusted by
|
|
26
|
+
* the server-minted `org:{orgId}:dev-sync` subject.
|
|
27
|
+
* - `FjallDevBoundary` — permissions boundary capping every role the
|
|
28
|
+
* provisioner creates (per-slot task roles). NOT attached to the trio
|
|
29
|
+
* themselves.
|
|
30
|
+
*
|
|
31
|
+
* Convention-scoping law: these documents are rendered at CONNECT time, before
|
|
32
|
+
* any app or substrate exists, so every resource scope is a naming/path/tag
|
|
33
|
+
* convention (`/fjall/dev/*`, `fjall-dev-*`, `fjall:dev=true`,
|
|
34
|
+
* `fjall-dev-sync-<accountId>-*`) — never a per-app instance ARN.
|
|
35
|
+
*
|
|
36
|
+
* Partition is hardcoded `aws` to match the Quick-Create template convention
|
|
37
|
+
* (`arn:aws:iam::aws:policy/AdministratorAccess`) — Fjall does not support
|
|
38
|
+
* GovCloud/China partitions.
|
|
39
|
+
*/
|
|
40
|
+
export interface DevPolicyParams {
|
|
41
|
+
/**
|
|
42
|
+
* 12-digit AWS account number of the development-stage account. CDK passes
|
|
43
|
+
* `Stack.of(this).account` (concrete — the account stack always sets env);
|
|
44
|
+
* the static yaml renders with the literal `${AWS::AccountId}` inside
|
|
45
|
+
* `!Sub`; the remediation pass passes the connected account's
|
|
46
|
+
* `awsAccountId`.
|
|
47
|
+
*/
|
|
48
|
+
accountId: string;
|
|
49
|
+
}
|
|
50
|
+
export declare function devDeployRoleName(fjallOrgId: string): string;
|
|
51
|
+
export declare function devProvisionerRoleName(fjallOrgId: string): string;
|
|
52
|
+
export declare function devSyncWriterRoleName(fjallOrgId: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Inline-policy names on the trio — coupled across all three rendering
|
|
55
|
+
* vehicles (the remediation pass's `PutRolePolicy` must target the same name
|
|
56
|
+
* the construct and yaml render, or it creates a SECOND policy alongside the
|
|
57
|
+
* stale one).
|
|
58
|
+
*/
|
|
59
|
+
export declare const DEV_DEPLOY_POLICY_NAME = "FjallDevDeployPolicy";
|
|
60
|
+
export declare const DEV_PROVISIONER_POLICY_NAME = "FjallDevProvisionerPolicy";
|
|
61
|
+
export declare const DEV_SYNC_WRITER_POLICY_NAME = "FjallDevSyncWriterPolicy";
|
|
62
|
+
/**
|
|
63
|
+
* Deliberately NOT org-suffixed (unlike `deployBoundaryName`): the
|
|
64
|
+
* provisioner's `iam:PermissionsBoundary` condition needs an ARN writable at
|
|
65
|
+
* connect time, and the boundary content is org-independent (account
|
|
66
|
+
* conventions only). The `dev-gate-remediate` vehicle adopts on
|
|
67
|
+
* EntityAlreadyExists.
|
|
68
|
+
*/
|
|
69
|
+
export declare const DEV_BOUNDARY_POLICY_NAME = "FjallDevBoundary";
|
|
70
|
+
export declare function devBoundaryPolicyArn(accountId: string): string;
|
|
71
|
+
/** Server-minted service subject for the worker-only provisioner role. */
|
|
72
|
+
export declare function devProvisionerSubject(fjallOrgId: string): string;
|
|
73
|
+
/** Server-minted service subject for the §7 presigning sync-writer role. */
|
|
74
|
+
export declare function devSyncSubject(fjallOrgId: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* One statement of an OIDC federated trust (assume-role policy) document.
|
|
77
|
+
* Distinct from `BoundaryStatement` because trust statements carry a
|
|
78
|
+
* Principal.
|
|
79
|
+
*/
|
|
80
|
+
export interface OidcTrustStatement {
|
|
81
|
+
Sid: string;
|
|
82
|
+
Effect: "Allow";
|
|
83
|
+
Principal: {
|
|
84
|
+
Federated: string;
|
|
85
|
+
};
|
|
86
|
+
Action: "sts:AssumeRoleWithWebIdentity";
|
|
87
|
+
Condition: Record<string, Record<string, string | string[]>>;
|
|
88
|
+
}
|
|
89
|
+
export interface OidcTrustParams {
|
|
90
|
+
fjallOrgId: string;
|
|
91
|
+
/** ARN of the account-global Fjall OIDC provider (token/`!Sub` reference). */
|
|
92
|
+
providerArn: string;
|
|
93
|
+
/** Issuer domain without scheme, e.g. `fjall.io`. */
|
|
94
|
+
issuerDomain: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* G4 narrowed trust for `FjallDeploy{orgId}` — replaces the single bare
|
|
98
|
+
* `StringLike sub: org:{orgId}:*` (which matched EVERY subject including dev
|
|
99
|
+
* ones). Each condition class is its OWN Allow statement: conditions inside
|
|
100
|
+
* one statement AND together, so a single-statement rendering would match
|
|
101
|
+
* nothing.
|
|
102
|
+
*
|
|
103
|
+
* Dev subjects (`org:{orgId}:dev:…`) and the Phase-3 service subjects
|
|
104
|
+
* (`dev-provisioner`, `dev-sync`) match NONE of these — they have dedicated
|
|
105
|
+
* roles and must never assume the admin role.
|
|
106
|
+
*/
|
|
107
|
+
export declare function buildNarrowedDeployTrustStatements(params: OidcTrustParams): OidcTrustStatement[];
|
|
108
|
+
/**
|
|
109
|
+
* Trust for `FjallDevDeploy{orgId}` — account-pinned: a bare `dev:*` would let
|
|
110
|
+
* a token minted for dev account A assume the role in dev account B, silently
|
|
111
|
+
* discarding G1's per-account intent in multi-dev-account orgs.
|
|
112
|
+
*/
|
|
113
|
+
export declare function buildDevDeployTrustStatements(params: OidcTrustParams & DevPolicyParams): OidcTrustStatement[];
|
|
114
|
+
export declare function buildDevProvisionerTrustStatements(params: OidcTrustParams): OidcTrustStatement[];
|
|
115
|
+
export declare function buildDevSyncWriterTrustStatements(params: OidcTrustParams): OidcTrustStatement[];
|
|
116
|
+
/**
|
|
117
|
+
* `FjallDevDeploy{orgId}` identity policy — member-reachable, so it carries NO
|
|
118
|
+
* worker-only privileges (no IAM writes beyond resource-scoped PassRole, no
|
|
119
|
+
* master-secret read, no ECR deletes). The ECS/ELBv2/logs halves are each
|
|
120
|
+
* split into resource-tag-conditioned mutations, RequestTag-conditioned
|
|
121
|
+
* creates (+ the service's tag-on-create action), and unscoped reads — a
|
|
122
|
+
* single uniform tag-conditioned statement per service is not implementable
|
|
123
|
+
* (`ecs:RegisterTaskDefinition` supports only `aws:RequestTag`; several reads
|
|
124
|
+
* support no resource-level scoping at all).
|
|
125
|
+
*/
|
|
126
|
+
export declare function buildDevDeployPolicyStatements({ accountId, }: DevPolicyParams): BoundaryStatement[];
|
|
127
|
+
/**
|
|
128
|
+
* `FjallDevProvisioner{orgId}` identity policy — worker-only. IAM CreateRole
|
|
129
|
+
* cannot constrain the trust-policy CONTENT of the role being created, so
|
|
130
|
+
* every IAM-write privilege lives here (a member-reachable CreateRole would
|
|
131
|
+
* let any org member mint a boundary-compliant role trusted by an arbitrary
|
|
132
|
+
* external account).
|
|
133
|
+
*/
|
|
134
|
+
export declare function buildDevProvisionerPolicyStatements({ accountId, }: DevPolicyParams): BoundaryStatement[];
|
|
135
|
+
/**
|
|
136
|
+
* `FjallDevSyncWriter{orgId}` identity policy — the §7 presigning principal.
|
|
137
|
+
* The webapp assumes it per presign request with a per-slot-prefix inline
|
|
138
|
+
* session policy (server-enforceable — the webapp is the STS caller); this
|
|
139
|
+
* grant is the ceiling that session policy narrows. GetObject covers the
|
|
140
|
+
* CLI's presigned poll of the `.applied/<manifestId>` ack marker.
|
|
141
|
+
*/
|
|
142
|
+
export declare function buildDevSyncWriterPolicyStatements({ accountId, }: DevPolicyParams): BoundaryStatement[];
|
|
143
|
+
/**
|
|
144
|
+
* `FjallDevBoundary` — permissions boundary for every role the provisioner
|
|
145
|
+
* creates (per-slot task roles). A boundary is an INTERSECTION: an allow-set
|
|
146
|
+
* omission fails silently at task start, so this document and the step-3
|
|
147
|
+
* role policy must be maintained as a pair. Allow-set is exactly what a slot
|
|
148
|
+
* task needs and nothing more — NO IAM actions at all, so even a role created
|
|
149
|
+
* through the conditioned path cannot mint further roles.
|
|
150
|
+
*/
|
|
151
|
+
export declare function buildDevBoundaryStatements({ accountId, }: DevPolicyParams): BoundaryStatement[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function u(e){return`FjallDevDeploy${e}`}function d(e){return`FjallDevProvisioner${e}`}function g(e){return`FjallDevSyncWriter${e}`}const f="FjallDevDeployPolicy",v="FjallDevProvisionerPolicy",A="FjallDevSyncWriterPolicy",s="FjallDevBoundary";function i(e){return`arn:aws:iam::${e}:policy/${s}`}function n(e){return`org:${e}:dev-provisioner`}function c(e){return`org:${e}:dev-sync`}function S(e){const{fjallOrgId:a,providerArn:t,issuerDomain:l}=e,o={[`${l}:aud`]:"sts.amazonaws.com"};return[{Sid:"FjallMachineSubject",Effect:"Allow",Principal:{Federated:t},Action:"sts:AssumeRoleWithWebIdentity",Condition:{StringEquals:{...o,[`${l}:sub`]:`org:${a}:*`}}},{Sid:"FjallUserSubjects",Effect:"Allow",Principal:{Federated:t},Action:"sts:AssumeRoleWithWebIdentity",Condition:{StringEquals:o,StringLike:{[`${l}:sub`]:`org:${a}:user:*`}}},{Sid:"FjallServiceSubjects",Effect:"Allow",Principal:{Federated:t},Action:"sts:AssumeRoleWithWebIdentity",Condition:{StringEquals:{...o,[`${l}:sub`]:[`org:${a}:discovery`,`org:${a}:connection`,`org:${a}:org-setup`]}}}]}function D(e){const{fjallOrgId:a,providerArn:t,issuerDomain:l,accountId:o}=e;return[{Sid:"FjallDevSubjectsThisAccount",Effect:"Allow",Principal:{Federated:t},Action:"sts:AssumeRoleWithWebIdentity",Condition:{StringEquals:{[`${l}:aud`]:"sts.amazonaws.com"},StringLike:{[`${l}:sub`]:`org:${a}:dev:${o}:*`}}}]}function r(e){const{providerArn:a,issuerDomain:t,sid:l,subject:o}=e;return[{Sid:l,Effect:"Allow",Principal:{Federated:a},Action:"sts:AssumeRoleWithWebIdentity",Condition:{StringEquals:{[`${t}:aud`]:"sts.amazonaws.com",[`${t}:sub`]:o}}}]}function R(e){return r({...e,sid:"FjallDevProvisionerSubject",subject:n(e.fjallOrgId)})}function m(e){return r({...e,sid:"FjallDevSyncSubject",subject:c(e.fjallOrgId)})}function j({accountId:e}){return[{Sid:"FjallDevEcsTaggedMutations",Effect:"Allow",Action:["ecs:UpdateService","ecs:DeleteService","ecs:RunTask","ecs:StopTask"],Resource:`arn:aws:ecs:*:${e}:*`,Condition:{StringEquals:{"aws:ResourceTag/fjall:dev":"true"}}},{Sid:"FjallDevEcsTaggedCreates",Effect:"Allow",Action:["ecs:RegisterTaskDefinition","ecs:CreateService"],Resource:"*",Condition:{StringEquals:{"aws:RequestTag/fjall:dev":"true"}}},{Sid:"FjallDevEcsTagOnCreate",Effect:"Allow",Action:["ecs:TagResource"],Resource:`arn:aws:ecs:*:${e}:*`,Condition:{StringEquals:{"ecs:CreateAction":["RegisterTaskDefinition","CreateService","RunTask"]}}},{Sid:"FjallDevEcsReads",Effect:"Allow",Action:["ecs:Describe*","ecs:List*"],Resource:"*"},{Sid:"FjallDevEcsDeregisterTaskDefinition",Effect:"Allow",Action:["ecs:DeregisterTaskDefinition"],Resource:`arn:aws:ecs:*:${e}:task-definition/fjall-dev-*`},{Sid:"FjallDevElbTaggedMutations",Effect:"Allow",Action:["elasticloadbalancing:ModifyRule","elasticloadbalancing:DeleteRule","elasticloadbalancing:ModifyTargetGroup","elasticloadbalancing:ModifyTargetGroupAttributes","elasticloadbalancing:DeleteTargetGroup","elasticloadbalancing:RegisterTargets","elasticloadbalancing:DeregisterTargets"],Resource:`arn:aws:elasticloadbalancing:*:${e}:*`,Condition:{StringEquals:{"aws:ResourceTag/fjall:dev":"true"}}},{Sid:"FjallDevElbTaggedCreates",Effect:"Allow",Action:["elasticloadbalancing:CreateTargetGroup","elasticloadbalancing:CreateRule"],Resource:`arn:aws:elasticloadbalancing:*:${e}:*`,Condition:{StringEquals:{"aws:RequestTag/fjall:dev":"true"}}},{Sid:"FjallDevElbTagOnCreate",Effect:"Allow",Action:["elasticloadbalancing:AddTags"],Resource:`arn:aws:elasticloadbalancing:*:${e}:*`,Condition:{StringEquals:{"elasticloadbalancing:CreateAction":["CreateTargetGroup","CreateRule"]}}},{Sid:"FjallDevElbReads",Effect:"Allow",Action:["elasticloadbalancing:Describe*"],Resource:"*"},{Sid:"FjallDevSsmDevTree",Effect:"Allow",Action:["ssm:GetParameter*","ssm:PutParameter","ssm:AddTagsToResource"],Resource:`arn:aws:ssm:*:${e}:parameter/fjall/dev/*`},{Sid:"FjallDevLogsTaggedMutations",Effect:"Allow",Action:["logs:PutRetentionPolicy","logs:DeleteLogGroup"],Resource:`arn:aws:logs:*:${e}:log-group:/fjall/dev/*`,Condition:{StringEquals:{"aws:ResourceTag/fjall:dev":"true"}}},{Sid:"FjallDevLogsTaggedCreate",Effect:"Allow",Action:["logs:CreateLogGroup","logs:TagResource"],Resource:`arn:aws:logs:*:${e}:log-group:/fjall/dev/*`,Condition:{StringEquals:{"aws:RequestTag/fjall:dev":"true"}}},{Sid:"FjallDevLogsRead",Effect:"Allow",Action:["logs:GetLogEvents","logs:DescribeLogStreams","logs:FilterLogEvents"],Resource:`arn:aws:logs:*:${e}:log-group:/fjall/dev/*`},{Sid:"FjallDevLogsDescribeGroups",Effect:"Allow",Action:["logs:DescribeLogGroups"],Resource:"*"},{Sid:"FjallDevKmsViaDevAlias",Effect:"Allow",Action:["kms:Encrypt","kms:Decrypt","kms:GenerateDataKey"],Resource:`arn:aws:kms:*:${e}:key/*`,Condition:{"ForAnyValue:StringLike":{"kms:ResourceAliases":"alias/fjall-dev-*"}}},{Sid:"FjallDevEcrAuthToken",Effect:"Allow",Action:["ecr:GetAuthorizationToken"],Resource:"*"},{Sid:"FjallDevEcrPushPull",Effect:"Allow",Action:["ecr:PutImage","ecr:InitiateLayerUpload","ecr:UploadLayerPart","ecr:CompleteLayerUpload","ecr:BatchCheckLayerAvailability","ecr:BatchGetImage","ecr:GetDownloadUrlForLayer","ecr:DescribeImages"],Resource:`arn:aws:ecr:*:${e}:repository/*`},{Sid:"FjallDevPassDevPathRoles",Effect:"Allow",Action:["iam:PassRole"],Resource:`arn:aws:iam::${e}:role/fjall/dev/*`}]}function w({accountId:e}){return[{Sid:"FjallDevProvisionerBoundedRoleWrites",Effect:"Allow",Action:["iam:CreateRole","iam:PutRolePolicy","iam:AttachRolePolicy"],Resource:`arn:aws:iam::${e}:role/fjall/dev/*`,Condition:{StringEquals:{"iam:PermissionsBoundary":i(e)}}},{Sid:"FjallDevProvisionerPathRoleOps",Effect:"Allow",Action:["iam:DeleteRole","iam:DeleteRolePolicy","iam:DetachRolePolicy","iam:ListRolePolicies","iam:TagRole"],Resource:`arn:aws:iam::${e}:role/fjall/dev/*`},{Sid:"FjallDevProvisionerListRoles",Effect:"Allow",Action:["iam:ListRoles"],Resource:"*"},{Sid:"FjallDevProvisionerDevMasterSecrets",Effect:"Allow",Action:["secretsmanager:GetSecretValue"],Resource:`arn:aws:secretsmanager:*:${e}:secret:fjall-dev-*`},{Sid:"FjallDevProvisionerDataApi",Effect:"Allow",Action:["rds-data:ExecuteStatement","rds-data:BatchExecuteStatement","rds-data:BeginTransaction","rds-data:CommitTransaction","rds-data:RollbackTransaction"],Resource:`arn:aws:rds:*:${e}:cluster:fjall-dev-*`},{Sid:"FjallDevProvisionerMetrics",Effect:"Allow",Action:["cloudwatch:GetMetricData"],Resource:"*"},{Sid:"FjallDevProvisionerOrphanDiscovery",Effect:"Allow",Action:["tag:GetResources"],Resource:"*"},{Sid:"FjallDevProvisionerSsmTeardown",Effect:"Allow",Action:["ssm:DeleteParameter*"],Resource:`arn:aws:ssm:*:${e}:parameter/fjall/dev/*`},{Sid:"FjallDevProvisionerLogsTeardown",Effect:"Allow",Action:["logs:DeleteLogGroup"],Resource:`arn:aws:logs:*:${e}:log-group:/fjall/dev/*`},{Sid:"FjallDevProvisionerTaggedTeardown",Effect:"Allow",Action:["ecs:UpdateService","ecs:StopTask","ecs:DeleteService","elasticloadbalancing:DeleteRule","elasticloadbalancing:DeleteTargetGroup","elasticloadbalancing:DeregisterTargets"],Resource:[`arn:aws:ecs:*:${e}:*`,`arn:aws:elasticloadbalancing:*:${e}:*`],Condition:{StringEquals:{"aws:ResourceTag/fjall:dev":"true"}}},{Sid:"FjallDevProvisionerImageJanitor",Effect:"Allow",Action:["ecr:ListImages","ecr:DescribeImages","ecr:BatchDeleteImage"],Resource:`arn:aws:ecr:*:${e}:repository/*`},{Sid:"FjallDevProvisionerSsmReadAll",Effect:"Allow",Action:["ssm:GetParameter*"],Resource:`arn:aws:ssm:*:${e}:parameter/*`},{Sid:"FjallDevProvisionerKmsDecryptViaSsm",Effect:"Allow",Action:["kms:Decrypt"],Resource:`arn:aws:kms:*:${e}:key/*`,Condition:{StringLike:{"kms:ViaService":"ssm.*.amazonaws.com"}}}]}function E({accountId:e}){return[{Sid:"FjallDevSyncPrefixReadWrite",Effect:"Allow",Action:["s3:GetObject","s3:PutObject"],Resource:`arn:aws:s3:::fjall-dev-sync-${e}-*/*`,Condition:{StringEquals:{"aws:ResourceAccount":e}}}]}function p({accountId:e}){return[{Sid:"FjallDevBoundarySsmDevRead",Effect:"Allow",Action:["ssm:GetParameter*"],Resource:`arn:aws:ssm:*:${e}:parameter/fjall/dev/*`},{Sid:"FjallDevBoundaryKmsDecryptDevAlias",Effect:"Allow",Action:["kms:Decrypt"],Resource:`arn:aws:kms:*:${e}:key/*`,Condition:{"ForAnyValue:StringLike":{"kms:ResourceAliases":"alias/fjall-dev-*"}}},{Sid:"FjallDevBoundarySyncPrefixReadWrite",Effect:"Allow",Action:["s3:GetObject","s3:PutObject"],Resource:`arn:aws:s3:::fjall-dev-sync-${e}-*/*`,Condition:{StringEquals:{"aws:ResourceAccount":e}}},{Sid:"FjallDevBoundarySlotLogs",Effect:"Allow",Action:["logs:CreateLogStream","logs:PutLogEvents"],Resource:`arn:aws:logs:*:${e}:log-group:/fjall/dev/*`},{Sid:"FjallDevBoundarySyncQueue",Effect:"Allow",Action:["sqs:ReceiveMessage","sqs:DeleteMessage","sqs:GetQueueUrl"],Resource:`arn:aws:sqs:*:${e}:fjall-dev-sync-${e}-*`}]}export{s as DEV_BOUNDARY_POLICY_NAME,f as DEV_DEPLOY_POLICY_NAME,v as DEV_PROVISIONER_POLICY_NAME,A as DEV_SYNC_WRITER_POLICY_NAME,p as buildDevBoundaryStatements,j as buildDevDeployPolicyStatements,D as buildDevDeployTrustStatements,w as buildDevProvisionerPolicyStatements,R as buildDevProvisionerTrustStatements,E as buildDevSyncWriterPolicyStatements,m as buildDevSyncWriterTrustStatements,S as buildNarrowedDeployTrustStatements,i as devBoundaryPolicyArn,u as devDeployRoleName,d as devProvisionerRoleName,n as devProvisionerSubject,c as devSyncSubject,g as devSyncWriterRoleName};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from "./resourceSchemas.js";
|
|
2
2
|
export * from "./constants.js";
|
|
3
3
|
export * from "./securityBoundary.js";
|
|
4
|
+
export * from "./devRolePolicies.js";
|
|
4
5
|
export { type AmiHardwareType, getArchitectureForInstanceType, validateArchitectureMatch, isArchitectureCompatible, } from "./instanceTypeArchitecture.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./resourceSchemas.js";export*from"./constants.js";export*from"./securityBoundary.js";import{getArchitectureForInstanceType as i,validateArchitectureMatch as
|
|
1
|
+
export*from"./resourceSchemas.js";export*from"./constants.js";export*from"./securityBoundary.js";export*from"./devRolePolicies.js";import{getArchitectureForInstanceType as i,validateArchitectureMatch as m,isArchitectureCompatible as a}from"./instanceTypeArchitecture.js";export{i as getArchitectureForInstanceType,a as isArchitectureCompatible,m as validateArchitectureMatch};
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const GENERATOR_VERSION = "2.
|
|
1
|
+
export declare const GENERATOR_VERSION = "2.26.1";
|
package/dist/src/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const E="2.
|
|
1
|
+
const E="2.26.1";export{E as GENERATOR_VERSION};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/generator",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.27.0",
|
|
4
4
|
"description": "Pure infrastructure generation logic for Fjall",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"license": "SEE LICENSE IN LICENSE",
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@fjall/util": "^2.
|
|
50
|
+
"@fjall/util": "^2.27.0",
|
|
51
51
|
"ast-types": "^0.16.1",
|
|
52
52
|
"recast": "^0.23.11",
|
|
53
53
|
"ts-morph": "^28.0.0",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"typescript-eslint": "^8.59.1",
|
|
64
64
|
"vitest": "^4.1.5"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "921ecd4f65f52c17037a8a24834d7e4c196b9347"
|
|
67
67
|
}
|