canopycms-cdk 0.0.67-int.90 → 0.0.67

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.
Files changed (48) hide show
  1. package/dist/constructs/asset-support.d.ts +137 -269
  2. package/dist/constructs/asset-support.js +275 -455
  3. package/dist/constructs/cms-distribution.d.ts +23 -40
  4. package/dist/constructs/cms-distribution.js +61 -88
  5. package/dist/constructs/cms-service.d.ts +38 -60
  6. package/dist/constructs/cms-service.js +246 -390
  7. package/dist/constructs/lambda-execution-role.d.ts +23 -39
  8. package/dist/constructs/lambda-execution-role.js +37 -60
  9. package/dist/index.js +0 -2
  10. package/dist/worker.d.ts +0 -2
  11. package/dist/worker.js +0 -2
  12. package/lambda/asset-transform/dist/handler.js +33 -49
  13. package/lambda/asset-transform/dist/node_modules/.package-lock.json +38 -38
  14. package/lambda/asset-transform/dist/node_modules/@img/sharp-libvips-linux-arm64/README.md +1 -1
  15. package/lambda/asset-transform/dist/node_modules/@img/sharp-libvips-linux-arm64/lib/glib-2.0/include/glibconfig.h +2 -2
  16. package/lambda/asset-transform/dist/node_modules/@img/sharp-libvips-linux-arm64/lib/{libvips-cpp.so.8.18.6 → libvips-cpp.so.8.18.7} +0 -0
  17. package/lambda/asset-transform/dist/node_modules/@img/sharp-libvips-linux-arm64/package.json +2 -2
  18. package/lambda/asset-transform/dist/node_modules/@img/sharp-libvips-linux-arm64/versions.json +11 -11
  19. package/lambda/asset-transform/dist/node_modules/@img/sharp-linux-arm64/index.cjs +1 -1
  20. package/lambda/asset-transform/dist/node_modules/@img/sharp-linux-arm64/lib/{sharp-linux-arm64-0.35.4.node → sharp-linux-arm64-0.35.5.node} +0 -0
  21. package/lambda/asset-transform/dist/node_modules/@img/sharp-linux-arm64/package.json +2 -2
  22. package/lambda/asset-transform/dist/node_modules/@img/sharp-wasm32/index.cjs +1 -1
  23. package/lambda/asset-transform/dist/node_modules/@img/sharp-wasm32/lib/sharp-wasm32-0.35.5.node.js +1 -0
  24. package/lambda/asset-transform/dist/node_modules/@img/sharp-wasm32/lib/{sharp-wasm32-0.35.4.node.wasm → sharp-wasm32-0.35.5.node.wasm} +0 -0
  25. package/lambda/asset-transform/dist/node_modules/@img/sharp-wasm32/package.json +1 -1
  26. package/lambda/asset-transform/dist/node_modules/@img/sharp-wasm32/versions.json +7 -7
  27. package/lambda/asset-transform/dist/node_modules/sharp/dist/index.d.cts +2 -2
  28. package/lambda/asset-transform/dist/node_modules/sharp/dist/index.d.mts +3 -3
  29. package/lambda/asset-transform/dist/node_modules/sharp/dist/is.cjs +8 -2
  30. package/lambda/asset-transform/dist/node_modules/sharp/dist/is.mjs +8 -2
  31. package/lambda/asset-transform/dist/node_modules/sharp/dist/operation.cjs +2 -2
  32. package/lambda/asset-transform/dist/node_modules/sharp/dist/operation.mjs +2 -2
  33. package/lambda/asset-transform/dist/node_modules/sharp/dist/output.cjs +1 -0
  34. package/lambda/asset-transform/dist/node_modules/sharp/dist/output.mjs +1 -0
  35. package/lambda/asset-transform/dist/node_modules/sharp/dist/resize.cjs +14 -14
  36. package/lambda/asset-transform/dist/node_modules/sharp/dist/resize.mjs +14 -14
  37. package/lambda/asset-transform/dist/node_modules/sharp/dist/sharp.cjs +3 -3
  38. package/lambda/asset-transform/dist/node_modules/sharp/dist/sharp.mjs +3 -3
  39. package/lambda/asset-transform/dist/node_modules/sharp/lib/index.d.ts +2 -2
  40. package/lambda/asset-transform/dist/node_modules/sharp/package.json +35 -35
  41. package/lambda/asset-transform/dist/node_modules/sharp/src/binding.gyp +1 -1
  42. package/lambda/asset-transform/dist/node_modules/sharp/src/common.cc +4 -4
  43. package/lambda/asset-transform/dist/node_modules/sharp/src/common.h +2 -2
  44. package/lambda/asset-transform/dist/node_modules/sharp/src/pipeline.cc +31 -6
  45. package/lambda/asset-transform/dist/node_modules/sharp/src/utilities.cc +1 -1
  46. package/package.json +4 -4
  47. package/worker/dist/index.js +251 -364
  48. package/lambda/asset-transform/dist/node_modules/@img/sharp-wasm32/lib/sharp-wasm32-0.35.4.node.js +0 -1
@@ -13,48 +13,32 @@ export interface LambdaExecutionPolicyOptions {
13
13
  }
