@fjall/generator 2.25.0 → 2.29.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 CHANGED
@@ -1 +1 @@
1
- 141 files minified at 2026-07-06T11:56:40.960Z
1
+ 142 files minified at 2026-07-13T22:22:07.030Z
@@ -0,0 +1,172 @@
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
+ /**
41
+ * Account-global Fjall OIDC provider spec — the coupled values every creator
42
+ * and prober of the `https://fjall.io` IAM provider must share byte-for-byte:
43
+ * 1. the OidcConnector adopt-or-create handler
44
+ * (`components/infrastructure/lib/config/aws/oidcConnector.ts`) —
45
+ * interpolates these at synth time;
46
+ * 2. the Quick-Create template (`oidc-connector.yaml` — hand-mirrored,
47
+ * `FjallIssuerDomain` default + thumbprint literals);
48
+ * 3. deploy-core's post-deploy reconcile and offboarding teardown
49
+ * (`deploy-core/src/aws/organisations/oidcProvider.ts`).
50
+ * A recreated provider with a drifted audience or URL silently breaks every
51
+ * web-identity assume in the account (scans AND deploys), so the create path
52
+ * must be identical wherever it runs.
53
+ *
54
+ * The thumbprint is a placeholder — IAM validates current OIDC issuers
55
+ * against its trusted-CA library and ignores the thumbprint list, but the
56
+ * API still requires a well-formed value.
57
+ */
58
+ export declare const FJALL_OIDC_ISSUER_DOMAIN = "fjall.io";
59
+ export declare const FJALL_OIDC_AUDIENCE = "sts.amazonaws.com";
60
+ export declare const FJALL_OIDC_PLACEHOLDER_THUMBPRINT = "0000000000000000000000000000000000000000";
61
+ export interface DevPolicyParams {
62
+ /**
63
+ * 12-digit AWS account number of the development-stage account. CDK passes
64
+ * `Stack.of(this).account` (concrete — the account stack always sets env);
65
+ * the static yaml renders with the literal `${AWS::AccountId}` inside
66
+ * `!Sub`; the remediation pass passes the connected account's
67
+ * `awsAccountId`.
68
+ */
69
+ accountId: string;
70
+ }
71
+ export declare function devDeployRoleName(fjallOrgId: string): string;
72
+ export declare function devProvisionerRoleName(fjallOrgId: string): string;
73
+ export declare function devSyncWriterRoleName(fjallOrgId: string): string;
74
+ /**
75
+ * Inline-policy names on the trio — coupled across all three rendering
76
+ * vehicles (the remediation pass's `PutRolePolicy` must target the same name
77
+ * the construct and yaml render, or it creates a SECOND policy alongside the
78
+ * stale one).
79
+ */
80
+ export declare const DEV_DEPLOY_POLICY_NAME = "FjallDevDeployPolicy";
81
+ export declare const DEV_PROVISIONER_POLICY_NAME = "FjallDevProvisionerPolicy";
82
+ export declare const DEV_SYNC_WRITER_POLICY_NAME = "FjallDevSyncWriterPolicy";
83
+ /**
84
+ * Deliberately NOT org-suffixed (unlike `deployBoundaryName`): the
85
+ * provisioner's `iam:PermissionsBoundary` condition needs an ARN writable at
86
+ * connect time, and the boundary content is org-independent (account
87
+ * conventions only). The `dev-gate-remediate` vehicle adopts on
88
+ * EntityAlreadyExists.
89
+ */
90
+ export declare const DEV_BOUNDARY_POLICY_NAME = "FjallDevBoundary";
91
+ export declare function devBoundaryPolicyArn(accountId: string): string;
92
+ /** Server-minted service subject for the worker-only provisioner role. */
93
+ export declare function devProvisionerSubject(fjallOrgId: string): string;
94
+ /** Server-minted service subject for the §7 presigning sync-writer role. */
95
+ export declare function devSyncSubject(fjallOrgId: string): string;
96
+ /**
97
+ * One statement of an OIDC federated trust (assume-role policy) document.
98
+ * Distinct from `BoundaryStatement` because trust statements carry a
99
+ * Principal.
100
+ */
101
+ export interface OidcTrustStatement {
102
+ Sid: string;
103
+ Effect: "Allow";
104
+ Principal: {
105
+ Federated: string;
106
+ };
107
+ Action: "sts:AssumeRoleWithWebIdentity";
108
+ Condition: Record<string, Record<string, string | string[]>>;
109
+ }
110
+ export interface OidcTrustParams {
111
+ fjallOrgId: string;
112
+ /** ARN of the account-global Fjall OIDC provider (token/`!Sub` reference). */
113
+ providerArn: string;
114
+ /** Issuer domain without scheme, e.g. `fjall.io`. */
115
+ issuerDomain: string;
116
+ }
117
+ /**
118
+ * G4 narrowed trust for `FjallDeploy{orgId}` — replaces the single bare
119
+ * `StringLike sub: org:{orgId}:*` (which matched EVERY subject including dev
120
+ * ones). Each condition class is its OWN Allow statement: conditions inside
121
+ * one statement AND together, so a single-statement rendering would match
122
+ * nothing.
123
+ *
124
+ * Dev subjects (`org:{orgId}:dev:…`) and the Phase-3 service subjects
125
+ * (`dev-provisioner`, `dev-sync`) match NONE of these — they have dedicated
126
+ * roles and must never assume the admin role.
127
+ */
128
+ export declare function buildNarrowedDeployTrustStatements(params: OidcTrustParams): OidcTrustStatement[];
129
+ /**
130
+ * Trust for `FjallDevDeploy{orgId}` — account-pinned: a bare `dev:*` would let
131
+ * a token minted for dev account A assume the role in dev account B, silently
132
+ * discarding G1's per-account intent in multi-dev-account orgs.
133
+ */
134
+ export declare function buildDevDeployTrustStatements(params: OidcTrustParams & DevPolicyParams): OidcTrustStatement[];
135
+ export declare function buildDevProvisionerTrustStatements(params: OidcTrustParams): OidcTrustStatement[];
136
+ export declare function buildDevSyncWriterTrustStatements(params: OidcTrustParams): OidcTrustStatement[];
137
+ /**
138
+ * `FjallDevDeploy{orgId}` identity policy — member-reachable, so it carries NO
139
+ * worker-only privileges (no IAM writes beyond resource-scoped PassRole, no
140
+ * master-secret read, no ECR deletes). The ECS/ELBv2/logs halves are each
141
+ * split into resource-tag-conditioned mutations, RequestTag-conditioned
142
+ * creates (+ the service's tag-on-create action), and unscoped reads — a
143
+ * single uniform tag-conditioned statement per service is not implementable
144
+ * (`ecs:RegisterTaskDefinition` supports only `aws:RequestTag`; several reads
145
+ * support no resource-level scoping at all).
146
+ */
147
+ export declare function buildDevDeployPolicyStatements({ accountId, }: DevPolicyParams): BoundaryStatement[];
148
+ /**
149
+ * `FjallDevProvisioner{orgId}` identity policy — worker-only. IAM CreateRole
150
+ * cannot constrain the trust-policy CONTENT of the role being created, so
151
+ * every IAM-write privilege lives here (a member-reachable CreateRole would
152
+ * let any org member mint a boundary-compliant role trusted by an arbitrary
153
+ * external account).
154
+ */
155
+ export declare function buildDevProvisionerPolicyStatements({ accountId, }: DevPolicyParams): BoundaryStatement[];
156
+ /**
157
+ * `FjallDevSyncWriter{orgId}` identity policy — the §7 presigning principal.
158
+ * The webapp assumes it per presign request with a per-slot-prefix inline
159
+ * session policy (server-enforceable — the webapp is the STS caller); this
160
+ * grant is the ceiling that session policy narrows. GetObject covers the
161
+ * CLI's presigned poll of the `.applied/<manifestId>` ack marker.
162
+ */
163
+ export declare function buildDevSyncWriterPolicyStatements({ accountId, }: DevPolicyParams): BoundaryStatement[];
164
+ /**
165
+ * `FjallDevBoundary` — permissions boundary for every role the provisioner
166
+ * creates (per-slot task roles). A boundary is an INTERSECTION: an allow-set
167
+ * omission fails silently at task start, so this document and the step-3
168
+ * role policy must be maintained as a pair. Allow-set is exactly what a slot
169
+ * task needs and nothing more — NO IAM actions at all, so even a role created
170
+ * through the conditioned path cannot mint further roles.
171
+ */
172
+ export declare function buildDevBoundaryStatements({ accountId, }: DevPolicyParams): BoundaryStatement[];
@@ -0,0 +1 @@
1
+ const d="fjall.io",r="sts.amazonaws.com",g="0000000000000000000000000000000000000000";function f(e){return`FjallDevDeploy${e}`}function v(e){return`FjallDevProvisioner${e}`}function A(e){return`FjallDevSyncWriter${e}`}const D="FjallDevDeployPolicy",S="FjallDevProvisionerPolicy",R="FjallDevSyncWriterPolicy",i="FjallDevBoundary";function n(e){return`arn:aws:iam::${e}:policy/${i}`}function c(e){return`org:${e}:dev-provisioner`}function u(e){return`org:${e}:dev-sync`}function j(e){const{fjallOrgId:l,providerArn:t,issuerDomain:a}=e,o={[`${a}:aud`]:r};return[{Sid:"FjallMachineSubject",Effect:"Allow",Principal:{Federated:t},Action:"sts:AssumeRoleWithWebIdentity",Condition:{StringEquals:{...o,[`${a}:sub`]:`org:${l}:*`}}},{Sid:"FjallUserSubjects",Effect:"Allow",Principal:{Federated:t},Action:"sts:AssumeRoleWithWebIdentity",Condition:{StringEquals:o,StringLike:{[`${a}:sub`]:`org:${l}:user:*`}}},{Sid:"FjallServiceSubjects",Effect:"Allow",Principal:{Federated:t},Action:"sts:AssumeRoleWithWebIdentity",Condition:{StringEquals:{...o,[`${a}:sub`]:[`org:${l}:discovery`,`org:${l}:connection`,`org:${l}:org-setup`]}}}]}function m(e){const{fjallOrgId:l,providerArn:t,issuerDomain:a,accountId:o}=e;return[{Sid:"FjallDevSubjectsThisAccount",Effect:"Allow",Principal:{Federated:t},Action:"sts:AssumeRoleWithWebIdentity",Condition:{StringEquals:{[`${a}:aud`]:r},StringLike:{[`${a}:sub`]:`org:${l}:dev:${o}:*`}}}]}function s(e){const{providerArn:l,issuerDomain:t,sid:a,subject:o}=e;return[{Sid:a,Effect:"Allow",Principal:{Federated:l},Action:"sts:AssumeRoleWithWebIdentity",Condition:{StringEquals:{[`${t}:aud`]:r,[`${t}:sub`]:o}}}]}function E(e){return s({...e,sid:"FjallDevProvisionerSubject",subject:c(e.fjallOrgId)})}function w(e){return s({...e,sid:"FjallDevSyncSubject",subject:u(e.fjallOrgId)})}function p({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 y({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":n(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 b({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{i as DEV_BOUNDARY_POLICY_NAME,D as DEV_DEPLOY_POLICY_NAME,S as DEV_PROVISIONER_POLICY_NAME,R as DEV_SYNC_WRITER_POLICY_NAME,r as FJALL_OIDC_AUDIENCE,d as FJALL_OIDC_ISSUER_DOMAIN,g as FJALL_OIDC_PLACEHOLDER_THUMBPRINT,P as buildDevBoundaryStatements,p as buildDevDeployPolicyStatements,m as buildDevDeployTrustStatements,y as buildDevProvisionerPolicyStatements,E as buildDevProvisionerTrustStatements,b as buildDevSyncWriterPolicyStatements,w as buildDevSyncWriterTrustStatements,j as buildNarrowedDeployTrustStatements,n as devBoundaryPolicyArn,f as devDeployRoleName,v as devProvisionerRoleName,c as devProvisionerSubject,u as devSyncSubject,A 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 p,isArchitectureCompatible as a}from"./instanceTypeArchitecture.js";export{i as getArchitectureForInstanceType,a as isArchitectureCompatible,p as validateArchitectureMatch};
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};
@@ -1 +1 @@
1
- export declare const GENERATOR_VERSION = "2.24.0";
1
+ export declare const GENERATOR_VERSION = "2.28.0";
@@ -1 +1 @@
1
- const E="2.24.0";export{E as GENERATOR_VERSION};
1
+ const E="2.28.0";export{E as GENERATOR_VERSION};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjall/generator",
3
- "version": "2.25.0",
3
+ "version": "2.29.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.25.0",
50
+ "@fjall/util": "^2.29.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": "7c1a329184064aefa557c2c09de0965c4f8cd4fb"
66
+ "gitHead": "c40ea0e1435400f3f42faaad5bcbf50e4400c1d4"
67
67
  }