diff --git a/package.json b/package.json index f852ebd6..f18371c5 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,8 @@ "@nx/plugin": "19.6.1", "@nx/react": "19.6.1", "@nx/webpack": "19.6.1", + "@pulumi/gcp": "^7.37.0", + "@pulumi/pulumi": "^3.129.0", "@swc-node/register": "1.10.9", "@swc/core": "1.7.14", "@types/jest": "29.5.12", diff --git a/packages/pulumi/package.json b/packages/pulumi/package.json index 7c5db8c1..272cedff 100644 --- a/packages/pulumi/package.json +++ b/packages/pulumi/package.json @@ -16,7 +16,11 @@ "license": "MIT", "main": "src/index.js", "peerDependencies": { - "@nx/devkit": "^19.6.0" + "@nx/devkit": "^19.6.0", + "@pulumi/pulumi": "^3.129.0" + }, + "optionalDependencies": { + "@pulumi/gcp": "^7.37.0" }, "builders": "./executors.json", "generators": "./generators.json" diff --git a/packages/pulumi/src/gcp/config.ts b/packages/pulumi/src/gcp/config.ts new file mode 100644 index 00000000..957ba3b9 --- /dev/null +++ b/packages/pulumi/src/gcp/config.ts @@ -0,0 +1,10 @@ +import * as pulumi from '@pulumi/pulumi' + +export const config = new pulumi.Config('gcpR') +export const gcpConfig = new pulumi.Config('gcp') + +export const GCP_PROJECT_ID = gcpConfig.require('project') +export const GCP_PROJECT_NUMBER = config.require('projectNumber') + +export const GCP_DEFAULT_REGION = config.get('defaultRegion') || 'europe-west4' +export const GCP_DEFAULT_REGION_CRONS = config.get('defaultCronRegion') || 'europe-west1' diff --git a/packages/pulumi/src/gcp/default-service-accounts.ts b/packages/pulumi/src/gcp/default-service-accounts.ts new file mode 100644 index 00000000..011a8055 --- /dev/null +++ b/packages/pulumi/src/gcp/default-service-accounts.ts @@ -0,0 +1,55 @@ +import { GCP_PROJECT_NUMBER } from './index' + +// Cloud Memorystore Redis Service Agent +export const saCloudMemorystoreRedisServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@cloud-redis.iam.gserviceaccount.com` + +// Compute Engine Service Agent +export const saComputeEngineServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@compute-system.iam.gserviceaccount.com` + +// Kubernetes Engine Service Agent +export const saKubernetesEngineServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@container-engine-robot.iam.gserviceaccount.com` + +// Container Registry Service Agent +export const saContainerRegistryServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@containerregistry.iam.gserviceaccount.com` + +// Firebase Rules System +export const saFirebaseRulesSystem = `serviceAccount:service-${GCP_PROJECT_NUMBER}@firebase-rules.iam.gserviceaccount.com` + +// Cloud Functions Service Agent +export const saCloudFunctionsServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcf-admin-robot.iam.gserviceaccount.com` + +// App Engine Standard Environment Service Agent +export const saAppEngineStandardEnvironmentServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-gae-service.iam.gserviceaccount.com` + +// Artifact Registry Service Agent +export const saArtifactRegistryServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-artifactregistry.iam.gserviceaccount.com` + +// Cloud Asset Service Agent +export const saCloudAssetServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-cloudasset.iam.gserviceaccount.com` + +// Cloud Build Service Agent +export const saCloudBuildServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com` + +// Cloud Scheduler Service Agent +export const saCloudSchedulerServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-cloudscheduler.iam.gserviceaccount.com` + +// Cloud Tasks Service Agent +export const saCloudTasksServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-cloudtasks.iam.gserviceaccount.com` + +// Eventarc Service Agent +export const saEventArcServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-eventarc.iam.gserviceaccount.com` + +// Firebase Service Management Service Agent +export const saFirebaseServiceManagementServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-firebase.iam.gserviceaccount.com` + +// Firebase Extensions API Service Agent +export const saFirebaseExtensionsAPIServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-firebasemods.iam.gserviceaccount.com` + +// Firestore Service Agent +export const saFirestoreServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-firestore.iam.gserviceaccount.com` + +// Monitoring Service Agent +export const saMonitoringServiceAgent = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-monitoring-notification.iam.gserviceaccount.com` + +// Cloud Pub/Sub Service Account +export const saCloudPubSubServiceAccount = `serviceAccount:service-${GCP_PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com` diff --git a/packages/pulumi/src/gcp/iam-roles.ts b/packages/pulumi/src/gcp/iam-roles.ts new file mode 100644 index 00000000..1257ce16 --- /dev/null +++ b/packages/pulumi/src/gcp/iam-roles.ts @@ -0,0 +1,308 @@ +export const iamRoles = { + cloudSql: { + // Connects to CloudSQL databases + client: 'roles/cloudsql.client', + // Administers CloudSQL instances + admin: 'roles/cloudsql.admin', + // Provides read-only access to CloudSQL instances + viewer: 'roles/cloudsql.viewer', + // Creates and manages CloudSQL instances + creator: 'roles/cloudsql.instanceUser', + // Full access to CloudSQL backups + backupAdmin: 'roles/cloudsql.backupAdmin' + }, + pubSub: { + // Publishes messages to PubSub + publisher: 'roles/pubsub.publisher', + // Administers PubSub resources + admin: 'roles/pubsub.admin', + // Consumes PubSub messages + subscriber: 'roles/pubsub.subscriber', + // Provides read-only access to PubSub topics and subscriptions + viewer: 'roles/pubsub.viewer', + // Creates and manages PubSub topics + topicAdmin: 'roles/pubsub.topicAdmin' + }, + storage: { + // Administers Storage resources + admin: 'roles/storage.admin', + // Provides read/write access to Storage objects + objectAdmin: 'roles/storage.objectAdmin', + // Provides read-only access to Storage objects + objectViewer: 'roles/storage.objectViewer', + // Provides read/write access to Storage buckets + bucketAdmin: 'roles/storage.bucketAdmin', + // Provides specific permissions to Storage bucket metadata + bucketMetadataAdmin: 'roles/storage.bucketMetadataAdmin', + // Provides legacy role for reading Storage buckets + legacyBucketReader: 'roles/storage.legacyBucketReader', + // Provides legacy role for writing Storage buckets + legacyBucketWriter: 'roles/storage.legacyBucketWriter' + }, + bigQuery: { + // Administers BigQuery resources + admin: 'roles/bigquery.admin', + // Provides read/write access to BigQuery data + dataEditor: 'roles/bigquery.dataEditor', + // Provides read-only access to BigQuery data + dataViewer: 'roles/bigquery.dataViewer', + // Provides read/write access to BigQuery datasets + datasetEditor: 'roles/bigquery.datasetEditor', + // Provides read-only access to BigQuery datasets + datasetViewer: 'roles/bigquery.datasetViewer', + // General user role for BigQuery + user: 'roles/bigquery.user', + // Creates and manages BigQuery jobs + jobUser: 'roles/bigquery.jobUser' + }, + computeEngine: { + // Administers Compute Engine resources + admin: 'roles/compute.admin', + // Provides read-only access to Compute Engine resources + viewer: 'roles/compute.viewer', + // Provides access to instance admin operations + instanceAdmin: 'roles/compute.instanceAdmin.v1', + // Provides access to snapshot resources + snapshotAdmin: 'roles/compute.snapshotAdmin', + // Provides read/write access to instance network configurations + networkAdmin: 'roles/compute.networkAdmin', + // Manages security aspects of Compute Engine + securityAdmin: 'roles/compute.securityAdmin' + }, + functions: { + // Administers Cloud Functions + admin: 'roles/cloudfunctions.admin', + // Invokes deployed Cloud Functions + invoker: 'roles/cloudfunctions.invoker', + // Provides read-only access to Cloud Functions + viewer: 'roles/cloudfunctions.viewer', + // Develops and manages Cloud Functions + developer: 'roles/cloudfunctions.developer' + }, + iam: { + // Administers IAM policies + admin: 'roles/iam.admin', + // Provides read-only access to IAM policies + viewer: 'roles/iam.viewer', + // Manages service accounts + serviceAccountManager: 'roles/iam.serviceAccountAdmin', + // Manages service account keys + serviceAccountKeyAdmin: 'roles/iam.serviceAccountKeyAdmin', + // Manages IAM roles + roleAdmin: 'roles/iam.roleAdmin', + // Reviews IAM security settings + securityReviewer: 'roles/iam.securityReviewer', + // Manages organization-wide roles + organizationRoleAdmin: 'roles/iam.organizationRoleAdmin', + // Allows workload identity to be used with Kubernetes + workloadIdentityUser: 'roles/iam.workloadIdentityUser' + }, + profiler: { + // Administers Cloud Profiler resources + admin: 'roles/cloudprofiler.admin', + // Provides read-only access to Cloud Profiler data + viewer: 'roles/cloudprofiler.viewer', + // Collects profiling data + agent: 'roles/cloudprofiler.agent' + }, + tracer: { + // Administers Cloud Trace resources + admin: 'roles/cloudtrace.admin', + // Provides read-only access to Cloud Trace data + viewer: 'roles/cloudtrace.viewer', + // Collects trace data + agent: 'roles/cloudtrace.agent' + }, + cloudRun: { + // Administers Cloud Run services + admin: 'roles/run.admin', + // Invokes Cloud Run services + invoker: 'roles/run.invoker', + // Provides read-only access to Cloud Run services + viewer: 'roles/run.viewer', + // Develops and manages Cloud Run services + developer: 'roles/run.developer' + }, + cloudTasks: { + // Administers Cloud Tasks resources + admin: 'roles/cloudtasks.admin', + // Enqueues tasks into Cloud Tasks + enqueuer: 'roles/cloudtasks.enqueuer', + // Provides read-only access to Cloud Tasks resources + viewer: 'roles/cloudtasks.viewer', + // Develops and manages Cloud Tasks resources + developer: 'roles/cloudtasks.developer' + }, + monitoring: { + // Administers monitoring configurations + admin: 'roles/monitoring.admin', + // Edits monitoring configurations + editor: 'roles/monitoring.editor', + // Provides read-only access to monitoring data + viewer: 'roles/monitoring.viewer', + // Writes metrics to monitoring + metricWriter: 'roles/monitoring.metricWriter' + }, + logging: { + // Administers logging configurations + admin: 'roles/logging.admin', + // Writes logging configurations + configWriter: 'roles/logging.configWriter', + // Writes logs + logWriter: 'roles/logging.logWriter', + // Reads logging data + viewer: 'roles/logging.viewer' + }, + networkServices: { + // Administers network services + admin: 'roles/networkservices.admin', + // Provides read-only access to network services + viewer: 'roles/networkservices.viewer', + // Manages network service configurations + serviceManager: 'roles/networkservices.servicemanager' + }, + dns: { + // Administers Cloud DNS resources + admin: 'roles/dns.admin', + // Edits Cloud DNS resources + editor: 'roles/dns.editor', + // Provides read-only access to Cloud DNS resources + viewer: 'roles/dns.viewer' + }, + secretManager: { + // Administers Secret Manager resources + admin: 'roles/secretmanager.admin', + // Accesses secret data in Secret Manager + secretAccessor: 'roles/secretmanager.secretAccessor', + // Provides read-only access to Secret Manager + viewer: 'roles/secretmanager.viewer' + }, + spanner: { + // Administers Cloud Spanner instances and databases + admin: 'roles/spanner.admin', + // Grants read/write access to Cloud Spanner databases + databaseAdmin: 'roles/spanner.databaseAdmin', + // Grants read-only access to Cloud Spanner databases + databaseReader: 'roles/spanner.databaseReader', + // Provides read-only access to Cloud Spanner instance configs + viewer: 'roles/spanner.viewer' + } +}; + +export const iamPermissions = { + cloudSql: { + // Backup runs permissions + backupRunsCreate: 'cloudsql.backupRuns.create', + backupRunsDelete: 'cloudsql.backupRuns.delete', + backupRunsGet: 'cloudsql.backupRuns.get', + backupRunsList: 'cloudsql.backupRuns.list', + backupRunsUpdate: 'cloudsql.backupRuns.update', + // Database permissions + databasesCreate: 'cloudsql.databases.create', + databasesDelete: 'cloudsql.databases.delete', + databasesGet: 'cloudsql.databases.get', + databasesList: 'cloudsql.databases.list', + databasesUpdate: 'cloudsql.databases.update', + // Instance permissions + instancesCreate: 'cloudsql.instances.create', + instancesDelete: 'cloudsql.instances.delete', + instancesGet: 'cloudsql.instances.get', + instancesList: 'cloudsql.instances.list', + instancesUpdate: 'cloudsql.instances.update' + }, + pubSub: { + // Subscription permissions + subscriptionsConsume: 'pubsub.subscriptions.consume', + subscriptionsCreate: 'pubsub.subscriptions.create', + subscriptionsDelete: 'pubsub.subscriptions.delete', + subscriptionsGet: 'pubsub.subscriptions.get', + subscriptionsList: 'pubsub.subscriptions.list', + subscriptionsUpdate: 'pubsub.subscriptions.update', + // Topic permissions + topicsAttachSubscription: 'pubsub.topics.attachSubscription', + topicsCreate: 'pubsub.topics.create', + topicsDelete: 'pubsub.topics.delete', + topicsGet: 'pubsub.topics.get', + topicsList: 'pubsub.topics.list', + topicsPublish: 'pubsub.topics.publish', + topicsUpdate: 'pubsub.topics.update' + }, + storage: { + // Bucket permissions + bucketsCreate: 'storage.buckets.create', + bucketsDelete: 'storage.buckets.delete', + bucketsGet: 'storage.buckets.get', + bucketsList: 'storage.buckets.list', + bucketsUpdate: 'storage.buckets.update', + // Object permissions + objectsCreate: 'storage.objects.create', + objectsDelete: 'storage.objects.delete', + objectsGet: 'storage.objects.get', + objectsList: 'storage.objects.list', + objectsUpdate: 'storage.objects.update' + }, + bigQuery: { + // Dataset permissions + datasetsCreate: 'bigquery.datasets.create', + datasetsDelete: 'bigquery.datasets.delete', + datasetsGet: 'bigquery.datasets.get', + datasetsList: 'bigquery.datasets.list', + datasetsUpdate: 'bigquery.datasets.update', + // Job permissions + jobsCreate: 'bigquery.jobs.create', + jobsGet: 'bigquery.jobs.get', + jobsList: 'bigquery.jobs.list', + // Table permissions + tablesCreate: 'bigquery.tables.create', + tablesDelete: 'bigquery.tables.delete', + tablesExport: 'bigquery.tables.export', + tablesGet: 'bigquery.tables.get', + tablesList: 'bigquery.tables.list', + tablesUpdate: 'bigquery.tables.update' + }, + computeEngine: { + // Instance permissions + instancesStart: 'compute.instances.start', + instancesStop: 'compute.instances.stop', + instancesCreate: 'compute.instances.create', + instancesDelete: 'compute.instances.delete', + instancesGet: 'compute.instances.get', + instancesList: 'compute.instances.list', + instancesUpdate: 'compute.instances.update', + // Image permissions + imagesCreate: 'compute.images.create', + imagesDelete: 'compute.images.delete', + imagesGet: 'compute.images.get', + imagesList: 'compute.images.list', + imagesUpdate: 'compute.images.update' + }, + functions: { + // Cloud Function permissions + functionsCreate: 'cloudfunctions.functions.create', + functionsDelete: 'cloudfunctions.functions.delete', + functionsGet: 'cloudfunctions.functions.get', + functionsList: 'cloudfunctions.functions.list', + functionsUpdate: 'cloudfunctions.functions.update', + // Operation permissions + functionsOperationsGet: 'cloudfunctions.operations.get', + functionsOperationsList: 'cloudfunctions.operations.list' + }, + iam: { + // Role permissions + rolesCreate: 'iam.roles.create', + rolesDelete: 'iam.roles.delete', + rolesGet: 'iam.roles.get', + rolesList: 'iam.roles.list', + rolesUpdate: 'iam.roles.update', + // Service account key permissions + serviceAccountKeysCreate: 'iam.serviceAccountKeys.create', + serviceAccountKeysDelete: 'iam.serviceAccountKeys.delete', + serviceAccountKeysGet: 'iam.serviceAccountKeys.get', + // Service account permissions + serviceAccountsCreate: 'iam.serviceAccounts.create', + serviceAccountsDelete: 'iam.serviceAccounts.delete', + serviceAccountsGet: 'iam.serviceAccounts.get', + serviceAccountsList: 'iam.serviceAccounts.list', + serviceAccountsUpdate: 'iam.serviceAccounts.update' + } +} diff --git a/packages/pulumi/src/gcp/index.ts b/packages/pulumi/src/gcp/index.ts new file mode 100644 index 00000000..03545762 --- /dev/null +++ b/packages/pulumi/src/gcp/index.ts @@ -0,0 +1,12 @@ +export * from './config' +export * from './default-service-accounts' +export * from './iam-roles' +export * from './resources/bucket.resource' +export * from './resources/dns.resource' +export * from './resources/iam-binding.resource' +export * from './resources/iam-custom-role.resource' +export * from './resources/pub-sub-topic.resource' +export * from './resources/queue.resource' +export * from './resources/secret.resource' +export * from './resources/service-account.resource' + diff --git a/packages/pulumi/src/gcp/naming.ts b/packages/pulumi/src/gcp/naming.ts new file mode 100644 index 00000000..f4fea0c7 --- /dev/null +++ b/packages/pulumi/src/gcp/naming.ts @@ -0,0 +1,28 @@ +import { GCP_PROJECT_ID } from './config' + +export function buildName(...parts: string[]): string { + return parts.filter(Boolean).join('::') +} + +export function getFriendlyRoleName(prefix: string, role: string): string { + return [ + prefix, + getFriendlyName(role) + ].filter(Boolean).join('-') +} + +export function getFriendlyName(name: string): string { + return name + .replace(/\./g, '-') + .replace(/\//g, '-') +} + +export function getFriendlyMemberName(member: string): string { + let memberName = member + // When adding member of the same project, remove everything after the @ for shorter names + if (memberName.includes(`@${GCP_PROJECT_ID}`)) { + memberName = memberName.split('@').shift() + } + + return memberName +} diff --git a/packages/pulumi/src/gcp/resources/bucket.resource.ts b/packages/pulumi/src/gcp/resources/bucket.resource.ts new file mode 100644 index 00000000..f0211c1d --- /dev/null +++ b/packages/pulumi/src/gcp/resources/bucket.resource.ts @@ -0,0 +1,82 @@ +import * as gcp from '@pulumi/gcp' +import * as pulumi from '@pulumi/pulumi' + +import { GCP_PROJECT_ID } from '../config' +import { buildName, getFriendlyRoleName } from '../naming' + +export class BucketResource extends pulumi.ComponentResource { + + private readonly bucket: gcp.storage.Bucket + + constructor( + private readonly bucketName: string, + private readonly args: gcp.storage.BucketArgs, + private readonly opts: pulumi.ComponentResourceOptions = {}, + private readonly bucketOpts: pulumi.ComponentResourceOptions = {} + ) { + super('bucket-resource', bucketName, {}, opts) + + this.bucket = new gcp.storage.Bucket(bucketName, { + project: GCP_PROJECT_ID, + name: bucketName, + ...args + }, { + ...bucketOpts, + parent: this + }) + } + + public addLegacyObjectReader(member: pulumi.Output): BucketResource { + this.addMember(member, 'roles/storage.legacyObjectReader') + + return this + } + + public addLegacyObjectOwner(member: pulumi.Output): BucketResource { + this.addMember(member, 'roles/storage.legacyObjectOwner') + + return this + } + + public addObjectAdmin(member: pulumi.Output): BucketResource { + this.addMember(member, 'roles/storage.objectAdmin') + + return this + } + + public addObjectViewer(member: pulumi.Output): BucketResource { + this.addMember(member, 'roles/storage.objectViewer') + + return this + } + + public addObjectCreator(member: pulumi.Output): BucketResource { + this.addMember(member, 'roles/storage.objectCreator') + + return this + } + + private addMember(member: pulumi.Output, role: string): void { + member.apply((parsedMember) => { + this.createMember(parsedMember, role) + }) + } + + private createMember(member: string, role: string, condition?: gcp.projects.IAMMemberArgs['condition']) { + let memberName = member + // When adding member of the same project, remove everything after the @ for shorter names + if (memberName.includes(`@${GCP_PROJECT_ID}`)) { + memberName = memberName.split('@').shift() + } + + new gcp.storage.BucketIAMMember(buildName(this.bucketName, getFriendlyRoleName(memberName, role)), { + bucket: this.bucket.name, + member, + role, + condition + }, { + parent: this.bucket + }) + } + +} diff --git a/packages/pulumi/src/gcp/resources/dns.resource.ts b/packages/pulumi/src/gcp/resources/dns.resource.ts new file mode 100644 index 00000000..eab0dedf --- /dev/null +++ b/packages/pulumi/src/gcp/resources/dns.resource.ts @@ -0,0 +1,165 @@ +import * as gcp from '@pulumi/gcp' +import * as pulumi from '@pulumi/pulumi' + +import { GCP_PROJECT_ID } from '../config' + +export type DNS_TYPE = 'A' | 'AAAA' | 'MX' | 'TXT' | 'CNAME' +export type DNS_VALUES = string | Array + +export class DNSResource extends pulumi.ComponentResource { + + private readonly friendlyDomain: string + public readonly zone: gcp.dns.ManagedZone + + private emailDisabled = false + + public static gmailSpfInclude = 'include:_spf.google.com' + + constructor( + private readonly domain: string, + private readonly enableDnssec = true, + private readonly opts: pulumi.ComponentResourceOptions = {}, + private readonly zoneOpts: pulumi.ComponentResourceOptions = {} + ) { + super('straetus:dns-resource', DNSResource.makeDomainFriendly(domain), {}, opts) + + this.friendlyDomain = DNSResource.makeDomainFriendly(domain) + this.zone = new gcp.dns.ManagedZone(this.friendlyDomain, { + name: this.friendlyDomain, + dnsName: `${domain}.`, + forceDestroy: false, + visibility: 'public', + dnssecConfig: { + state: enableDnssec ? 'on' : 'off' + } + }, { + ...zoneOpts, + parent: this + }) + } + + public static inQuotes(value: string): string[] { + return value.match(/.{1,255}/g).map((value) => `"${value}"`) + } + + public static createDKIM(key: string): string { + return `v=DKIM1; k=rsa; p=${key};` + } + + public static makeDomainFriendly(domain: string) { + return domain.replace(/\./g, '-') + } + + public createVercelRecords(): DNSResource { + return this + .createRecord('@', 'A', '76.76.21.21') + .createRecord('www', 'CNAME', 'cname.vercel-dns.com.') + } + + public createCmsRecord(): DNSResource { + return this + .createCNAMERecord('cms', 'ghs.googlehosted.com.') + } + + public createGmailMxRecords(): DNSResource { + return this + .createMxRecord( + '@', + '1 ASPMX.L.GOOGLE.COM.', + '5 ALT1.ASPMX.L.GOOGLE.COM.', + '5 ALT2.ASPMX.L.GOOGLE.COM.', + '10 ALT3.ASPMX.L.GOOGLE.COM.', + '10 ALT4.ASPMX.L.GOOGLE.COM.' + ) + } + + public createWorkspaceShortcuts(): DNSResource { + return this + .createCNAMERecord('calendar', 'ghs.googlehosted.com.') + .createCNAMERecord('drive', 'ghs.googlehosted.com.') + .createCNAMERecord('groups', 'ghs.googlehosted.com.') + .createCNAMERecord('mail', 'ghs.googlehosted.com.') + } + + public disableEmail(...values: string[]): DNSResource { + this.emailDisabled = true + + // Follows https://www.cloudflare.com/en-gb/learning/dns/dns-records/protect-domains-without-email/ + + return this + .createTXTRecord('@', 'v=spf1 -all', ...values) + .createTXTRecord('*._domainkey', 'v=DKIM1; p=') + .createTXTRecord('_dmarc', 'v=DMARC1;p=reject;adkim=s;aspf=s') + } + + public createMxRecord(subDomain: string, ...value: string[]): DNSResource { + if (this.emailDisabled) { + throw new Error('Email is disabled!') + } + + return this + .createRecord(subDomain, 'MX', ...value) + } + + /** + * Creates a SPF records, possible adds other values to the TXT record + */ + public createSpfRecord(subDomain: string, ips: string[], ...values: string[]): DNSResource { + return this + .createTXTRecord(subDomain, `v=spf1 ${ips.join(' ')} -all`, ...values) + } + + public createDefaultDomainKeyRecord(subDomain = '_domainkey', value = '"o=~"'): DNSResource { + return this + .createRecord(subDomain, 'TXT', value) + } + + public createDmarcRecord(subDomain = '_dmarc'): DNSResource { + return this + // add: adkim=s;aspf=s; ? https://support.google.com/a/answer/2466563 + .createTXTRecord(subDomain, `v=DMARC1;p=reject;pct=100;rua=mailto:dmarc-reports@${this.domain}`) + } + + public createTXTRecord(subDomain: string, ...values: string[]): DNSResource { + return this.createRecord(subDomain, 'TXT', ...values.map((value) => DNSResource.inQuotes(value).join(' '))) + } + + public createCNAMERecord(subDomain: string, ...values: DNS_VALUES[]): DNSResource { + return this.createRecord(subDomain, 'CNAME', ...values) + } + + public createRecord(subDomain: string, type: DNS_TYPE, ...values: DNS_VALUES[]): DNSResource { + new gcp.dns.RecordSet(this.resourceName(subDomain, type), { + project: GCP_PROJECT_ID, + managedZone: this.zone.name, + name: this.recordName(subDomain), + ttl: 3600, + type, + rrdatas: values.flatMap((value) => value) + }, { + deleteBeforeReplace: true, + parent: this.zone, + protect: false + }) + + return this + } + + private resourceName(subDomain: string, type: DNS_TYPE): string { + const resourceName = `${this.friendlyDomain}-${type.toLowerCase()}` + + if (subDomain !== '@') { + return `${DNSResource.makeDomainFriendly(subDomain)}-${resourceName}` + } + + return resourceName + } + + private recordName(subDomain: string): pulumi.Output { + if (subDomain !== '@') { + return pulumi.interpolate`${subDomain}.${this.zone.dnsName}` + } + + return this.zone.dnsName + } +} diff --git a/packages/pulumi/src/gcp/resources/iam-binding.resource.ts b/packages/pulumi/src/gcp/resources/iam-binding.resource.ts new file mode 100644 index 00000000..0c0ef809 --- /dev/null +++ b/packages/pulumi/src/gcp/resources/iam-binding.resource.ts @@ -0,0 +1,47 @@ +import * as gcp from '@pulumi/gcp' +import * as pulumi from '@pulumi/pulumi' + +import { GCP_PROJECT_ID } from '../config' +import { getFriendlyRoleName } from '../naming' + +export class IAMBindingResource extends pulumi.ComponentResource { + + private readonly friendlyRoleName: string + private members: pulumi.Input[] = [] + + constructor( + private readonly role: string, + private readonly opts: pulumi.ComponentResourceOptions = {}, + private readonly iamOpts: pulumi.ComponentResourceOptions = {} + ) { + const friendlyRoleName = getFriendlyRoleName(null, role) + + super('iam-binding-resource', friendlyRoleName, {}, opts) + + this.friendlyRoleName = friendlyRoleName + } + + public addServiceAccount(member: string): IAMBindingResource { + this.members.push(`serviceAccount:${member}@${GCP_PROJECT_ID}.iam.gserviceaccount.com`) + + return this + } + + public addMember(member: pulumi.Input): IAMBindingResource { + this.members.push(member) + + return this + } + + public create() { + new gcp.projects.IAMBinding(this.friendlyRoleName, { + project: GCP_PROJECT_ID, + role: this.role, + members: this.members + }, { + ...this.iamOpts, + parent: this + }) + } + +} diff --git a/packages/pulumi/src/gcp/resources/iam-custom-role.resource.ts b/packages/pulumi/src/gcp/resources/iam-custom-role.resource.ts new file mode 100644 index 00000000..d825996c --- /dev/null +++ b/packages/pulumi/src/gcp/resources/iam-custom-role.resource.ts @@ -0,0 +1,42 @@ +import * as gcp from '@pulumi/gcp' +import * as pulumi from '@pulumi/pulumi' + +import { GCP_PROJECT_ID } from '../config' +import { getFriendlyRoleName } from '../naming' + +export class IAMCustomRoleResource extends pulumi.ComponentResource { + + private readonly role: gcp.projects.IAMCustomRole + + constructor( + private readonly roleId: string, + private readonly args: Pick, + private readonly opts: pulumi.ComponentResourceOptions = {}, + private readonly iamOpts: pulumi.ComponentResourceOptions = {} + ) { + const friendlyRoleName = getFriendlyRoleName(null, roleId) + + super('iam-custom-role-resource', friendlyRoleName, {}, opts) + + this.role = new gcp.projects.IAMCustomRole(friendlyRoleName, { + project: GCP_PROJECT_ID, + roleId, + title: 'Act as Service Account', + permissions: [ + 'iam.serviceAccounts.actAs' + ] + }, { + ...iamOpts, + parent: this + }) + } + + public get name(): pulumi.Output { + return this.role.name + } + + public create() { + // Do nothing + } + +} diff --git a/packages/pulumi/src/gcp/resources/iam-member.resource.ts b/packages/pulumi/src/gcp/resources/iam-member.resource.ts new file mode 100644 index 00000000..4f0b7924 --- /dev/null +++ b/packages/pulumi/src/gcp/resources/iam-member.resource.ts @@ -0,0 +1,30 @@ +import * as gcp from '@pulumi/gcp' +import * as pulumi from '@pulumi/pulumi' + +import { GCP_PROJECT_ID } from '../config' +import { getFriendlyRoleName } from '../naming' + +export class IAMMemberResource extends pulumi.ComponentResource { + + constructor( + private readonly member: string, + private readonly role: string, + private readonly opts: pulumi.ComponentResourceOptions = {}, + private readonly iamOpts: pulumi.ComponentResourceOptions = {} + ) { + super('iam-member-resource', getFriendlyRoleName(member, role), {}, opts) + } + + public create(condition?: gcp.projects.IAMMemberArgs['condition']) { + new gcp.projects.IAMMember(getFriendlyRoleName(this.member, this.role), { + project: GCP_PROJECT_ID, + member: this.member, + role: this.role, + condition + }, { + ...this.iamOpts, + parent: this + }) + } + +} diff --git a/packages/pulumi/src/gcp/resources/pub-sub-topic.resource.ts b/packages/pulumi/src/gcp/resources/pub-sub-topic.resource.ts new file mode 100644 index 00000000..432eb77b --- /dev/null +++ b/packages/pulumi/src/gcp/resources/pub-sub-topic.resource.ts @@ -0,0 +1,65 @@ +import * as gcp from '@pulumi/gcp' +import * as pulumi from '@pulumi/pulumi' + +import { GCP_PROJECT_ID } from '../config' +import { buildName, getFriendlyName, getFriendlyRoleName } from '../naming' + +export class PubSubTopicResource extends pulumi.ComponentResource { + + private readonly topic: gcp.pubsub.Topic + + constructor( + private readonly topicName: string, + private readonly opts: pulumi.ComponentResourceOptions = {}, + private readonly topicOpts: pulumi.ComponentResourceOptions = {} + ) { + super('pub-sub-topic-resource', getFriendlyName(topicName), {}, opts) + + this.topic = new gcp.pubsub.Topic(getFriendlyName(this.topicName), { + name: this.topicName, + project: GCP_PROJECT_ID + }, { + ...topicOpts, + parent: this + }) + } + + public addServiceAccount(member: string, role: string): PubSubTopicResource { + this.createMember( + `serviceAccount:${member}@${GCP_PROJECT_ID}.iam.gserviceaccount.com`, + role + ) + return this + } + + public addMember(member: pulumi.Output, role: string): PubSubTopicResource { + member.apply((parsedMember) => { + this.createMember(parsedMember, role) + }) + + return this + } + + public create() { + // Do nothing + } + + private createMember(member: string, role: string, condition?: gcp.projects.IAMMemberArgs['condition']) { + let memberName = member + // When adding member of the same project, remove everything after the @ for shorter names + if (memberName.includes(`@${GCP_PROJECT_ID}`)) { + memberName = memberName.split('@').shift() + } + + new gcp.pubsub.TopicIAMMember(buildName(this.topicName, getFriendlyRoleName(memberName, role)), { + project: GCP_PROJECT_ID, + topic: this.topic.name, + member, + role, + condition + }, { + parent: this.topic + }) + } + +} diff --git a/packages/pulumi/src/gcp/resources/queue.resource.ts b/packages/pulumi/src/gcp/resources/queue.resource.ts new file mode 100644 index 00000000..44cde8fb --- /dev/null +++ b/packages/pulumi/src/gcp/resources/queue.resource.ts @@ -0,0 +1,58 @@ +import * as gcp from '@pulumi/gcp' +import * as pulumi from '@pulumi/pulumi' + +import { GCP_PROJECT_ID } from '../config' +import { buildName, getFriendlyMemberName, getFriendlyRoleName } from '../naming' + +export class QueueResource extends pulumi.ComponentResource { + + private readonly queue: gcp.cloudtasks.Queue + + constructor( + private readonly queueName: string, + private readonly args: Pick & Partial>, + private readonly opts: pulumi.ComponentResourceOptions = {}, + private readonly queueOpts: pulumi.ComponentResourceOptions = {} + ) { + super('queue-resource', queueName, {}, opts) + + this.queue = new gcp.cloudtasks.Queue(queueName, { + name: queueName, + project: GCP_PROJECT_ID, + ...args + }, { + ...queueOpts, + parent: this + }) + } + + public create() {} + + public addEnqueuer(member: pulumi.Output): QueueResource { + return this.addMember(member, 'roles/cloudtasks.enqueuer') + } + + public addMember(member: pulumi.Output, role: string): QueueResource { + member.apply((parsedMember) => { + this.createMember(parsedMember, role) + }) + + return this + } + + private createMember(member: string, role: string, condition?: gcp.projects.IAMMemberArgs['condition']) { + new gcp.cloudtasks.QueueIamMember(buildName(this.queueName, getFriendlyRoleName(getFriendlyMemberName(member), role)), { + name: this.queue.name, + location: this.queue.location, + + role, + member, + condition + }, { + parent: this.queue, + deleteBeforeReplace: true + }) + + return this + } +} diff --git a/packages/pulumi/src/gcp/resources/secret.resource.ts b/packages/pulumi/src/gcp/resources/secret.resource.ts new file mode 100644 index 00000000..a4decbc8 --- /dev/null +++ b/packages/pulumi/src/gcp/resources/secret.resource.ts @@ -0,0 +1,75 @@ +import * as gcp from '@pulumi/gcp' +import * as pulumi from '@pulumi/pulumi' + +import { GCP_PROJECT_ID } from '../config' +import { buildName, getFriendlyMemberName, getFriendlyRoleName } from '../naming' + +const secretsConfig = new pulumi.Config('gcpR-secrets') + +/** + * When adding secrets, make sure they are added to the namespace "gcpR-secrets" + */ +export class SecretResource extends pulumi.ComponentResource { + + private readonly secret: gcp.secretmanager.Secret + + constructor( + private readonly secretName: string, + private readonly args: Partial = {}, + private readonly opts: pulumi.ComponentResourceOptions = {}, + private readonly secretOpts: pulumi.ComponentResourceOptions = {}, + ) { + super('secret-resource', secretName, {}, opts) + + this.secret = new gcp.secretmanager.Secret(secretName, { + replication: { + auto: {} + }, + project: GCP_PROJECT_ID, + secretId: secretName, + ...args + }, { + ...secretOpts, + parent: this + }) + } + + public create(isObject?: boolean) { + const secret = isObject + ? secretsConfig.requireSecretObject(this.secretName) + : secretsConfig.requireSecret(this.secretName) + + secret.apply((secretValue) => { + new gcp.secretmanager.SecretVersion(buildName(this.secretName, 'secret-version'), { + secret: this.secret.id, + secretData: typeof secretValue === 'string' ? secretValue : JSON.stringify(secretValue) + }) + }) + } + + public addAccessor(member: pulumi.Output): SecretResource { + return this.addMember(member, 'roles/secretmanager.secretAccessor') + } + + public addMember(member: pulumi.Output, role: string): SecretResource { + member.apply((parsedMember) => { + this.createMember(parsedMember, role) + }) + + return this + } + + private createMember(member: string, role: string, condition?: gcp.projects.IAMMemberArgs['condition']) { + new gcp.secretmanager.SecretIamMember(buildName(this.secretName, getFriendlyRoleName(getFriendlyMemberName(member), role)), { + secretId: this.secret.id, + role, + member, + condition + }, { + parent: this.secret, + deleteBeforeReplace: true + }) + + return this + } +} diff --git a/packages/pulumi/src/gcp/resources/service-account.resource.ts b/packages/pulumi/src/gcp/resources/service-account.resource.ts new file mode 100644 index 00000000..ceb55b88 --- /dev/null +++ b/packages/pulumi/src/gcp/resources/service-account.resource.ts @@ -0,0 +1,78 @@ +import * as gcp from '@pulumi/gcp' +import * as pulumi from '@pulumi/pulumi' + +import { GCP_PROJECT_ID } from '../config' +import { buildName, getFriendlyRoleName } from '../naming' + +export class ServiceAccountResource extends pulumi.ComponentResource { + + private readonly account: gcp.serviceaccount.Account + + constructor( + private readonly accountId: string, + private readonly displayName?: string, + private readonly opts: pulumi.ComponentResourceOptions = {}, + private readonly serviceAccountOtps: pulumi.ComponentResourceOptions = {} + ) { + super('service-account-resource', accountId, {}, opts) + + this.account = new gcp.serviceaccount.Account(accountId, { + project: GCP_PROJECT_ID, + accountId, + displayName + }, { + ...serviceAccountOtps, + parent: this, + deleteBeforeReplace: true + }) + } + + public get member(): pulumi.Output { + return this.account.member + } + + public get email(): pulumi.Output { + return this.account.email + } + + public addCustomRole(role: pulumi.Output, condition?: gcp.projects.IAMMemberArgs['condition']): ServiceAccountResource { + role.apply((parsedRole) => { + this.addRole(parsedRole, condition) + }) + + return this + } + + public addRole(role: string, condition?: gcp.projects.IAMMemberArgs['condition']): ServiceAccountResource { + new gcp.projects.IAMMember(getFriendlyRoleName(this.accountId, role), { + project: GCP_PROJECT_ID, + member: this.account.member, + role, + condition + }, { + parent: this.account, + protect: false + }) + + return this + } + + public addCloudRunRole( + { service, location }: { service: string, location: string }, + role: string + ): ServiceAccountResource { + new gcp.cloudrun.IamMember(buildName(service, getFriendlyRoleName(this.accountId, role)), { + project: GCP_PROJECT_ID, + member: this.account.member, + service, + location, + role + }, { + parent: this.account, + protect: false + }) + + return this + } + +} diff --git a/yarn.lock b/yarn.lock index 504036fc..e8d7a48f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5959,6 +5959,30 @@ __metadata: languageName: node linkType: hard +"@grpc/grpc-js@npm:^1.10.1": + version: 1.11.1 + resolution: "@grpc/grpc-js@npm:1.11.1" + dependencies: + "@grpc/proto-loader": "npm:^0.7.13" + "@js-sdsl/ordered-map": "npm:^4.4.2" + checksum: 10/28fb8d0bbccc0a8f9f73899e6f982e5e762e8f0c009eb9234d4067021f96896479be76463f8a02b80d13ecfd52817ae6d0a189f6cfe22fd32df0505bf577a720 + languageName: node + linkType: hard + +"@grpc/proto-loader@npm:^0.7.13": + version: 0.7.13 + resolution: "@grpc/proto-loader@npm:0.7.13" + dependencies: + lodash.camelcase: "npm:^4.3.0" + long: "npm:^5.0.0" + protobufjs: "npm:^7.2.5" + yargs: "npm:^17.7.2" + bin: + proto-loader-gen-types: build/bin/proto-loader-gen-types.js + checksum: 10/7e2d842c2061cbaf6450c71da0077263be3bab165454d5c8a3e1ae4d3c6d2915f02fd27da63ff01f05e127b1221acd40705273f5d29303901e60514e852992f4 + languageName: node + linkType: hard + "@hapi/hoek@npm:^9.0.0, @hapi/hoek@npm:^9.3.0": version: 9.3.0 resolution: "@hapi/hoek@npm:9.3.0" @@ -6048,6 +6072,13 @@ __metadata: languageName: node linkType: hard +"@isaacs/string-locale-compare@npm:^1.1.0": + version: 1.1.0 + resolution: "@isaacs/string-locale-compare@npm:1.1.0" + checksum: 10/85682b14602f32023e487f62bc4076fe13cd3e887df9cca36acc0d41ea99b403100d586acb9367331526f3ee737d802ecaa582f59020998d75991e62a7ef0db5 + languageName: node + linkType: hard + "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -6615,6 +6646,13 @@ __metadata: languageName: node linkType: hard +"@js-sdsl/ordered-map@npm:^4.4.2": + version: 4.4.2 + resolution: "@js-sdsl/ordered-map@npm:4.4.2" + checksum: 10/ac64e3f0615ecc015461c9f527f124d2edaa9e68de153c1e270c627e01e83d046522d7e872692fd57a8c514578b539afceff75831c0d8b2a9a7a347fbed35af4 + languageName: node + linkType: hard + "@jscutlery/semver@npm:^5.3.1": version: 5.3.1 resolution: "@jscutlery/semver@npm:5.3.1" @@ -6745,6 +6783,13 @@ __metadata: languageName: node linkType: hard +"@logdna/tail-file@npm:^2.0.6": + version: 2.2.0 + resolution: "@logdna/tail-file@npm:2.2.0" + checksum: 10/0bc9584912456d773fb7e3870f7ef0a97e0f87b507731d6f851469fff5999502d8bd154e43ce4587944c2ec74b3c7d488dce830873bd946d2022b163184ad95b + languageName: node + linkType: hard + "@lukeed/csprng@npm:^1.0.0": version: 1.1.0 resolution: "@lukeed/csprng@npm:1.1.0" @@ -7278,6 +7323,64 @@ __metadata: languageName: node linkType: hard +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10/96fc0036b101bae5032dc2a4cd832efb815ce9b33f9ee2f29909ee49d96a0026b3565f73c507a69eb8603f5cb32e0ae45a70cab1e2655990a4e06ae99f7f572a + languageName: node + linkType: hard + +"@npmcli/arborist@npm:^7.3.1": + version: 7.5.4 + resolution: "@npmcli/arborist@npm:7.5.4" + dependencies: + "@isaacs/string-locale-compare": "npm:^1.1.0" + "@npmcli/fs": "npm:^3.1.1" + "@npmcli/installed-package-contents": "npm:^2.1.0" + "@npmcli/map-workspaces": "npm:^3.0.2" + "@npmcli/metavuln-calculator": "npm:^7.1.1" + "@npmcli/name-from-folder": "npm:^2.0.0" + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/package-json": "npm:^5.1.0" + "@npmcli/query": "npm:^3.1.0" + "@npmcli/redact": "npm:^2.0.0" + "@npmcli/run-script": "npm:^8.1.0" + bin-links: "npm:^4.0.4" + cacache: "npm:^18.0.3" + common-ancestor-path: "npm:^1.0.1" + hosted-git-info: "npm:^7.0.2" + json-parse-even-better-errors: "npm:^3.0.2" + json-stringify-nice: "npm:^1.1.4" + lru-cache: "npm:^10.2.2" + minimatch: "npm:^9.0.4" + nopt: "npm:^7.2.1" + npm-install-checks: "npm:^6.2.0" + npm-package-arg: "npm:^11.0.2" + npm-pick-manifest: "npm:^9.0.1" + npm-registry-fetch: "npm:^17.0.1" + pacote: "npm:^18.0.6" + parse-conflict-json: "npm:^3.0.0" + proc-log: "npm:^4.2.0" + proggy: "npm:^2.0.0" + promise-all-reject-late: "npm:^1.0.0" + promise-call-limit: "npm:^3.0.1" + read-package-json-fast: "npm:^3.0.2" + semver: "npm:^7.3.7" + ssri: "npm:^10.0.6" + treeverse: "npm:^3.0.0" + walk-up-path: "npm:^3.0.1" + bin: + arborist: bin/index.js + checksum: 10/b77170754f419171e5ca2abfb679a9c811443e2b67036916a62eda81fd069f12c98186941cd73a0d36c2ec76cda638b43ceeb4c5fae39de1bb9df825432f3ef7 + languageName: node + linkType: hard + "@npmcli/fs@npm:^3.1.0": version: 3.1.0 resolution: "@npmcli/fs@npm:3.1.0" @@ -7287,6 +7390,137 @@ __metadata: languageName: node linkType: hard +"@npmcli/fs@npm:^3.1.1": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10/1e0e04087049b24b38bc0b30d87a9388ee3ca1d3fdfc347c2f77d84fcfe6a51f250bc57ba2c1f614d7e4285c6c62bf8c769bc19aa0949ea39e5b043ee023b0bd + languageName: node + linkType: hard + +"@npmcli/git@npm:^5.0.0": + version: 5.0.8 + resolution: "@npmcli/git@npm:5.0.8" + dependencies: + "@npmcli/promise-spawn": "npm:^7.0.0" + ini: "npm:^4.1.3" + lru-cache: "npm:^10.0.1" + npm-pick-manifest: "npm:^9.0.0" + proc-log: "npm:^4.0.0" + promise-inflight: "npm:^1.0.1" + promise-retry: "npm:^2.0.1" + semver: "npm:^7.3.5" + which: "npm:^4.0.0" + checksum: 10/e6f94175fb9dde13d84849b29b32ffb4c4df968822cc85df2aebfca13bf8ca76f33b1d281911f5bcddc95bccba2f9e795669c736a38de4d9c76efb5047ffb4fb + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^2.0.1, @npmcli/installed-package-contents@npm:^2.1.0": + version: 2.1.0 + resolution: "@npmcli/installed-package-contents@npm:2.1.0" + dependencies: + npm-bundled: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + bin: + installed-package-contents: bin/index.js + checksum: 10/68ab3ea2994f5ea21c61940de94ec4f2755fe569ef0b86e22db0695d651a3c88915c5eab61d634cfa203b9c801ee307c8aa134c2c4bd2e4fe1aa8d295ce8a163 + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^3.0.2": + version: 3.0.6 + resolution: "@npmcli/map-workspaces@npm:3.0.6" + dependencies: + "@npmcli/name-from-folder": "npm:^2.0.0" + glob: "npm:^10.2.2" + minimatch: "npm:^9.0.0" + read-package-json-fast: "npm:^3.0.0" + checksum: 10/b364b155991a4ff85db5ea5b9f809ab65936350fc36fe1e51d5ab8cd479bba57e69f02e17215c0e2126e383074c2987c268d8e589aacd26c9962e028f4da98f2 + languageName: node + linkType: hard + +"@npmcli/metavuln-calculator@npm:^7.1.1": + version: 7.1.1 + resolution: "@npmcli/metavuln-calculator@npm:7.1.1" + dependencies: + cacache: "npm:^18.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + pacote: "npm:^18.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + checksum: 10/57163b4bde4af3f5badb0c9b0c868f9539e2a112ee73c606680b7548b148bf58e793952d74eb1e581c9cc2e630bc03bc60adc04b3f1e7960482f97af817f28d2 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/name-from-folder@npm:2.0.0" + checksum: 10/75beb40373f916cfcf7327958b3ab920ab4e32d24217197927dd1c76a325c7645695011fce9cb2a8f93616f8b74946e84eebe3830303e11ed9d400dae623a99b + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/node-gyp@npm:3.0.0" + checksum: 10/dd9fed3e80df8fbb20443f28651a8ed7235f2c15286ecc010e2d3cd392c85912e59ef29218c0b02f098defb4cbc8cdf045aab1d32d5cef6ace289913196ed5df + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0": + version: 5.2.0 + resolution: "@npmcli/package-json@npm:5.2.0" + dependencies: + "@npmcli/git": "npm:^5.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^7.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^6.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.5.3" + checksum: 10/c3d2218877bfc005bca3b7a11f53825bf16a68811b8e8ed0c9b219cceb8e8e646d70efab8c5d6decbd8007f286076468b3f456dab4d41d648aff73a5f3a6fce2 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^7.0.0": + version: 7.0.2 + resolution: "@npmcli/promise-spawn@npm:7.0.2" + dependencies: + which: "npm:^4.0.0" + checksum: 10/94cbbbeeb20342026c3b68fc8eb09e1600b7645d4e509f2588ef5ea7cff977eb01e628cc8e014595d04a6af4b4bc5c467c950a8135920f39f7c7b57fba43f4e9 + languageName: node + linkType: hard + +"@npmcli/query@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/query@npm:3.1.0" + dependencies: + postcss-selector-parser: "npm:^6.0.10" + checksum: 10/fa79ae317934c95d14b89cb149cb8eb0b2a4e611acf0661681cfa964bf9af6740f60efe095c8bb7e880398e0955666408cc8a3ffede90e87922cb81cce1efcdb + languageName: node + linkType: hard + +"@npmcli/redact@npm:^2.0.0": + version: 2.0.1 + resolution: "@npmcli/redact@npm:2.0.1" + checksum: 10/f19a521fa71b539707eee69106ed3d97e3047712d4f279c80007a8d0aef63d137e3062941f11e19d6cec03812eaa0872891ae20c84f603d9e021dfb93cc9d6e5 + languageName: node + linkType: hard + +"@npmcli/run-script@npm:^8.0.0, @npmcli/run-script@npm:^8.1.0": + version: 8.1.0 + resolution: "@npmcli/run-script@npm:8.1.0" + dependencies: + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/package-json": "npm:^5.0.0" + "@npmcli/promise-spawn": "npm:^7.0.0" + node-gyp: "npm:^10.0.0" + proc-log: "npm:^4.0.0" + which: "npm:^4.0.0" + checksum: 10/256bd580f82b98db93e54065bf9bcc94946be4f2d668a062cf756cb8ea091f58ef7154b3d2450d79738081a150f25cc48f6075351911e672f24ffd34350f02f2 + languageName: node + linkType: hard + "@nrwl/devkit@npm:19.6.1": version: 19.6.1 resolution: "@nrwl/devkit@npm:19.6.1" @@ -7532,6 +7766,7 @@ __metadata: resolution: "@nx-extend/pulumi@workspace:packages/pulumi" peerDependencies: "@nx/devkit": ^19.6.0 + "@pulumi/pulumi": ^3.129.0 languageName: unknown linkType: soft @@ -8063,6 +8298,161 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api-logs@npm:0.52.1": + version: 0.52.1 + resolution: "@opentelemetry/api-logs@npm:0.52.1" + dependencies: + "@opentelemetry/api": "npm:^1.0.0" + checksum: 10/7515667a41a38014ffda70674c0b77c9c68417cde9f8ce8840e675308b4431f99d879e8d347f1b08486561617f914c07ee704ad6ed8a6522dabc3a81ac39dc88 + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.9": + version: 1.9.0 + resolution: "@opentelemetry/api@npm:1.9.0" + checksum: 10/a607f0eef971893c4f2ee2a4c2069aade6ec3e84e2a1f5c2aac19f65c5d9eeea41aa72db917c1029faafdd71789a1a040bdc18f40d63690e22ccae5d7070f194 + languageName: node + linkType: hard + +"@opentelemetry/context-async-hooks@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/context-async-hooks@npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/0f708d738dd7fa00997a2e2536c1fd90faab5cc468510c3b3c272ed8dfc7a7fd6bd2612c31eb4e8b6caa73156d617f0046bb978fe84ba164ea15907d9e23869a + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/core@npm:1.25.1" + dependencies: + "@opentelemetry/semantic-conventions": "npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/3f669798760e70587cb1f329def5c02b586d3ceeb3200728387e6fb6dcd5ac9a04e4eafe3dc98a6c0cf5204e4ca238d4f0809a37425a1f1e7e9aea673ea28f59 + languageName: node + linkType: hard + +"@opentelemetry/exporter-zipkin@npm:^1.25": + version: 1.25.1 + resolution: "@opentelemetry/exporter-zipkin@npm:1.25.1" + dependencies: + "@opentelemetry/core": "npm:1.25.1" + "@opentelemetry/resources": "npm:1.25.1" + "@opentelemetry/sdk-trace-base": "npm:1.25.1" + "@opentelemetry/semantic-conventions": "npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10/17b13ce98356555d5b24e0324285058c7d55a1fae81195a8d897faa3e1042afc591dbc1e036d36cf7c39c2418fff245e4afcbd665a729ffbc7664e0fc3eb2fcb + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-grpc@npm:^0.52": + version: 0.52.1 + resolution: "@opentelemetry/instrumentation-grpc@npm:0.52.1" + dependencies: + "@opentelemetry/instrumentation": "npm:0.52.1" + "@opentelemetry/semantic-conventions": "npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/d3502dad8f699c8e77f04f75adb7d57218a6fec24f85fa670412814554c20295d452141c2e254958761444d5849b6d64b85ea84b12215c50bd7fc2339045edf7 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.52.1, @opentelemetry/instrumentation@npm:^0.52": + version: 0.52.1 + resolution: "@opentelemetry/instrumentation@npm:0.52.1" + dependencies: + "@opentelemetry/api-logs": "npm:0.52.1" + "@types/shimmer": "npm:^1.0.2" + import-in-the-middle: "npm:^1.8.1" + require-in-the-middle: "npm:^7.1.1" + semver: "npm:^7.5.2" + shimmer: "npm:^1.2.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/87761bd593f2b905d88d0531a3a2a7f4b0186334ae413b4c172a86bd4de0fd6d2f906a1bfd9dd7bd172a228a44fa7a680f5802a1570dfe2fadad0768e80bd7a8 + languageName: node + linkType: hard + +"@opentelemetry/propagator-b3@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/propagator-b3@npm:1.25.1" + dependencies: + "@opentelemetry/core": "npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/bdcc3f1736e5cf1a9d050d8444ee42c1b1a7c8c59f45a4ed17b5066ab87594ec7941c10e168de6c3274d9e2b503a0a52886ee3bcda364686591de8d19f66d8fe + languageName: node + linkType: hard + +"@opentelemetry/propagator-jaeger@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/propagator-jaeger@npm:1.25.1" + dependencies: + "@opentelemetry/core": "npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/719ecfa7002dea6834734f7da9ddaade230706d4dbcd5308cf704f7af2bef05fb9ad9c1a94b0acd2a319b668106e83222cc8f5e86b8a5a3dfa10a5eb934dc7bb + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.25.1, @opentelemetry/resources@npm:^1.25": + version: 1.25.1 + resolution: "@opentelemetry/resources@npm:1.25.1" + dependencies: + "@opentelemetry/core": "npm:1.25.1" + "@opentelemetry/semantic-conventions": "npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/971f9616deeff76e584ba7d2957db402332701d9e1f679532e105ff2b929cd93e8ee40ccac029585e70ab917ff47696a0f37a4ddfcb9f96b4ae0eeca860deaf5 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:1.25.1, @opentelemetry/sdk-trace-base@npm:^1.25": + version: 1.25.1 + resolution: "@opentelemetry/sdk-trace-base@npm:1.25.1" + dependencies: + "@opentelemetry/core": "npm:1.25.1" + "@opentelemetry/resources": "npm:1.25.1" + "@opentelemetry/semantic-conventions": "npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/65d289a144bba052d1b4a0f8f528d2598cfb6bfbf60d9372543a317665e9e1dc63069a66601537fe1e6e94563f53d1be9cc3474dfc3361a8d33f31e1ea2d6262 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-node@npm:^1.25": + version: 1.25.1 + resolution: "@opentelemetry/sdk-trace-node@npm:1.25.1" + dependencies: + "@opentelemetry/context-async-hooks": "npm:1.25.1" + "@opentelemetry/core": "npm:1.25.1" + "@opentelemetry/propagator-b3": "npm:1.25.1" + "@opentelemetry/propagator-jaeger": "npm:1.25.1" + "@opentelemetry/sdk-trace-base": "npm:1.25.1" + semver: "npm:^7.5.2" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/bbd37dff6d0ee2752ff3a3b34e26abcded4ee50ac251671645c62184e0f9bbe7c905e9649419b608c7969ddb4e35fd26ec1933b9983fe4dd3fa9e24f57734206 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/semantic-conventions@npm:1.25.1" + checksum: 10/d84745a9e21a451560a293b4e6f996ee7c67bb983a7ec05408c23d207c6fc8b73a0af9c1ebea26e3acb4f0e3405ea7eb0d6bdf9adad9f954d60829bbb48ea307 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:^1.25": + version: 1.26.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.26.0" + checksum: 10/846607106532827ec1e61deddcdf781eed2f7fe175131e4ac8ddba5b4de7280429f3678259b22d5a99cbc7bdd3d2f4eea81bd100b6304089c0341fc963b7b451 + languageName: node + linkType: hard + "@oxc-resolver/binding-darwin-arm64@npm:1.10.2": version: 1.10.2 resolution: "@oxc-resolver/binding-darwin-arm64@npm:1.10.2" @@ -8247,6 +8637,143 @@ __metadata: languageName: node linkType: hard +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 10/8a938d84fe4889411296db66b29287bd61ea3c14c2d23e7a8325f46a2b8ce899857c5f038d65d7641805e6c1d06b495525c7faf00c44f85a7ee6476649034969 + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 10/c71b100daeb3c9bdccab5cbc29495b906ba0ae22ceedc200e1ba49717d9c4ab15a6256839cebb6f9c6acae4ed7c25c67e0a95e734f612b258261d1a3098fe342 + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 10/c6ee5fa172a8464f5253174d3c2353ea520c2573ad7b6476983d9b1346f4d8f2b44aa29feb17a949b83c1816bc35286a5ea265ed9d8fdd2865acfa09668c0447 + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 10/03af3e99f17ad421283d054c88a06a30a615922a817741b43ca1b13e7c6b37820a37f6eba9980fb5150c54dba6e26cb6f7b64a6f7d8afa83596fafb3afa218c3 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.1" + "@protobufjs/inquire": "npm:^1.1.0" + checksum: 10/67ae40572ad536e4ef94269199f252c024b66e3059850906bdaee161ca1d75c73d04d35cd56f147a8a5a079f5808e342b99e61942c1dae15604ff0600b09a958 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 10/634c2c989da0ef2f4f19373d64187e2a79f598c5fb7991afb689d29a2ea17c14b796b29725945fa34b9493c17fb799e08ac0a7ccaae460ee1757d3083ed35187 + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: 10/c09efa34a5465cb120775e1a482136f2340a58b4abce7e93d72b8b5a9324a0e879275016ef9fcd73d72a4731639c54f2bb755bb82f916e4a78892d1d840bb3d2 + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 10/bb709567935fd385a86ad1f575aea98131bbd719c743fb9b6edd6b47ede429ff71a801cecbd64fc72deebf4e08b8f1bd8062793178cdaed3713b8d15771f9b83 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: 10/b9c7047647f6af28e92aac54f6f7c1f7ff31b201b4bfcc7a415b2861528854fce3ec666d7e7e10fd744da905f7d4aef2205bbcc8944ca0ca7a82e18134d00c46 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: 10/131e289c57534c1d73a0e55782d6751dd821db1583cb2f7f7e017c9d6747addaebe79f28120b2e0185395d990aad347fb14ffa73ef4096fa38508d61a0e64602 + languageName: node + linkType: hard + +"@pulumi/gcp@npm:^7.37.0": + version: 7.37.0 + resolution: "@pulumi/gcp@npm:7.37.0" + dependencies: + "@pulumi/pulumi": "npm:^3.0.0" + "@types/express": "npm:^4.16.0" + read-package-json: "npm:^2.0.13" + checksum: 10/9b0a179d4f247c79190544153cb31b0ab8bcc1fecfce95eafff1096d949aca8395178376f9d1f27902fdfe1412a60a8f0f3624180805c83d700ff4ef9a936c27 + languageName: node + linkType: hard + +"@pulumi/pulumi@npm:^3.0.0, @pulumi/pulumi@npm:^3.129.0": + version: 3.129.0 + resolution: "@pulumi/pulumi@npm:3.129.0" + dependencies: + "@grpc/grpc-js": "npm:^1.10.1" + "@logdna/tail-file": "npm:^2.0.6" + "@npmcli/arborist": "npm:^7.3.1" + "@opentelemetry/api": "npm:^1.9" + "@opentelemetry/exporter-zipkin": "npm:^1.25" + "@opentelemetry/instrumentation": "npm:^0.52" + "@opentelemetry/instrumentation-grpc": "npm:^0.52" + "@opentelemetry/resources": "npm:^1.25" + "@opentelemetry/sdk-trace-base": "npm:^1.25" + "@opentelemetry/sdk-trace-node": "npm:^1.25" + "@opentelemetry/semantic-conventions": "npm:^1.25" + "@pulumi/query": "npm:^0.3.0" + "@types/google-protobuf": "npm:^3.15.5" + "@types/semver": "npm:^7.5.6" + "@types/tmp": "npm:^0.2.6" + execa: "npm:^5.1.0" + fdir: "npm:^6.1.1" + google-protobuf: "npm:^3.5.0" + got: "npm:^11.8.6" + ini: "npm:^2.0.0" + js-yaml: "npm:^3.14.0" + minimist: "npm:^1.2.6" + normalize-package-data: "npm:^6.0.0" + picomatch: "npm:^3.0.1" + pkg-dir: "npm:^7.0.0" + require-from-string: "npm:^2.0.1" + semver: "npm:^7.5.2" + source-map-support: "npm:^0.5.6" + tmp: "npm:^0.2.1" + upath: "npm:^1.1.0" + peerDependencies: + ts-node: ">= 7.0.1 < 12" + typescript: ">= 3.8.3 < 6" + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + checksum: 10/02622a47fa0002335186c0391654dcfd4cb3bfedff80caa1e1e23701aad98812fa4f5c9d423e152d3b9cb98fab29731b1c4a1170e19097434f073785982d8fda + languageName: node + linkType: hard + +"@pulumi/query@npm:^0.3.0": + version: 0.3.0 + resolution: "@pulumi/query@npm:0.3.0" + checksum: 10/67232b2764a0d842cd248ade96d1e14f258b1f2b2100c20dbcbfbdc3ddd15dcbcb6466e7eb9a12bda5fa343febe6f95e1560f1a45d6174f81ffc4c34ee02c374 + languageName: node + linkType: hard + "@radix-ui/colors@npm:1.0.1": version: 1.0.1 resolution: "@radix-ui/colors@npm:1.0.1" @@ -9867,6 +10394,64 @@ __metadata: languageName: node linkType: hard +"@sigstore/bundle@npm:^2.3.2": + version: 2.3.2 + resolution: "@sigstore/bundle@npm:2.3.2" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10/16c2dd624612171acf40c0daf6ca8f43332abfab3ea522e6fcff70df70207061f8a9faa43e10f8b5d0006ff1edebe5179101f4ba566ff6d271099158d3ae9503 + languageName: node + linkType: hard + +"@sigstore/core@npm:^1.0.0, @sigstore/core@npm:^1.1.0": + version: 1.1.0 + resolution: "@sigstore/core@npm:1.1.0" + checksum: 10/4149572091d61c246dd2ff636ff9a31441877db78cc3afe25fd0b28ece87f0094576f8b9077d1dc7c1c959ac4b000d407595becb6cd784c3664e9dd7cb6da36a + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.3.2": + version: 0.3.2 + resolution: "@sigstore/protobuf-specs@npm:0.3.2" + checksum: 10/350a6eb834e0f5c50987935c329350ba9df5baedba7c3db6ab6bc55d8730d9e6ff2deb31e770e721b9fef53f1cf6b32f376e28ed72c6e090493bceb820acfb4a + languageName: node + linkType: hard + +"@sigstore/sign@npm:^2.3.2": + version: 2.3.2 + resolution: "@sigstore/sign@npm:2.3.2" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + make-fetch-happen: "npm:^13.0.1" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + checksum: 10/3b0198fb8f8c6fe1c7fd34e9be25484d4472cd93ec3709c68f4cf45a07a0a90ebceb2193e77dfe780bb0a3effa31152a7f9d01497010bde9d9ab4e85873e2843 + languageName: node + linkType: hard + +"@sigstore/tuf@npm:^2.3.4": + version: 2.3.4 + resolution: "@sigstore/tuf@npm:2.3.4" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + tuf-js: "npm:^2.2.1" + checksum: 10/4ef978a0b29e1bdf4a8ac48580ff68bc7a3f10db7b301d033f212cc42b1ee58bf555ac77f67b21b44e8315de38640f23f24c7022fe46f66c236e0c0293d23b00 + languageName: node + linkType: hard + +"@sigstore/verify@npm:^1.2.1": + version: 1.2.1 + resolution: "@sigstore/verify@npm:1.2.1" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.1.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10/68a1bb341e93a86f738b4e55be8812034df398bdae1746b5f8c7e49d35c6a223ff634fa70b55152de5db992e8356cfaeae5779d6d805ecf4dd18caf167de8b95 + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.25.16": version: 0.25.24 resolution: "@sinclair/typebox@npm:0.25.24" @@ -11350,6 +11935,23 @@ __metadata: languageName: node linkType: hard +"@tufjs/canonical-json@npm:2.0.0": + version: 2.0.0 + resolution: "@tufjs/canonical-json@npm:2.0.0" + checksum: 10/cc719a1d0d0ae1aa1ba551a82c87dcbefac088e433c03a3d8a1d547ea721350e47dab4ab5b0fca40d5c7ab1f4882e72edc39c9eae15bf47c45c43bcb6ee39f4f + languageName: node + linkType: hard + +"@tufjs/models@npm:2.0.1": + version: 2.0.1 + resolution: "@tufjs/models@npm:2.0.1" + dependencies: + "@tufjs/canonical-json": "npm:2.0.0" + minimatch: "npm:^9.0.4" + checksum: 10/7c5d2b8194195cecddc92ae37523c1375e7aaf2e554941c0f9b71db93bbef4f0af8190438dd321e8f9dfd4ce2a9b582e35a4c4c04bec87e25a289c9c8bedcd4e + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.9.0": version: 0.9.0 resolution: "@tybys/wasm-util@npm:0.9.0" @@ -11584,7 +12186,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:4.17.21, @types/express@npm:^4.17.17, @types/express@npm:^4.17.21": +"@types/express@npm:4.17.21, @types/express@npm:^4.16.0, @types/express@npm:^4.17.17, @types/express@npm:^4.17.21": version: 4.17.21 resolution: "@types/express@npm:4.17.21" dependencies: @@ -11622,6 +12224,13 @@ __metadata: languageName: node linkType: hard +"@types/google-protobuf@npm:^3.15.5": + version: 3.15.12 + resolution: "@types/google-protobuf@npm:3.15.12" + checksum: 10/a5c5f09a3fc4bc6a9339df29f4a32daf77c37f2bce6e8aa7b949fae19829a87c351786b7401eb45ea643dfa98d5155ffd9dd637c3ec61f69a30979bd67f6954e + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.3": version: 4.1.6 resolution: "@types/graceful-fs@npm:4.1.6" @@ -11917,6 +12526,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:>=13.7.0": + version: 22.5.0 + resolution: "@types/node@npm:22.5.0" + dependencies: + undici-types: "npm:~6.19.2" + checksum: 10/89af3bd217b1559b645a9ed16d4ae3add75749814cbd8eefddd1b96003d1973afb1c8a2b23d69f3a8cc6c532e3aa185eaf5cc29a6e7c42c311a2aad4c99430ae + languageName: node + linkType: hard + "@types/node@npm:^17.0.5": version: 17.0.45 resolution: "@types/node@npm:17.0.45" @@ -12103,7 +12721,7 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.5.8": +"@types/semver@npm:^7.5.6, @types/semver@npm:^7.5.8": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" checksum: 10/3496808818ddb36deabfe4974fd343a78101fa242c4690044ccdc3b95dcf8785b494f5d628f2f47f38a702f8db9c53c67f47d7818f2be1b79f2efb09692e1178 @@ -12170,6 +12788,13 @@ __metadata: languageName: node linkType: hard +"@types/shimmer@npm:^1.0.2": + version: 1.2.0 + resolution: "@types/shimmer@npm:1.2.0" + checksum: 10/f081a31d826ce7bfe8cc7ba8129d2b1dffae44fd580eba4fcf741237646c4c2494ae6de2cada4b7713d138f35f4bc512dbf01311d813dee82020f97d7d8c491c + languageName: node + linkType: hard + "@types/sockjs@npm:^0.3.33": version: 0.3.33 resolution: "@types/sockjs@npm:0.3.33" @@ -12214,6 +12839,13 @@ __metadata: languageName: node linkType: hard +"@types/tmp@npm:^0.2.6": + version: 0.2.6 + resolution: "@types/tmp@npm:0.2.6" + checksum: 10/e14a094c10569d3b56805552b21417860ef21060d969000d5d5b53604a78c2bdac216f064b03797d4b07a081e0141dd3ab22bc36923e75300eb1c023f7252cc7 + languageName: node + linkType: hard + "@types/tough-cookie@npm:*": version: 4.0.2 resolution: "@types/tough-cookie@npm:4.0.2" @@ -13126,6 +13758,15 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: "npm:^4.3.4" + checksum: 10/c478fec8f79953f118704d007a38f2a185458853f5c45579b9669372bd0e12602e88dc2ad0233077831504f7cd6fcc8251c383375bba5eaaf563b102938bda26 + languageName: node + linkType: hard + "agentkeepalive@npm:^4.2.1": version: 4.3.0 resolution: "agentkeepalive@npm:4.3.0" @@ -14065,6 +14706,18 @@ __metadata: languageName: node linkType: hard +"bin-links@npm:^4.0.4": + version: 4.0.4 + resolution: "bin-links@npm:4.0.4" + dependencies: + cmd-shim: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + read-cmd-shim: "npm:^4.0.0" + write-file-atomic: "npm:^5.0.0" + checksum: 10/58d62143aacdbb783b076e9bdd970d8470f2750e1076d6fd1ae559fa532c4647478dd2550a911ba22d4c9e6339881451046e2fbc4b8958f4bf3bf8e5144d1e4d + languageName: node + linkType: hard + "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -14492,6 +15145,26 @@ __metadata: languageName: node linkType: hard +"cacache@npm:^18.0.0, cacache@npm:^18.0.3": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10/ca2f7b2d3003f84d362da9580b5561058ccaecd46cba661cbcff0375c90734b610520d46b472a339fd032d91597ad6ed12dde8af81571197f3c9772b5d35b104 + languageName: node + linkType: hard + "cache-base@npm:^1.0.1": version: 1.0.1 resolution: "cache-base@npm:1.0.1" @@ -14958,6 +15631,13 @@ __metadata: languageName: node linkType: hard +"cjs-module-lexer@npm:^1.2.2": + version: 1.3.1 + resolution: "cjs-module-lexer@npm:1.3.1" + checksum: 10/6629188d5ce74b57e5dce2222db851b5496a8d65b533a05957fb24089a3cec8d769378013c375a954c5a0f7522cde6a36d5a65bfd88f5575cb2de3176046fa8e + languageName: node + linkType: hard + "class-utils@npm:^0.3.5": version: 0.3.6 resolution: "class-utils@npm:0.3.6" @@ -15177,6 +15857,13 @@ __metadata: languageName: node linkType: hard +"cmd-shim@npm:^6.0.0": + version: 6.0.3 + resolution: "cmd-shim@npm:6.0.3" + checksum: 10/791c9779cf57deae978ef24daf7e49e7fdb2070cc273aa7d691ed258a660ad3861edbc9f39daa2b6e5f72a64526b6812c04f08becc54402618b99946ccad7d71 + languageName: node + linkType: hard + "co-body@npm:^5.1.1": version: 5.2.0 resolution: "co-body@npm:5.2.0" @@ -15445,6 +16132,13 @@ __metadata: languageName: node linkType: hard +"common-ancestor-path@npm:^1.0.1": + version: 1.0.1 + resolution: "common-ancestor-path@npm:1.0.1" + checksum: 10/1d2e4186067083d8cc413f00fc2908225f04ae4e19417ded67faa6494fb313c4fcd5b28a52326d1a62b466e2b3a4325e92c31133c5fee628cdf8856b3a57c3d7 + languageName: node + linkType: hard + "common-path-prefix@npm:^3.0.0": version: 3.0.0 resolution: "common-path-prefix@npm:3.0.0" @@ -18330,7 +19024,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:5.1.1, execa@npm:^5.0.0": +"execa@npm:5.1.1, execa@npm:^5.0.0, execa@npm:^5.1.0": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -18716,6 +19410,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.1.1": + version: 6.2.0 + resolution: "fdir@npm:6.2.0" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10/be15a72e7d8f49d356d9414f1dfc4840663657c700172e9bb90ba6640a551710e4bbd66071c2b09cd5dc97799c9304d618d16d60cab8d8a47734045f0fa9b16f + languageName: node + linkType: hard + "fecha@npm:^4.2.0": version: 4.2.3 resolution: "fecha@npm:4.2.3" @@ -19927,6 +20633,13 @@ __metadata: languageName: node linkType: hard +"google-protobuf@npm:^3.5.0": + version: 3.21.4 + resolution: "google-protobuf@npm:3.21.4" + checksum: 10/0d87fe8ef221d105cbaa808f4024bd577638524d8e461469e3733f2e4933391ad4da86b7fcbd11e8781bee04eacf2e8ba19aaacd5f9deb336a220485841d980f + languageName: node + linkType: hard + "gopd@npm:^1.0.1": version: 1.0.1 resolution: "gopd@npm:1.0.1" @@ -19936,7 +20649,7 @@ __metadata: languageName: node linkType: hard -"got@npm:^11.8.2": +"got@npm:^11.8.2, got@npm:^11.8.6": version: 11.8.6 resolution: "got@npm:11.8.6" dependencies: @@ -20415,6 +21128,15 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^7.0.2": + version: 7.0.2 + resolution: "hosted-git-info@npm:7.0.2" + dependencies: + lru-cache: "npm:^10.0.1" + checksum: 10/8f085df8a4a637d995f357f48b1e3f6fc1f9f92e82b33fb406415b5741834ed431a510a09141071001e8deea2eee43ce72786463e2aa5e5a70db8648c0eedeab + languageName: node + linkType: hard + "hpack.js@npm:^2.1.6": version: 2.1.6 resolution: "hpack.js@npm:2.1.6" @@ -20643,6 +21365,16 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10/d062acfa0cb82beeb558f1043c6ba770ea892b5fb7b28654dbc70ea2aeea55226dd34c02a294f6c1ca179a5aa483c4ea641846821b182edbd9cc5d89b54c6848 + languageName: node + linkType: hard + "http-proxy-middleware@npm:^2.0.3": version: 2.0.6 resolution: "http-proxy-middleware@npm:2.0.6" @@ -20861,6 +21593,15 @@ __metadata: languageName: node linkType: hard +"ignore-walk@npm:^6.0.4": + version: 6.0.5 + resolution: "ignore-walk@npm:6.0.5" + dependencies: + minimatch: "npm:^9.0.0" + checksum: 10/08757abff4dabca4f9f005f9a6cb6684e0c460a1e08c50319460ac13002de0ba8bbde6ad1f4477fefb264135d6253d1268339c18292f82485fcce576af0539d9 + languageName: node + linkType: hard + "ignore@npm:^5.0.4, ignore@npm:^5.1.1, ignore@npm:^5.1.9, ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.2.4 resolution: "ignore@npm:5.2.4" @@ -20926,6 +21667,18 @@ __metadata: languageName: node linkType: hard +"import-in-the-middle@npm:^1.8.1": + version: 1.11.0 + resolution: "import-in-the-middle@npm:1.11.0" + dependencies: + acorn: "npm:^8.8.2" + acorn-import-attributes: "npm:^1.9.5" + cjs-module-lexer: "npm:^1.2.2" + module-details-from-path: "npm:^1.0.3" + checksum: 10/e6f79c9de3f1c1907856fb48b99cd2273c5f9d78eb72124ddd142382e41b6bdf1f64c028ced9e5dbfd015f282e6e3b48bd1f53dd0452e2f0a26436ee42b005d8 + languageName: node + linkType: hard + "import-lazy@npm:^4.0.0": version: 4.0.0 resolution: "import-lazy@npm:4.0.0" @@ -21018,6 +21771,13 @@ __metadata: languageName: node linkType: hard +"ini@npm:^4.1.3": + version: 4.1.3 + resolution: "ini@npm:4.1.3" + checksum: 10/f536b414d1442e5b233429e2b56efcdb354109b2d65ddd489e5939d8f0f5ad23c88aa2b19c92987249d0dd63ba8192e9aeb1a02b0459549c5a9ff31acd729a5d + languageName: node + linkType: hard + "inline-style-parser@npm:0.1.1": version: 0.1.1 resolution: "inline-style-parser@npm:0.1.1" @@ -21144,6 +21904,16 @@ __metadata: languageName: node linkType: hard +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10/1ed81e06721af012306329b31f532b5e24e00cb537be18ddc905a84f19fe8f83a09a1699862bf3a1ec4b9dea93c55a3fa5faf8b5ea380431469df540f38b092c + languageName: node + linkType: hard + "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" @@ -21790,6 +22560,13 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10/7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + "isobject@npm:^2.0.0": version: 2.1.0 resolution: "isobject@npm:2.1.0" @@ -22890,7 +23667,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -22913,6 +23690,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10/bebe7ae829bbd586ce8cbe83501dd8cb8c282c8902a8aeeed0a073a89dc37e8103b1244f3c6acd60278bcbfe12d93a3f83c9ac396868a3b3bbc3c5e5e3b648ef + languageName: node + linkType: hard + "jsdom@npm:^20.0.0": version: 20.0.3 resolution: "jsdom@npm:20.0.3" @@ -23000,6 +23784,13 @@ __metadata: languageName: node linkType: hard +"json-parse-even-better-errors@npm:^3.0.2": + version: 3.0.2 + resolution: "json-parse-even-better-errors@npm:3.0.2" + checksum: 10/6f04ea6c9ccb783630a59297959247e921cc90b917b8351197ca7fd058fccc7079268fd9362be21ba876fc26aa5039369dd0a2280aae49aae425784794a94927 + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -23021,6 +23812,13 @@ __metadata: languageName: node linkType: hard +"json-stringify-nice@npm:^1.1.4": + version: 1.1.4 + resolution: "json-stringify-nice@npm:1.1.4" + checksum: 10/0e02cae900a1f24df64613dd10a54b354e4ba2b17822f0d7f0d2708182e71a8bbbfac107d54d3ae8fa3d8bab3556e20cef84f193ace92c9df7bc30872ec2926e + languageName: node + linkType: hard + "json-stringify-safe@npm:^5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -23081,7 +23879,7 @@ __metadata: languageName: node linkType: hard -"jsonparse@npm:^1.2.0": +"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": version: 1.3.1 resolution: "jsonparse@npm:1.3.1" checksum: 10/24531e956f0f19d79e22c157cebd81b37af3486ae22f9bc1028f8c2a4d1b70df48b168ff86f8568d9c2248182de9b6da9f50f685d5e4b9d1d2d339d2a29d15bc @@ -23100,6 +23898,20 @@ __metadata: languageName: node linkType: hard +"just-diff-apply@npm:^5.2.0": + version: 5.5.0 + resolution: "just-diff-apply@npm:5.5.0" + checksum: 10/5515c436c89e9ef934f1ea2aac447588c38dd017247ed85254537b005706e64321ca7a9c246fe7106338da1ef3a693f8550ebf11759c854713e9ccffb788a43b + languageName: node + linkType: hard + +"just-diff@npm:^6.0.0": + version: 6.0.2 + resolution: "just-diff@npm:6.0.2" + checksum: 10/4c6b14d6be2a3391b020ea2b3d1a0acf2f4c60fcb16681c7f6f76d4c0f1841fae5b00c1a2e719980992e46320e4b6c55a4713683cb1873dd41a2621f08c9f8e8 + languageName: node + linkType: hard + "jwa@npm:^1.4.1": version: 1.4.1 resolution: "jwa@npm:1.4.1" @@ -23817,6 +24629,13 @@ __metadata: languageName: node linkType: hard +"lodash.camelcase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: 10/c301cc379310441dc73cd6cebeb91fb254bea74e6ad3027f9346fc43b4174385153df420ffa521654e502fd34c40ef69ca4e7d40ee7129a99e06f306032bfc65 + languageName: node + linkType: hard + "lodash.clonedeep@npm:^4.5.0": version: 4.5.0 resolution: "lodash.clonedeep@npm:4.5.0" @@ -23940,6 +24759,13 @@ __metadata: languageName: node linkType: hard +"long@npm:^5.0.0": + version: 5.2.3 + resolution: "long@npm:5.2.3" + checksum: 10/9167ec6947a825b827c30da169a7384eec6c0c9ec2f0b9c74da2e93d81159bbe39fb09c3f13dae9721d4b807ccfa09797a7dd1012f5d478e3e33ca3c78b608e6 + languageName: node + linkType: hard + "longest-streak@npm:^3.0.0": version: 3.1.0 resolution: "longest-streak@npm:3.1.0" @@ -24029,6 +24855,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.2.2": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -24151,6 +24984,26 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10/11bae5ad6ac59b654dbd854f30782f9de052186c429dfce308eda42374528185a100ee40ac9ffdc36a2b6c821ecaba43913e4730a12f06f15e895ea9cb23fa59 + languageName: node + linkType: hard + "make-iterator@npm:^1.0.0": version: 1.0.1 resolution: "make-iterator@npm:1.0.1" @@ -25363,6 +26216,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.0": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10/dd6a8927b063aca6d910b119e1f2df6d2ce7d36eab91de83167dd136bb85e1ebff97b0d3de1cb08bd1f7e018ca170b4962479fefab5b2a69e2ae12cb2edc8348 + languageName: node + linkType: hard + "minimatch@npm:^9.0.4": version: 9.0.4 resolution: "minimatch@npm:9.0.4" @@ -25388,6 +26250,15 @@ __metadata: languageName: node linkType: hard +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10/b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + "minipass-fetch@npm:^3.0.0": version: 3.0.3 resolution: "minipass-fetch@npm:3.0.3" @@ -25467,7 +26338,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^7.1.2": +"minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" checksum: 10/c25f0ee8196d8e6036661104bacd743785b2599a21de5c516b32b3fa2b83113ac89a2358465bc04956baab37ffb956ae43be679b2262bf7be15fce467ccd7950 @@ -25571,6 +26442,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.3": + version: 1.0.3 + resolution: "module-details-from-path@npm:1.0.3" + checksum: 10/f93226e9154fc8cb91f4609b639167ec7ad9155b30be4924d9717656648a3ae5f181d4e2338434d4c5afc7b5f4c10dd3b64109e5b89a4be70b20a25ba3573d54 + languageName: node + linkType: hard + "mrmime@npm:^1.0.0": version: 1.0.1 resolution: "mrmime@npm:1.0.1" @@ -25875,6 +26753,26 @@ __metadata: languageName: node linkType: hard +"node-gyp@npm:^10.0.0": + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + tar: "npm:^6.2.1" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10/41773093b1275751dec942b985982fd4e7a69b88cae719b868babcef3880ee6168aaec8dcaa8cd0b9fa7c84873e36cc549c6cac6a124ee65ba4ce1f1cc108cfe + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 9.4.0 resolution: "node-gyp@npm:9.4.0" @@ -26018,6 +26916,17 @@ __metadata: languageName: node linkType: hard +"nopt@npm:^7.0.0, nopt@npm:^7.2.1": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10/95a1f6dec8a81cd18cdc2fed93e6f0b4e02cf6bdb4501c848752c6e34f9883d9942f036a5e3b21a699047d8a448562d891e67492df68ec9c373e6198133337ae + languageName: node + linkType: hard + "nopt@npm:^7.2.0": version: 7.2.0 resolution: "nopt@npm:7.2.0" @@ -26040,7 +26949,7 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^2.5.0": +"normalize-package-data@npm:^2.0.0, normalize-package-data@npm:^2.5.0": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" dependencies: @@ -26101,13 +27010,38 @@ __metadata: languageName: node linkType: hard -"npm-normalize-package-bin@npm:^1.0.1": +"npm-bundled@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-bundled@npm:3.0.1" + dependencies: + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10/113c9a35526d9a563694e9bda401dbda592f664fa146d365028bef1e3bfdc2a7b60ac9315a727529ef7e8e8d80b8d9e217742ccc2808e0db99c2204a3e33a465 + languageName: node + linkType: hard + +"npm-install-checks@npm:^6.0.0, npm-install-checks@npm:^6.2.0": + version: 6.3.0 + resolution: "npm-install-checks@npm:6.3.0" + dependencies: + semver: "npm:^7.1.1" + checksum: 10/6c20dadb878a0d2f1f777405217b6b63af1299d0b43e556af9363ee6eefaa98a17dfb7b612a473a473e96faf7e789c58b221e0d8ffdc1d34903c4f71618df3b4 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^1.0.0, npm-normalize-package-bin@npm:^1.0.1": version: 1.0.1 resolution: "npm-normalize-package-bin@npm:1.0.1" checksum: 10/b61593d1afc2b05258afe791043d1b665376ec91ae56dfcf6c67bb802acfc2c249136d3fb600f356562ef013f9e46a009c5e4769693bf13bcabf99fb5e806e6a languageName: node linkType: hard +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: 10/de416d720ab22137a36292ff8a333af499ea0933ef2320a8c6f56a73b0f0448227fec4db5c890d702e26d21d04f271415eab6580b5546456861cc0c19498a4bf + languageName: node + linkType: hard + "npm-package-arg@npm:11.0.1": version: 11.0.1 resolution: "npm-package-arg@npm:11.0.1" @@ -26120,6 +27054,18 @@ __metadata: languageName: node linkType: hard +"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10/bacc863907edf98940286edc2fd80327901c1e8b34426d538cdc708ed66bc6567f06d742d838eaf35db6804347bb4ba56ca9cef032c4b52743b33e7a22a2678e + languageName: node + linkType: hard + "npm-packlist@npm:^2.1.5": version: 2.2.2 resolution: "npm-packlist@npm:2.2.2" @@ -26134,6 +27080,43 @@ __metadata: languageName: node linkType: hard +"npm-packlist@npm:^8.0.0": + version: 8.0.2 + resolution: "npm-packlist@npm:8.0.2" + dependencies: + ignore-walk: "npm:^6.0.4" + checksum: 10/707206e5c09a1b8aa04e590592715ba5ab8732add1bbb5eeaff54b9c6b2740764c9e94c99e390c13245970b51c2cc92b8d44594c2784fcd96f255c7109622322 + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^9.0.0, npm-pick-manifest@npm:^9.0.1": + version: 9.1.0 + resolution: "npm-pick-manifest@npm:9.1.0" + dependencies: + npm-install-checks: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + npm-package-arg: "npm:^11.0.0" + semver: "npm:^7.3.5" + checksum: 10/e759e4fe4076da9169cf522964a80bbc096d50cd24c8c44b50b44706c4479bd9d9d018fbdb76c6ea0c6037e012e07c6c917a1ecaa7ae1a1169cddfae1c0f24b6 + languageName: node + linkType: hard + +"npm-registry-fetch@npm:^17.0.0, npm-registry-fetch@npm:^17.0.1": + version: 17.1.0 + resolution: "npm-registry-fetch@npm:17.1.0" + dependencies: + "@npmcli/redact": "npm:^2.0.0" + jsonparse: "npm:^1.3.1" + make-fetch-happen: "npm:^13.0.0" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minizlib: "npm:^2.1.2" + npm-package-arg: "npm:^11.0.0" + proc-log: "npm:^4.0.0" + checksum: 10/b9b2a73907fb5b2d8187031e040d7b2918f2b127ac858a84bd244f6435d16dd04df23c9660f32d7e9deb0216b91071623f040fd51b0bd375e8c7fed7d7a82a1c + languageName: node + linkType: hard + "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -26204,6 +27187,8 @@ __metadata: "@nx/react": "npm:19.6.1" "@nx/webpack": "npm:19.6.1" "@nx/workspace": "npm:19.6.1" + "@pulumi/gcp": "npm:^7.37.0" + "@pulumi/pulumi": "npm:^3.129.0" "@swc-node/register": "npm:1.10.9" "@swc/core": "npm:1.7.14" "@types/jest": "npm:29.5.12" @@ -26856,6 +27841,33 @@ __metadata: languageName: node linkType: hard +"pacote@npm:^18.0.0, pacote@npm:^18.0.6": + version: 18.0.6 + resolution: "pacote@npm:18.0.6" + dependencies: + "@npmcli/git": "npm:^5.0.0" + "@npmcli/installed-package-contents": "npm:^2.0.1" + "@npmcli/package-json": "npm:^5.1.0" + "@npmcli/promise-spawn": "npm:^7.0.0" + "@npmcli/run-script": "npm:^8.0.0" + cacache: "npm:^18.0.0" + fs-minipass: "npm:^3.0.0" + minipass: "npm:^7.0.2" + npm-package-arg: "npm:^11.0.0" + npm-packlist: "npm:^8.0.0" + npm-pick-manifest: "npm:^9.0.0" + npm-registry-fetch: "npm:^17.0.0" + proc-log: "npm:^4.0.0" + promise-retry: "npm:^2.0.1" + sigstore: "npm:^2.2.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + bin: + pacote: bin/index.js + checksum: 10/48cbcb3c20792952d431c995c2965340d3501e1795313d7225149435c883fb071d6a9bfbe11b1021dc888319f27a8c865cb70656f6472d7443545eb347447553 + languageName: node + linkType: hard + "param-case@npm:^2.1.0": version: 2.1.1 resolution: "param-case@npm:2.1.1" @@ -26884,6 +27896,17 @@ __metadata: languageName: node linkType: hard +"parse-conflict-json@npm:^3.0.0": + version: 3.0.1 + resolution: "parse-conflict-json@npm:3.0.1" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + just-diff: "npm:^6.0.0" + just-diff-apply: "npm:^5.2.0" + checksum: 10/ceb13ca90bd75610559125dc7b519e2806c096640142d6524e9b1ffdf08d6625b03a29d8afe4630d95460f703b9d5bc6dac21fcdcb00089213ffdb70800c900b + languageName: node + linkType: hard + "parse-entities@npm:^4.0.0": version: 4.0.1 resolution: "parse-entities@npm:4.0.1" @@ -27311,6 +28334,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^3.0.1": + version: 3.0.1 + resolution: "picomatch@npm:3.0.1" + checksum: 10/65ac837fedbd0640586f7c214f6c7481e1e12f41cdcd22a95eb6a2914d1773707ed0f0b5bd2d1e39b5ec7860b43a4c9150152332a3884cd8dd1d419b2a2fa5b5 + languageName: node + linkType: hard + "pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" @@ -28188,6 +29218,16 @@ __metadata: languageName: node linkType: hard +"postcss-selector-parser@npm:^6.0.10": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10/190034c94d809c115cd2f32ee6aade84e933450a43ec3899c3e78e7d7b33efd3a2a975bb45d7700b6c5b196c06a7d9acf3f1ba6f1d87032d9675a29d8bca1dd3 + languageName: node + linkType: hard + "postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5": version: 6.0.13 resolution: "postcss-selector-parser@npm:6.0.13" @@ -28460,6 +29500,13 @@ __metadata: languageName: node linkType: hard +"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10/4e1394491b717f6c1ade15c570ecd4c2b681698474d3ae2d303c1e4b6ab9455bd5a81566211e82890d5a5ae9859718cc6954d5150bb18b09b72ecb297beae90a + languageName: node + linkType: hard + "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -28474,6 +29521,13 @@ __metadata: languageName: node linkType: hard +"proggy@npm:^2.0.0": + version: 2.0.0 + resolution: "proggy@npm:2.0.0" + checksum: 10/9c96830d30516534c91e1260cae98d2c12aa32ea4ca7ff979876557ae293581c4874c95daf80497a7350179e7fec6d119cd589ef09af9c925f5842161897ed7e + languageName: node + linkType: hard + "progress-stream@npm:^2.0.0": version: 2.0.0 resolution: "progress-stream@npm:2.0.0" @@ -28484,6 +29538,27 @@ __metadata: languageName: node linkType: hard +"promise-all-reject-late@npm:^1.0.0": + version: 1.0.1 + resolution: "promise-all-reject-late@npm:1.0.1" + checksum: 10/f5e5c1bfed975c26b6dec007393e1026c437716d87c9c688cfa026bb904c190155211d23fe795c03c4394f88563471aec56b3ad263bff5ed68dad734513c2912 + languageName: node + linkType: hard + +"promise-call-limit@npm:^3.0.1": + version: 3.0.1 + resolution: "promise-call-limit@npm:3.0.1" + checksum: 10/f1b3c4d3a9c5482ce27ec5f40311e1389adb9bb10c16166e61c96d29ab22c701691d5225bf6745a162858f45dfb46cc82275fd09e7aa57846fc446c7855c2f06 + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 10/1560d413ea20c5a74f3631d39ba8cbd1972b9228072a755d01e1f5ca5110382d9af76a1582d889445adc6e75bb5ac4886b56dc4b6eae51b30145d7bb1ac7505b + languageName: node + linkType: hard + "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -28536,6 +29611,26 @@ __metadata: languageName: node linkType: hard +"protobufjs@npm:^7.2.5": + version: 7.4.0 + resolution: "protobufjs@npm:7.4.0" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.4" + "@protobufjs/eventemitter": "npm:^1.1.0" + "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/inquire": "npm:^1.1.0" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.0" + "@types/node": "npm:>=13.7.0" + long: "npm:^5.0.0" + checksum: 10/408423506610f70858d7593632f4a6aa4f05796c90fd632be9b9252457c795acc71aa6d3b54bb7f48a890141728fee4ca3906723ccea6c202ad71f21b3879b8b + languageName: node + linkType: hard + "protocols@npm:^2.0.0, protocols@npm:^2.0.1": version: 2.0.1 resolution: "protocols@npm:2.0.1" @@ -29328,6 +30423,35 @@ __metadata: languageName: node linkType: hard +"read-cmd-shim@npm:^4.0.0": + version: 4.0.0 + resolution: "read-cmd-shim@npm:4.0.0" + checksum: 10/69a83acf0a3e2357762d5944a6f4a3f3c5527d0f9fe8a5c9362225aaf702ccfa580ff3bc0b84809c99e88861a5e5be147629717f02ff9befdac68fca1ccc7664 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": + version: 3.0.2 + resolution: "read-package-json-fast@npm:3.0.2" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10/8d406869f045f1d76e2a99865a8fd1c1af9c1dc06200b94d2b07eef87ed734b22703a8d72e1cd36ea36cc48e22020bdd187f88243c7dd0563f72114d38c17072 + languageName: node + linkType: hard + +"read-package-json@npm:^2.0.13": + version: 2.1.2 + resolution: "read-package-json@npm:2.1.2" + dependencies: + glob: "npm:^7.1.1" + json-parse-even-better-errors: "npm:^2.3.0" + normalize-package-data: "npm:^2.0.0" + npm-normalize-package-bin: "npm:^1.0.0" + checksum: 10/52a5590a9c5677108f3452dc6f91253b9615bc411b42477f27b66f4820d889ef448c70ba6ddfe1a98695b1d6451e963f92c016264b2396e4096c5ca73c352395 + languageName: node + linkType: hard + "read-pkg-up@npm:7.0.1, read-pkg-up@npm:^7.0.1": version: 7.0.1 resolution: "read-pkg-up@npm:7.0.1" @@ -29755,13 +30879,24 @@ __metadata: languageName: node linkType: hard -"require-from-string@npm:^2.0.2": +"require-from-string@npm:^2.0.1, require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" checksum: 10/839a3a890102a658f4cb3e7b2aa13a1f80a3a976b512020c3d1efc418491c48a886b6e481ea56afc6c4cb5eef678f23b2a4e70575e7534eccadf5e30ed2e56eb languageName: node linkType: hard +"require-in-the-middle@npm:^7.1.1": + version: 7.4.0 + resolution: "require-in-the-middle@npm:7.4.0" + dependencies: + debug: "npm:^4.3.5" + module-details-from-path: "npm:^1.0.3" + resolve: "npm:^1.22.8" + checksum: 10/0ca30ad6a6183423f38599709fc8a670682db85b581a66cb31ea31342e8ba2ce7dca44ee29e8cfe4fb59ffcb0c2b0f9b77d44a10cdc7535c7c2907028e53afbf + languageName: node + linkType: hard + "require-like@npm:>= 0.1.1": version: 0.1.2 resolution: "require-like@npm:0.1.2" @@ -29861,7 +30996,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.22.8, resolve@npm:^1.22.2": +"resolve@npm:1.22.8, resolve@npm:^1.22.2, resolve@npm:^1.22.8": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -29887,7 +31022,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin": +"resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -30412,6 +31547,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.1.1": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10/36b1fbe1a2b6f873559cd57b238f1094a053dbfd997ceeb8757d79d1d2089c56d1321b9f1069ce263dc64cfa922fa1d2ad566b39426fe1ac6c723c1487589e10 + languageName: node + linkType: hard + "semver@npm:^7.3.2, semver@npm:^7.3.7": version: 7.6.2 resolution: "semver@npm:7.6.2" @@ -30650,6 +31794,13 @@ __metadata: languageName: node linkType: hard +"shimmer@npm:^1.2.1": + version: 1.2.1 + resolution: "shimmer@npm:1.2.1" + checksum: 10/aa0d6252ad1c682a4fdfda69e541be987f7a265ac7b00b1208e5e48cc68dc55f293955346ea4c71a169b7324b82c70f8400b3d3d2d60b2a7519f0a3522423250 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -30682,6 +31833,20 @@ __metadata: languageName: node linkType: hard +"sigstore@npm:^2.2.0": + version: 2.3.1 + resolution: "sigstore@npm:2.3.1" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + "@sigstore/sign": "npm:^2.3.2" + "@sigstore/tuf": "npm:^2.3.4" + "@sigstore/verify": "npm:^1.2.1" + checksum: 10/4e0a82338d12370264dced2395cda18aaaad45fec630365ec88eaa1a4ba40f5eb08cd3b0c8688489d52e93f643b6598d682961f67858636f55300c590b1ddf62 + languageName: node + linkType: hard + "simple-concat@npm:^1.0.0": version: 1.0.1 resolution: "simple-concat@npm:1.0.1" @@ -30946,6 +32111,17 @@ __metadata: languageName: node linkType: hard +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" + dependencies: + agent-base: "npm:^7.1.1" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10/c8e7c2b398338b49a0a0f4d2bae5c0602aeeca6b478b99415927b6c5db349ca258448f2c87c6958ebf83eea17d42cbc5d1af0bfecb276cac10b9658b0f07f7d7 + languageName: node + linkType: hard + "socks@npm:^2.6.2": version: 2.7.1 resolution: "socks@npm:2.7.1" @@ -30956,6 +32132,16 @@ __metadata: languageName: node linkType: hard +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10/ffcb622c22481dfcd7589aae71fbfd71ca34334064d181df64bf8b7feaeee19706aba4cffd1de35cc7bbaeeaa0af96be2d7f40fcbc7bc0ab69533a7ae9ffc4fb + languageName: node + linkType: hard + "sonner@npm:1.3.1": version: 1.3.1 resolution: "sonner@npm:1.3.1" @@ -31070,7 +32256,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.21, source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.21, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -31206,6 +32392,13 @@ __metadata: languageName: node linkType: hard +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10/e7587128c423f7e43cc625fe2f87e6affdf5ca51c1cc468e910d8aaca46bb44a7fbcfa552f787b1d3987f7043aeb4527d1b99559e6621e01b42b3f45e5a24cbb + languageName: node + linkType: hard + "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -31229,6 +32422,15 @@ __metadata: languageName: node linkType: hard +"ssri@npm:^10.0.6": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10/f92c1b3cc9bfd0a925417412d07d999935917bc87049f43ebec41074661d64cf720315661844106a77da9f8204b6d55ae29f9514e673083cae39464343af2a8b + languageName: node + linkType: hard + "stack-trace@npm:0.0.x": version: 0.0.10 resolution: "stack-trace@npm:0.0.10" @@ -31947,6 +33149,20 @@ __metadata: languageName: node linkType: hard +"tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10/bfbfbb2861888077fc1130b84029cdc2721efb93d1d1fb80f22a7ac3a98ec6f8972f29e564103bbebf5e97be67ebc356d37fa48dbc4960600a1eb7230fbd1ea0 + languageName: node + linkType: hard + "tar@npm:^7.4.3": version: 7.4.3 resolution: "tar@npm:7.4.3" @@ -32204,6 +33420,13 @@ __metadata: languageName: node linkType: hard +"tmp@npm:^0.2.1": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10/7b13696787f159c9754793a83aa79a24f1522d47b87462ddb57c18ee93ff26c74cbb2b8d9138f571d2e0e765c728fb2739863a672b280528512c6d83d511c6fa + languageName: node + linkType: hard + "tmp@npm:~0.2.1": version: 0.2.1 resolution: "tmp@npm:0.2.1" @@ -32345,6 +33568,13 @@ __metadata: languageName: node linkType: hard +"treeverse@npm:^3.0.0": + version: 3.0.0 + resolution: "treeverse@npm:3.0.0" + checksum: 10/a053ad73f800c64c53ecf0effe7ea12e16eae1cf03f0901ac6b61390b6440d05d0aa8c942b6e77d2e9237d247b36fd405284942419f3817c9c3ef43bc5236218 + languageName: node + linkType: hard + "trim-lines@npm:^3.0.0": version: 3.0.1 resolution: "trim-lines@npm:3.0.1" @@ -32603,6 +33833,17 @@ __metadata: languageName: node linkType: hard +"tuf-js@npm:^2.2.1": + version: 2.2.1 + resolution: "tuf-js@npm:2.2.1" + dependencies: + "@tufjs/models": "npm:2.0.1" + debug: "npm:^4.3.4" + make-fetch-happen: "npm:^13.0.1" + checksum: 10/4c057f4f0cfb183d8634c026a592f4fb29fd4e3d88260e32949642deedf87a1ae407645bae4cca58299458679a1cb7721245cde1885d466c2dbc1fbac0bc008a + languageName: node + linkType: hard + "tunnel-agent@npm:^0.6.0": version: 0.6.0 resolution: "tunnel-agent@npm:0.6.0" @@ -32903,6 +34144,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10/cf0b48ed4fc99baf56584afa91aaffa5010c268b8842f62e02f752df209e3dea138b372a60a963b3b2576ed932f32329ce7ddb9cb5f27a6c83040d8cd74b7a70 + languageName: node + linkType: hard + "undici@npm:^5.25.4": version: 5.28.4 resolution: "undici@npm:5.28.4" @@ -33158,6 +34406,13 @@ __metadata: languageName: node linkType: hard +"upath@npm:^1.1.0": + version: 1.2.0 + resolution: "upath@npm:1.2.0" + checksum: 10/ac07351d9e913eb7bc9bc0a17ed7d033a52575f0f2959e19726956c3e96f5d4d75aa6a7a777c4c9506e72372f58e06215e581f8dbff35611fc0a7b68ab4a6ddb + languageName: node + linkType: hard + "update-browserslist-db@npm:^1.0.11": version: 1.0.11 resolution: "update-browserslist-db@npm:1.0.11" @@ -33571,6 +34826,13 @@ __metadata: languageName: node linkType: hard +"walk-up-path@npm:^3.0.1": + version: 3.0.1 + resolution: "walk-up-path@npm:3.0.1" + checksum: 10/9ffca02fe30fb65f6db531260582988c5e766f4c739cf86a6109380a7f791236b5d0b92b1dce37a6f73e22dca6bc9d93bf3700413e16251b2bd6bbd1ca2be316 + languageName: node + linkType: hard + "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -34106,6 +35368,17 @@ __metadata: languageName: node linkType: hard +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10/f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + languageName: node + linkType: hard + "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -34253,6 +35526,16 @@ __metadata: languageName: node linkType: hard +"write-file-atomic@npm:^5.0.0": + version: 5.0.1 + resolution: "write-file-atomic@npm:5.0.1" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: 10/648efddba54d478d0e4330ab6f239976df3b9752b123db5dc9405d9b5af768fa9d70ce60c52fdbe61d1200d24350bc4fbcbaf09288496c2be050de126bd95b7e + languageName: node + linkType: hard + "ws@npm:8.13.0, ws@npm:^8.11.0, ws@npm:^8.13.0": version: 8.13.0 resolution: "ws@npm:8.13.0"