14
14
  /**
15
15
  * Re-attach what CDK drops when a `lambda.Function` is handed a pre-built
16
- * execution role. Call this for every caller-supplied role, alongside passing
17
- * that role to the function.
16
+ * execution role. Call this for EVERY caller-supplied role.
18
17
  *
19
- * The contract this maintains is deliberately the strong one: **passing a role
20
- * yields the same effective permissions as letting the construct create one.**
21
- * The weaker alternative - attach only what each function demonstrably still
22
- * needs - is a judgment call that goes stale silently. Concretely, neither
23
- * Lambda in this package strictly needs `AWSLambdaBasicExecutionRole` today:
24
- * both log to a custom-named group (`/canopycms/<stackName>/...`), that
25
- * policy's `logs:CreateLogStream`/`logs:PutLogEvents` are scoped to
26
- * `arn:aws:logs:*:*:log-group:/aws/lambda/*:*` and so grant nothing for such a
27
- * group, and an explicit `logGroup.grantWrite()` is what actually enables
28
- * their logging. Attaching it regardless costs one managed-policy ARN and
29
- * means the first change to either function's logging cannot quietly leave
18
+ * The contract is the strong one: **passing a role yields the same effective
19
+ * permissions as letting the construct create one.** Attaching only what each
20
+ * function demonstrably still needs goes stale silently - neither Lambda here
21
+ * strictly needs `AWSLambdaBasicExecutionRole` today, since both log to a
22
+ * custom-named group its `/aws/lambda/*`-scoped statements do not cover and an
23
+ * explicit `logGroup.grantWrite()` is what enables their logging. Attaching it
24
+ * anyway costs one ARN and keeps a later logging change from quietly leaving
30
25
  * passed-role deployments behind.
31
26
  *
32
- * WHY THE PARAMETER IS THE CONCRETE `iam.Role` AND NOT `iam.IRole`, which is
33
- * the type a CDK prop would normally take: `addManagedPolicy` does nothing
34
- * useful on an imported role, in two distinct ways, neither of which surfaces
35
- * an error.
27
+ * THE PARAMETER IS THE CONCRETE `iam.Role`, NOT `iam.IRole`, because
28
+ * `addManagedPolicy` does nothing useful on an imported role, in two ways that
29
+ * both emit nothing and neither of which errors: `ImmutableRole` (what
30
+ * `Role.fromRoleArn` returns cross-account, or for any `mutable: false` import)
31
+ * defines it as an empty method body, and `ImportedRole` (same-account, still
32
+ * mutable) attaches only if the policy exposes `attachToRole`, which
33
+ * `ManagedPolicy.fromAwsManagedPolicyName` does not, so it takes the warning
34
+ * branch. Both confirmed on a synthesized template: no `AWS::IAM::Role` and no
35
+ * `AWS::IAM::Policy` appears either way. Typed `IRole`, this function would
36
+ * silently no-op for every imported role and ship exactly the cannot-start
37
+ * Lambda it exists to prevent, and no runtime guard is available -
38
+ * `ImmutableRole.addToPrincipalPolicy` reports `statementAdded: true` while
39
+ * emitting nothing. Narrowing moves the failure to COMPILE time.
36
40
  *
37
- * - `ImmutableRole.addManagedPolicy(_policy) {}` - an empty method body. This
38
- * is what `Role.fromRoleArn` returns for a CROSS-ACCOUNT role, or for any
39
- * role imported with `mutable: false`.
40
- * - `ImportedRole.addManagedPolicy` (the same-account, still-mutable case)
41
- * attaches the policy only if it exposes `attachToRole`, which
42
- * `ManagedPolicy.fromAwsManagedPolicyName` does not - so it takes the
43
- * warning branch and emits nothing.
44
- *
45
- * Both confirmed on a synthesized template: no `AWS::IAM::Role` and no
46
- * `AWS::IAM::Policy` resource appears in either case. So typed `IRole`, this
47
- * function would silently no-op for every imported role and ship exactly the
48
- * cannot-start Lambda it exists to prevent. There is no runtime guard
49
- * available either - `ImmutableRole.addToPrincipalPolicy` returns
50
- * `statementAdded: true` while emitting nothing, so the one signal CDK offers
51
- * lies. Narrowing the type moves the failure to COMPILE time instead, which is
52
- * the earliest it can be caught; `attachTo(distribution:
53
- * cloudfront.Distribution)` in asset-support.ts narrows to a concrete class for
54
- * the same kind of reason.
55
- *
56
- * Residual, documented rather than guarded because of its rarity: a role
57
- * produced under `Role.customizeRoles` carries a precreated `ImportedRole` that
58
- * `addManagedPolicy` delegates to, landing on the warning branch above.
41
+ * Residual, documented rather than guarded: a role from `Role.customizeRoles`
42
+ * carries a precreated `ImportedRole` and lands on that same warning branch.
59
43
  */
60
44
  export declare function attachLambdaExecutionPolicies(role: iam.Role, options: LambdaExecutionPolicyOptions): void;
@@ -3,9 +3,8 @@ import { aws_iam as iam } from 'aws-cdk-lib';
3
3
  * The two AWS managed policies CDK's `lambda.Function` attaches to an
4
4
  * execution role IT creates, and silently DISCARDS when one is passed in.
5
5
  *
6
- * Verbatim from `aws-cdk-lib/aws-lambda/lib/function.js` (checked against
7
- * 2.265.0 here, and independently against 2.267.0 by the adopter who filed
8
- * this):
6
+ * Verbatim from `aws-cdk-lib/aws-lambda/lib/function.js` (2.265.0, and the same
7
+ * in 2.267.0):
9
8
  *
10
9
  * ```js
11
10
  * managedPolicies.push(ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'))
@@ -13,74 +12,52 @@ import { aws_iam as iam } from 'aws-cdk-lib';
13
12
  * this.role = props.role || new iam.Role(this, 'ServiceRole', { assumedBy: ..., managedPolicies })
14
13
  * ```
15
14
  *
16
- * The array is built unconditionally and then reaches ONLY the `||` fallback.
17
- * Pass a role and both entries are dropped with nothing logged. Confirmed on a
18
- * synthesized template, not inferred: a VPC-attached function given a bare role
19
- * emits an `AWS::IAM::Role` whose `ManagedPolicyArns` is absent entirely.
20
- *
21
- * For the VPC-attached CMS Lambda that is not a degradation, it is fatal and
22
- * invisible: without `AWSLambdaVPCAccessExecutionRole` the function cannot
23
- * create ENIs, so it cannot start at all - while synthesizing and deploying
24
- * perfectly clean and failing only at invoke, a long way from the cause. Which
25
- * is why every `role` prop in this package routes through here.
15
+ * The array is built unconditionally and then reaches ONLY the `||` fallback, so
16
+ * passing a role drops both entries with nothing logged - confirmed on a
17
+ * synthesized template, where a VPC-attached function given a bare role emits an
18
+ * `AWS::IAM::Role` with no `ManagedPolicyArns` at all. For the VPC-attached CMS
19
+ * Lambda that is fatal and invisible: without `AWSLambdaVPCAccessExecutionRole`
20
+ * the function cannot create ENIs and so cannot start, having synthesized and
21
+ * deployed perfectly clean and failing only at invoke. Every `role` prop in this
22
+ * package routes through here.
26
23
  *
27
24
  * NOT affected by passing a role, so deliberately not re-applied below (all
28
- * three verified in the same CDK source):
29
- *
30
- * - EFS access-point statements - `config.policies.forEach(p => this.role?.addToPrincipalPolicy(p))`.
31
- * - `initialPolicy` - `this.role.addToPrincipalPolicy(statement)` per statement.
32
- * - Every `grant*` call, because `this.grantPrincipal = this.role`. That covers
33
- * `cmsLogGroup`/`transformLogGroup`'s `grantWrite` and all asset-bucket
34
- * grants, which land on the passed role exactly as they would on a created
35
- * one.
25
+ * three verified in the same CDK source): EFS access-point statements and
26
+ * `initialPolicy`, which go through `addToPrincipalPolicy`, and every `grant*`
27
+ * call, because `this.grantPrincipal = this.role` - which covers
28
+ * `cmsLogGroup`/`transformLogGroup`'s `grantWrite` and all asset-bucket grants.
36
29
  */
37
30
  const BASIC_EXECUTION_POLICY = 'service-role/AWSLambdaBasicExecutionRole';
38
31
  const VPC_ACCESS_POLICY = 'service-role/AWSLambdaVPCAccessExecutionRole';
39
32
  /**
40
33
  * Re-attach what CDK drops when a `lambda.Function` is handed a pre-built
41
- * execution role. Call this for every caller-supplied role, alongside passing
42
- * that role to the function.
34
+ * execution role. Call this for EVERY caller-supplied role.
43
35
  *
44
- * The contract this maintains is deliberately the strong one: **passing a role
45
- * yields the same effective permissions as letting the construct create one.**
46
- * The weaker alternative - attach only what each function demonstrably still
47
- * needs - is a judgment call that goes stale silently. Concretely, neither
48
- * Lambda in this package strictly needs `AWSLambdaBasicExecutionRole` today:
49
- * both log to a custom-named group (`/canopycms/<stackName>/...`), that
50
- * policy's `logs:CreateLogStream`/`logs:PutLogEvents` are scoped to
51
- * `arn:aws:logs:*:*:log-group:/aws/lambda/*:*` and so grant nothing for such a
52
- * group, and an explicit `logGroup.grantWrite()` is what actually enables
53
- * their logging. Attaching it regardless costs one managed-policy ARN and
54
- * means the first change to either function's logging cannot quietly leave
36
+ * The contract is the strong one: **passing a role yields the same effective
37
+ * permissions as letting the construct create one.** Attaching only what each
38
+ * function demonstrably still needs goes stale silently - neither Lambda here
39
+ * strictly needs `AWSLambdaBasicExecutionRole` today, since both log to a
40
+ * custom-named group its `/aws/lambda/*`-scoped statements do not cover and an
41
+ * explicit `logGroup.grantWrite()` is what enables their logging. Attaching it
42
+ * anyway costs one ARN and keeps a later logging change from quietly leaving
55
43
  * passed-role deployments behind.
56
44
  *
57
- * WHY THE PARAMETER IS THE CONCRETE `iam.Role` AND NOT `iam.IRole`, which is
58
- * the type a CDK prop would normally take: `addManagedPolicy` does nothing
59
- * useful on an imported role, in two distinct ways, neither of which surfaces
60
- * an error.
61
- *
62
- * - `ImmutableRole.addManagedPolicy(_policy) {}` - an empty method body. This
63
- * is what `Role.fromRoleArn` returns for a CROSS-ACCOUNT role, or for any
64
- * role imported with `mutable: false`.
65
- * - `ImportedRole.addManagedPolicy` (the same-account, still-mutable case)
66
- * attaches the policy only if it exposes `attachToRole`, which
67
- * `ManagedPolicy.fromAwsManagedPolicyName` does not - so it takes the
68
- * warning branch and emits nothing.
69
- *
70
- * Both confirmed on a synthesized template: no `AWS::IAM::Role` and no
71
- * `AWS::IAM::Policy` resource appears in either case. So typed `IRole`, this
72
- * function would silently no-op for every imported role and ship exactly the
73
- * cannot-start Lambda it exists to prevent. There is no runtime guard
74
- * available either - `ImmutableRole.addToPrincipalPolicy` returns
75
- * `statementAdded: true` while emitting nothing, so the one signal CDK offers
76
- * lies. Narrowing the type moves the failure to COMPILE time instead, which is
77
- * the earliest it can be caught; `attachTo(distribution:
78
- * cloudfront.Distribution)` in asset-support.ts narrows to a concrete class for
79
- * the same kind of reason.
45
+ * THE PARAMETER IS THE CONCRETE `iam.Role`, NOT `iam.IRole`, because
46
+ * `addManagedPolicy` does nothing useful on an imported role, in two ways that
47
+ * both emit nothing and neither of which errors: `ImmutableRole` (what
48
+ * `Role.fromRoleArn` returns cross-account, or for any `mutable: false` import)
49
+ * defines it as an empty method body, and `ImportedRole` (same-account, still
50
+ * mutable) attaches only if the policy exposes `attachToRole`, which
51
+ * `ManagedPolicy.fromAwsManagedPolicyName` does not, so it takes the warning
52
+ * branch. Both confirmed on a synthesized template: no `AWS::IAM::Role` and no
53
+ * `AWS::IAM::Policy` appears either way. Typed `IRole`, this function would
54
+ * silently no-op for every imported role and ship exactly the cannot-start
55
+ * Lambda it exists to prevent, and no runtime guard is available -
56
+ * `ImmutableRole.addToPrincipalPolicy` reports `statementAdded: true` while
57
+ * emitting nothing. Narrowing moves the failure to COMPILE time.
80
58
  *
81
- * Residual, documented rather than guarded because of its rarity: a role
82
- * produced under `Role.customizeRoles` carries a precreated `ImportedRole` that
83
- * `addManagedPolicy` delegates to, landing on the warning branch above.
59
+ * Residual, documented rather than guarded: a role from `Role.customizeRoles`
60
+ * carries a precreated `ImportedRole` and lands on that same warning branch.
84
61
  */
85
62
  export function attachLambdaExecutionPolicies(role, options) {
86
63
  role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName(BASIC_EXECUTION_POLICY));
package/dist/index.js CHANGED
@@ -1,6 +1,4 @@
1
- // Worker daemon
2
1
  export { CmsWorker } from './worker.js';
3
- // CDK Constructs
4
2
  export { CanopyCmsService } from './constructs/cms-service.js';
5
3
  export { CanopyCmsDistribution } from './constructs/cms-distribution.js';
6
4
  export { AssetSupport, assetUploadBehavior } from './constructs/asset-support.js';
package/dist/worker.d.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  /**
2
- * Re-export CmsWorker from the core canopycms package.
3
2
  * The worker is cloud-agnostic and auth-agnostic — it lives in canopycms core.
4
- * This file re-exports it for convenience from the CDK package.
5
3
  */
6
4
  export { CmsWorker } from 'canopycms/worker/cms-worker';
7
5
  export type { CmsWorkerConfig, AuthCacheRefresher } from 'canopycms/worker/cms-worker';
package/dist/worker.js CHANGED
@@ -1,6 +1,4 @@
1
1
  /**
2
- * Re-export CmsWorker from the core canopycms package.
3
2
  * The worker is cloud-agnostic and auth-agnostic — it lives in canopycms core.
4
- * This file re-exports it for convenience from the CDK package.
5
3
  */
6
4
  export { CmsWorker } from 'canopycms/worker/cms-worker';
@@ -4522,18 +4522,18 @@ var init_config = __esm({
4522
4522
  onAccountClick: external_exports.function().returns(external_exports.void()).optional(),
4523
4523
  onLogoutClick: external_exports.function().returns(external_exports.void()).optional(),
4524
4524
  // Optional: custom account component (e.g., Clerk's UserButton)
4525
- AccountComponent: external_exports.custom().optional()
4525
+ AccountComponent: external_exports.custom().optional(),
4526
+ // Optional: provider sign-in UI for signed-out users (see EditorSignInProps)
4527
+ SignInComponent: external_exports.custom().optional()
4526
4528
  });
4527
4529
  CanopyConfigSchema = external_exports.object({
4528
4530
  media: mediaSchema.optional(),
4529
- // No outer .optional() here: defaultBranchAccessSchema/defaultPathAccessSchema already
4530
- // have .default('deny'), so the field is optional on input but always resolves to
4531
- // 'allow'/'deny' (never undefined) on output. An outer .optional() would short-circuit
4532
- // before the inner default runs, defeating the fail-closed default (SCH-M1).
4533
- // defaultPathAccessSchema's union keeps the same rule: the .default('deny') sits on the
4534
- // OUTER union, not inside defaultPathAccessLevelsSchema, so an omitted top-level field
4535
- // still resolves to 'deny' and an omitted level inside the object form stays undefined
4536
- // (resolved to 'deny' at read time by resolveDefaultPathAccess).
4531
+ // No outer .optional(): both schemas already .default('deny'), so the field is optional on
4532
+ // input but always resolves to 'allow'/'deny' (never undefined) on output — an outer
4533
+ // .optional() would short-circuit before the inner default runs, defeating the fail-closed
4534
+ // default (SCH-M1). defaultPathAccessSchema's .default('deny') sits on the OUTER union, not
4535
+ // inside defaultPathAccessLevelsSchema, so an omitted level in the object form stays
4536
+ // undefined (resolved to 'deny' at read time by resolveDefaultPathAccess).
4537
4537
  defaultBranchAccess: defaultBranchAccessSchema,
4538
4538
  defaultPathAccess: defaultPathAccessSchema,
4539
4539
  // .optional() deliberately defeats defaultBaseBranchSchema's .default('main'):
@@ -4557,16 +4557,11 @@ var init_config = __esm({
4557
4557
  allowNetworkRemoteInProd: external_exports.boolean().optional(),
4558
4558
  settingsBranch: external_exports.string().optional(),
4559
4559
  autoCreateSettingsPR: external_exports.boolean().optional(),
4560
- // Deliberately `deploymentNameSchema.optional()`, NOT `deploymentNameSchema` alone.
4561
- // deploymentNameSchema.default('prod') would make `parse(undefined)` resolve to
4562
- // the literal 'prod' instead of staying `undefined` — collapsing the
4563
- // env > config > modeDefault precedence chain that resolveDeploymentName
4564
- // (operating-mode/deployment-name.ts) implements: config would then always
4565
- // "win" over modeDefault (masking dev's real default of 'local'), and the env
4566
- // var would just be racing config's baked-in 'prod' instead of a true absence.
4567
- // `.optional()` here is what keeps an omitted deploymentName reaching
4568
- // resolveDeploymentName as `undefined`, so it can fall through to modeDefault.
4569
- // Do not "fix" this by removing `.optional()`.
4560
+ // `.optional()`, NOT bare `deploymentNameSchema`: its own `.default('prod')` would make
4561
+ // `parse(undefined)` resolve to 'prod' instead of staying `undefined`, collapsing the
4562
+ // env > config > modeDefault precedence chain `resolveDeploymentName`
4563
+ // (operating-mode/deployment-name.ts) implements — config would always "win" over
4564
+ // modeDefault, masking dev's real default of 'local'. Do not remove `.optional()`.
4570
4565
  deploymentName: deploymentNameSchema.optional(),
4571
4566
  contentRoot: contentRootSchema.default("content"),
4572
4567
  sourceRoot: sourceRootSchema.optional(),
@@ -24061,15 +24056,11 @@ var DebugLogger = class {
24061
24056
  return LOG_LEVELS[level] >= LOG_LEVELS[minLevel];
24062
24057
  }
24063
24058
  /**
24064
- * The ISO-8601 timestamp leads the line BARE - not wrapped in brackets as it
24065
- * once was. `CANOPYCMS_DEBUG=true` can be set on the EC2 worker, whose stdout
24066
- * appends to /var/log/canopy-worker/worker.log; the CloudWatch agent's
24067
- * `multi_line_start_pattern` matches the timestamp at the START of a line
24068
- * (see worker/log.ts's INVARIANT and cms-service.ts's agent config), so a
24069
- * leading `[` meant every debug line was silently folded into the previous
24070
- * event instead of starting its own. The bracketed `[prefix:category]` and
24071
- * `[level]` fields still follow, so the human-readable shape is unchanged
24072
- * apart from those two characters.
24059
+ * The ISO-8601 timestamp leads the line BARE, never bracketed. `CANOPYCMS_DEBUG=true` can
24060
+ * be set on the EC2 worker, whose stdout appends to /var/log/canopy-worker/worker.log, and
24061
+ * the CloudWatch agent's `multi_line_start_pattern` matches a timestamp at the START of a
24062
+ * line (see worker/log.ts's INVARIANT and cms-service.ts's agent config): any leading
24063
+ * character folds the line into the previous event instead of starting its own.
24073
24064
  */
24074
24065
  formatMessage(level, category, message) {
24075
24066
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
@@ -24102,15 +24093,9 @@ var DebugLogger = class {
24102
24093
  throw new Error(errorMsg);
24103
24094
  }
24104
24095
  }
24105
- /**
24106
- * Start timing an operation
24107
- */
24108
24096
  time(label) {
24109
24097
  this.timers.set(label, Date.now());
24110
24098
  }
24111
- /**
24112
- * End timing an operation and log the duration
24113
- */
24114
24099
  timeEnd(category, label) {
24115
24100
  const start = this.timers.get(label);
24116
24101
  if (start === void 0) {
@@ -24122,9 +24107,6 @@ var DebugLogger = class {
24122
24107
  this.debug(category, `${label} completed`, { durationMs: duration });
24123
24108
  return duration;
24124
24109
  }
24125
- /**
24126
- * Wrap an async function with automatic timing
24127
- */
24128
24110
  async timed(category, label, fn) {
24129
24111
  this.time(label);
24130
24112
  try {
@@ -30130,10 +30112,10 @@ var permissionPathSchema = external_exports.string().min(1).transform((val, ctx)
30130
30112
  return result.path;
30131
30113
  });
30132
30114
  var PermissionsFileSchema = external_exports.object({
30133
- // Managed by writeOccJsonFile (see authorization/settings-file-store.ts) —
30134
- // the single OCC counter for this file. Optional so a hand-written file
30135
- // with no version field parses as version 0. A legacy `contentVersion`
30136
- // field (if present) is silently stripped by this non-strict zod parse.
30115
+ // Managed by writeOccJsonFile (see authorization/settings-file-store.ts):
30116
+ // the single OCC counter for this file. Optional so a hand-written file with
30117
+ // no version field parses as version 0; a stray `contentVersion` key is
30118
+ // silently stripped by this non-strict zod parse.
30137
30119
  version: external_exports.number().int().nonnegative().optional(),
30138
30120
  writeId: external_exports.string().optional(),
30139
30121
  updatedAt: external_exports.string().datetime(),
@@ -30157,10 +30139,10 @@ init_error();
30157
30139
  // ../canopycms/src/authorization/groups/schema.ts
30158
30140
  init_zod();
30159
30141
  var GroupsFileSchema = external_exports.object({
30160
- // Managed by writeOccJsonFile (see authorization/settings-file-store.ts) —
30161
- // the single OCC counter for this file. Optional so a hand-written file
30162
- // with no version field parses as version 0. A legacy `contentVersion`
30163
- // field (if present) is silently stripped by this non-strict zod parse.
30142
+ // Managed by writeOccJsonFile (see authorization/settings-file-store.ts):
30143
+ // the single OCC counter for this file. Optional so a hand-written file with
30144
+ // no version field parses as version 0; a stray `contentVersion` key is
30145
+ // silently stripped by this non-strict zod parse.
30164
30146
  version: external_exports.number().int().nonnegative().optional(),
30165
30147
  writeId: external_exports.string().optional(),
30166
30148
  updatedAt: external_exports.string().datetime(),
@@ -30193,10 +30175,10 @@ var ThrottledOctokit = import_rest.Octokit.plugin(import_plugin_throttling.throt
30193
30175
  // ../canopycms/src/services.ts
30194
30176
  init_operating_mode();
30195
30177
 
30196
- // ../canopycms/src/worker/task-queue.ts
30178
+ // ../canopycms/src/task-queue/cms-task-queue.ts
30197
30179
  var debugLogger = createDebugLogger({ prefix: "TaskQueue" });
30198
30180
 
30199
- // ../canopycms/src/worker/task-queue-config.ts
30181
+ // ../canopycms/src/task-queue/task-queue-config.ts
30200
30182
  init_config3();
30201
30183
 
30202
30184
  // ../canopycms/src/url-path-resolver.ts
@@ -30433,7 +30415,7 @@ var ASSET_PREFIXES = {
30433
30415
  function createKeyBuilders(prefixes = ASSET_PREFIXES) {
30434
30416
  return {
30435
30417
  originalKey: (hash32, ext2) => `${prefixes.originals}/${hash32}.${ext2}`,
30436
- /** Prefix used to look up an original by hash32 alone (extension unknown ahead of time). */
30418
+ /** Prefix for looking up an original by hash32 alone (extension unknown ahead of time). */
30437
30419
  originalPrefix: (hash32) => `${prefixes.originals}/${hash32}.`,
30438
30420
  stagingKey: (uuid) => `${prefixes.staging}/${uuid}`,
30439
30421
  metaKey: (hash32) => `${prefixes.meta}/${hash32}.json`,
@@ -30441,7 +30423,9 @@ function createKeyBuilders(prefixes = ASSET_PREFIXES) {
30441
30423
  publicKey: (hash32, slug, ext2) => `${prefixes.public}/${hash32}/${slug}.${ext2}`
30442
30424
  };
30443
30425
  }
30444
- var { originalKey, originalPrefix, stagingKey, metaKey, metaPrefix, publicKey } = createKeyBuilders();
30426
+ var keyBuilders = createKeyBuilders();
30427
+ var { originalKey, stagingKey, metaKey, publicKey } = keyBuilders;
30428
+ var { originalPrefix, metaPrefix } = keyBuilders;
30445
30429
 
30446
30430
  // ../canopycms/src/assets/store-local.ts
30447
30431
  var DEFAULT_MAX_UPLOAD_BYTES = 50 * 1024 * 1024;
@@ -22,9 +22,9 @@
22
22
  }
23
23
  },
24
24
  "node_modules/@img/sharp-libvips-linux-arm64": {
25
- "version": "1.3.3",
26
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.3.tgz",
27
- "integrity": "sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==",
25
+ "version": "1.3.4",
26
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.4.tgz",
27
+ "integrity": "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==",
28
28
  "cpu": [
29
29
  "arm64"
30
30
  ],
@@ -38,9 +38,9 @@
38
38
  }
39
39
  },
40
40
  "node_modules/@img/sharp-linux-arm64": {
41
- "version": "0.35.4",
42
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.4.tgz",
43
- "integrity": "sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==",
41
+ "version": "0.35.5",
42
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.5.tgz",
43
+ "integrity": "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==",
44
44
  "cpu": [
45
45
  "arm64"
46
46
  ],
@@ -56,13 +56,13 @@
56
56
  "url": "https://opencollective.com/libvips"
57
57
  },
58
58
  "optionalDependencies": {
59
- "@img/sharp-libvips-linux-arm64": "1.3.3"
59
+ "@img/sharp-libvips-linux-arm64": "1.3.4"
60
60
  }
61
61
  },
62
62
  "node_modules/@img/sharp-wasm32": {
63
- "version": "0.35.4",
64
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.4.tgz",
65
- "integrity": "sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==",
63
+ "version": "0.35.5",
64
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.5.tgz",
65
+ "integrity": "sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==",
66
66
  "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
67
67
  "optional": true,
68
68
  "dependencies": {
@@ -97,9 +97,9 @@
97
97
  }
98
98
  },
99
99
  "node_modules/sharp": {
100
- "version": "0.35.4",
101
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.4.tgz",
102
- "integrity": "sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==",
100
+ "version": "0.35.5",
101
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.5.tgz",
102
+ "integrity": "sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==",
103
103
  "license": "Apache-2.0",
104
104
  "dependencies": {
105
105
  "@img/colour": "^1.1.0",
@@ -113,31 +113,31 @@
113
113
  "url": "https://opencollective.com/libvips"
114
114
  },
115
115
  "optionalDependencies": {
116
- "@img/sharp-darwin-arm64": "0.35.4",
117
- "@img/sharp-darwin-x64": "0.35.4",
118
- "@img/sharp-freebsd-wasm32": "0.35.4",
119
- "@img/sharp-libvips-darwin-arm64": "1.3.3",
120
- "@img/sharp-libvips-darwin-x64": "1.3.3",
121
- "@img/sharp-libvips-linux-arm": "1.3.3",
122
- "@img/sharp-libvips-linux-arm64": "1.3.3",
123
- "@img/sharp-libvips-linux-ppc64": "1.3.3",
124
- "@img/sharp-libvips-linux-riscv64": "1.3.3",
125
- "@img/sharp-libvips-linux-s390x": "1.3.3",
126
- "@img/sharp-libvips-linux-x64": "1.3.3",
127
- "@img/sharp-libvips-linuxmusl-arm64": "1.3.3",
128
- "@img/sharp-libvips-linuxmusl-x64": "1.3.3",
129
- "@img/sharp-linux-arm": "0.35.4",
130
- "@img/sharp-linux-arm64": "0.35.4",
131
- "@img/sharp-linux-ppc64": "0.35.4",
132
- "@img/sharp-linux-riscv64": "0.35.4",
133
- "@img/sharp-linux-s390x": "0.35.4",
134
- "@img/sharp-linux-x64": "0.35.4",
135
- "@img/sharp-linuxmusl-arm64": "0.35.4",
136
- "@img/sharp-linuxmusl-x64": "0.35.4",
137
- "@img/sharp-webcontainers-wasm32": "0.35.4",
138
- "@img/sharp-win32-arm64": "0.35.4",
139
- "@img/sharp-win32-ia32": "0.35.4",
140
- "@img/sharp-win32-x64": "0.35.4"
116
+ "@img/sharp-darwin-arm64": "0.35.5",
117
+ "@img/sharp-darwin-x64": "0.35.5",
118
+ "@img/sharp-freebsd-wasm32": "0.35.5",
119
+ "@img/sharp-libvips-darwin-arm64": "1.3.4",
120
+ "@img/sharp-libvips-darwin-x64": "1.3.4",
121
+ "@img/sharp-libvips-linux-arm": "1.3.4",
122
+ "@img/sharp-libvips-linux-arm64": "1.3.4",
123
+ "@img/sharp-libvips-linux-ppc64": "1.3.4",
124
+ "@img/sharp-libvips-linux-riscv64": "1.3.4",
125
+ "@img/sharp-libvips-linux-s390x": "1.3.4",
126
+ "@img/sharp-libvips-linux-x64": "1.3.4",
127
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.4",
128
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.4",
129
+ "@img/sharp-linux-arm": "0.35.5",
130
+ "@img/sharp-linux-arm64": "0.35.5",
131
+ "@img/sharp-linux-ppc64": "0.35.5",
132
+ "@img/sharp-linux-riscv64": "0.35.5",
133
+ "@img/sharp-linux-s390x": "0.35.5",
134
+ "@img/sharp-linux-x64": "0.35.5",
135
+ "@img/sharp-linuxmusl-arm64": "0.35.5",
136
+ "@img/sharp-linuxmusl-x64": "0.35.5",
137
+ "@img/sharp-webcontainers-wasm32": "0.35.5",
138
+ "@img/sharp-win32-arm64": "0.35.5",
139
+ "@img/sharp-win32-ia32": "0.35.5",
140
+ "@img/sharp-win32-x64": "0.35.5"
141
141
  },
142
142
  "peerDependenciesMeta": {
143
143
  "@types/node": {
@@ -10,7 +10,7 @@ used under the terms of the following licenses:
10
10
  | Library | Used under the terms of |
11
11
  |---------------|-----------------------------------------------------------------------------------------------------------|
12
12
  | aom | BSD 2-Clause + [Alliance for Open Media Patent License 1.0](https://aomedia.org/license/patent-license/) |
13
- | cairo | Mozilla Public License 2.0 |
13
+ | cairo | Mozilla Public License 1.1 |
14
14
  | cgif | MIT License |
15
15
  | expat | MIT License |
16
16
  | fontconfig | [fontconfig License](https://gitlab.freedesktop.org/fontconfig/fontconfig/blob/main/COPYING) (BSD-like) |
@@ -112,8 +112,8 @@ typedef unsigned long guintptr;
112
112
  #define G_GUINTPTR_FORMAT "lu"
113
113
 
114
114
  #define GLIB_MAJOR_VERSION 2
115
- #define GLIB_MINOR_VERSION 89
116
- #define GLIB_MICRO_VERSION 4
115
+ #define GLIB_MINOR_VERSION 90
116
+ #define GLIB_MICRO_VERSION 0
117
117
 
118
118
  #define G_OS_UNIX
119
119
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@img/sharp-libvips-linux-arm64",
3
- "version": "1.3.3",
3
+ "version": "1.3.4",
4
4
  "description": "Prebuilt libvips and dependencies for use with sharp on Linux (glibc) 64-bit ARM",
5
5
  "author": "Lovell Fuller <npm@lovell.info>",
6
6
  "homepage": "https://sharp.pixelplumbing.com",
@@ -26,7 +26,7 @@
26
26
  "./lib": "./lib/index.js",
27
27
  "./package": "./package.json",
28
28
  "./versions": "./versions.json",
29
- "./binary": "./lib/libvips-cpp.so.8.18.6"
29
+ "./binary": "./lib/libvips-cpp.so.8.18.7"
30
30
  },
31
31
  "config": {
32
32
  "glibc": ">=2.28"
@@ -1,17 +1,17 @@
1
1
  {
2
- "aom": "3.15.0",
2
+ "aom": "3.15.1",
3
3
  "archive": "3.8.9",
4
- "cairo": "1.18.4",
5
- "cgif": "0.5.3",
4
+ "cairo": "1.18.6",
5
+ "cgif": "0.5.4",
6
6
  "exif": "0.6.26",
7
- "expat": "2.8.3",
7
+ "expat": "2.8.5",
8
8
  "ffi": "3.8.0",
9
9
  "fontconfig": "2.18.3",
10
10
  "freetype": "2.14.3",
11
- "fribidi": "1.0.16",
12
- "glib": "2.89.4",
13
- "harfbuzz": "14.3.1",
14
- "heif": "1.23.2",
11
+ "fribidi": "1.0.17",
12
+ "glib": "2.90.0",
13
+ "harfbuzz": "14.5.0",
14
+ "heif": "1.23.5",
15
15
  "highway": "1.4.0",
16
16
  "imagequant": "2.4.1",
17
17
  "lcms": "2.19.1",
@@ -20,11 +20,11 @@
20
20
  "pixman": "0.46.4",
21
21
  "png": "1.6.58",
22
22
  "proxy-libintl": "0.5",
23
- "rsvg": "2.62.91",
23
+ "rsvg": "2.63.2",
24
24
  "tiff": "4.7.2",
25
25
  "uhdr": "2.0.2",
26
- "vips": "8.18.6",
26
+ "vips": "8.18.7",
27
27
  "webp": "1.6.0",
28
- "xml2": "2.15.3",
28
+ "xml2": "2.15.4",
29
29
  "zlib-ng": "2.3.3"
30
30
  }
@@ -1,2 +1,2 @@
1
1
  try { require.resolve('@img/sharp-libvips-linux-arm64/binary'); } catch {}
2
- module.exports = require('./lib/sharp-linux-arm64-0.35.4.node');
2
+ module.exports = require('./lib/sharp-linux-arm64-0.35.5.node');
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@img/sharp-linux-arm64",
3
- "version": "0.35.4",
3
+ "version": "0.35.5",
4
4
  "description": "Prebuilt sharp for use with Linux (glibc) 64-bit ARM",
5
5
  "author": "Lovell Fuller <npm@lovell.info>",
6
6
  "homepage": "https://sharp.pixelplumbing.com",
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "preferUnplugged": true,
17
17
  "optionalDependencies": {
18
- "@img/sharp-libvips-linux-arm64": "1.3.3"
18
+ "@img/sharp-libvips-linux-arm64": "1.3.4"
19
19
  },
20
20
  "files": [
21
21
  "index.cjs",
@@ -1 +1 @@
1
- module.exports = require('./lib/sharp-wasm32-0.35.4.node');
1
+ module.exports = require('./lib/sharp-wasm32-0.35.5.node');