diff --git a/Documentation/client-snippets/contributing/clients/typescript-grpc-package/service-types.md b/Documentation/client-snippets/contributing/clients/typescript-grpc-package/service-types.md index 933076f..ab1399c 100644 --- a/Documentation/client-snippets/contributing/clients/typescript-grpc-package/service-types.md +++ b/Documentation/client-snippets/contributing/clients/typescript-grpc-package/service-types.md @@ -4,11 +4,7 @@ import { EventStoresClient, NamespacesClient } from '@cratis/chronicle.contracts async function readAvailableNamespaces(eventStores: EventStoresClient, namespaces: NamespacesClient): Promise { await eventStores.ensureEventStore({ Name: 'shopping' }); - // Queries stream results so they can also be observed; one-shot callers take the first result. - for await (const result of namespaces.allNamespaces({ EventStore: 'shopping' })) { - return result.Data; - } - - return []; + const result = await namespaces.allNamespaces({ EventStore: 'shopping' }); + return result.Data.map(namespace => namespace.Name); } ``` diff --git a/Source/ChronicleClient.ts b/Source/ChronicleClient.ts index 4d65186..04f9e88 100644 --- a/Source/ChronicleClient.ts +++ b/Source/ChronicleClient.ts @@ -6,7 +6,7 @@ import { diag } from '@opentelemetry/api'; import { SpanStatusCode } from '@opentelemetry/api'; import { ChronicleOptions } from './ChronicleOptions'; import { ChronicleConnection } from './connection'; -import { ensureCommandSuccess, ensureQuerySuccess, firstQueryResult } from './connection/callResults'; +import { ensureCommandSuccess, ensureQuerySuccess } from './connection/callResults'; import { ConnectionLifecycle } from './connection/ConnectionLifecycle'; import { KernelKeepAlive } from './connection/KernelKeepAlive'; import { EventStore } from './EventStore'; @@ -168,9 +168,9 @@ export class ChronicleClient implements IChronicleClient { try { const response = await this.withReconnect('get_event_stores', async () => { await this.ensureConnected(); - return firstQueryResult('get event stores', this._connection.eventStores.allEventStores({})); + return this._connection.eventStores.allEventStores({}); }); - const result = ensureQuerySuccess('get event stores', response).map((name: string) => new EventStoreName(name)); + const result = ensureQuerySuccess('get event stores', response).map(eventStore => new EventStoreName(eventStore.Name)); this._logger.verbose('Retrieved event stores from kernel', { count: result.length }); diff --git a/Source/EventStore.ts b/Source/EventStore.ts index 0bacf4a..642cd51 100644 --- a/Source/EventStore.ts +++ b/Source/EventStore.ts @@ -5,7 +5,7 @@ import { diag } from '@opentelemetry/api'; import { SpanStatusCode } from '@opentelemetry/api'; import { ChronicleConnection } from './connection'; import { ConnectionLifecycle } from './connection/ConnectionLifecycle'; -import { ensureQuerySuccess, firstQueryResult } from './connection/callResults'; +import { ensureQuerySuccess } from './connection/callResults'; import { EventLog } from './eventSequences/EventLog'; import { EventSequence } from './eventSequences/EventSequence'; import { EventSequenceId } from './eventSequences/EventSequenceId'; @@ -164,8 +164,8 @@ export class EventStore implements IEventStore { return ChronicleTracer.startActiveSpan('chronicle.event_store.get_namespaces', async span => { span.setAttribute('chronicle.event_store', this.name.value); try { - const response = await firstQueryResult('get namespaces', this._connection.namespaces.allNamespaces({ EventStore: this.name.value })); - const result = ensureQuerySuccess('get namespaces', response).map((namespace: string) => new EventStoreNamespaceName(namespace)); + const response = await this._connection.namespaces.allNamespaces({ EventStore: this.name.value }); + const result = ensureQuerySuccess('get namespaces', response).map(namespace => new EventStoreNamespaceName(namespace.Name)); span.setStatus({ code: SpanStatusCode.OK }); return result; } catch (error) { diff --git a/Source/connection/ChronicleConnection.ts b/Source/connection/ChronicleConnection.ts index 259310c..049869d 100644 --- a/Source/connection/ChronicleConnection.ts +++ b/Source/connection/ChronicleConnection.ts @@ -17,6 +17,7 @@ import { ObserversDefinition, ProjectionsDefinition, ReactorsDefinition, + ReadModelExplorerDefinition, ReadModelsDefinition, RecommendationsDefinition, ReducersDefinition, @@ -184,6 +185,10 @@ export class ChronicleConnection implements ChronicleServices { return this._services.readModels; } + get readModelExplorer() { + return this._services.readModelExplorer; + } + get materializedReadModels() { return this._services.materializedReadModels; } @@ -286,6 +291,7 @@ export class ChronicleConnection implements ChronicleServices { reducers: factory.create(ReducersDefinition, this._channel), projections: factory.create(ProjectionsDefinition, this._channel), readModels: factory.create(ReadModelsDefinition, this._channel), + readModelExplorer: factory.create(ReadModelExplorerDefinition, this._channel), materializedReadModels: factory.create(MaterializedReadModelsDefinition, this._channel), jobs: factory.create(JobsDefinition, this._channel), webhooks: factory.create(WebhooksDefinition, this._channel), diff --git a/Source/connection/ChronicleServices.ts b/Source/connection/ChronicleServices.ts index f4dd765..562e66b 100644 --- a/Source/connection/ChronicleServices.ts +++ b/Source/connection/ChronicleServices.ts @@ -15,6 +15,7 @@ import type { ObserversClient, ProjectionsClient, ReactorsClient, + ReadModelExplorerClient, ReadModelsClient, RecommendationsClient, ReducersClient, @@ -43,6 +44,7 @@ export interface ChronicleServices { reducers: ReducersClient; projections: ProjectionsClient; readModels: ReadModelsClient; + readModelExplorer: ReadModelExplorerClient; materializedReadModels: MaterializedReadModelsClient; jobs: JobsClient; webhooks: WebhooksClient; diff --git a/Source/connection/callResults.ts b/Source/connection/callResults.ts index 20d4903..3c7df7f 100644 --- a/Source/connection/callResults.ts +++ b/Source/connection/callResults.ts @@ -32,6 +32,13 @@ export interface QueryResultLike extends CallResultLike { Data: TData; } +/** + * Structural shape shared by every Chronicle command result envelope that carries a response payload. + */ +export interface CommandResultLike extends CallResultLike { + Response: TResponse | undefined; +} + /** * Error thrown when a Chronicle command or query did not succeed. */ @@ -81,6 +88,22 @@ export function ensureCommandSuccess(operation: string, result: CallResultLike): } } +/** + * Ensures a Chronicle command executed successfully, returning its response or throwing when it did not. + * @param operation - The operation the result belongs to, used for error reporting. + * @param result - The command result envelope returned by the kernel. + * @returns The response produced by the command. + */ +export function ensureCommandResponse(operation: string, result: CommandResultLike): TResponse { + if (!isCallSuccess(result)) { + throw new ChronicleCallFailed(operation, result); + } + + // A successful command result always carries its response; the wire type marks it optional + // only because protobuf gives every singular message field a technically-absent state. + return result.Response!; +} + /** * Ensures a Chronicle query executed successfully, returning its data or throwing when it did not. * @param operation - The operation the result belongs to, used for error reporting. diff --git a/Source/eventSequences/EventSequence.spec.ts b/Source/eventSequences/EventSequence.spec.ts index 9547f17..151615f 100644 --- a/Source/eventSequences/EventSequence.spec.ts +++ b/Source/eventSequences/EventSequence.spec.ts @@ -27,12 +27,12 @@ function createEventSequence( const eventSequences = { redact: vi.fn().mockResolvedValue({}), redactForEventSource: vi.fn().mockResolvedValue({}), - getForEventSourceIdAndEventTypes: vi.fn().mockResolvedValue({ Events: [] }), - getEventsFromEventSequenceNumber: vi.fn().mockResolvedValue({ Events: [] }), - getTailSequenceNumber: vi.fn().mockResolvedValue({ SequenceNumber: EventSequenceNumber.unset.value }), - completeStream: vi.fn().mockResolvedValue({ IsSuccess: true, SequenceNumber: 3n, Error: 0 }), - appendMany: vi.fn().mockResolvedValue({ SequenceNumbers: [], ConstraintViolations: [], Errors: [] }), - append: vi.fn().mockResolvedValue({ SequenceNumber: 0n, ConstraintViolations: [], Errors: [] }), + forEventSourceIdAndEventTypes: vi.fn().mockResolvedValue({ Data: [] }), + fromSequenceNumber: vi.fn().mockResolvedValue({ Data: [] }), + tailSequenceNumber: vi.fn().mockResolvedValue({ Data: { SequenceNumber: EventSequenceNumber.unset.value } }), + completeStream: vi.fn().mockResolvedValue({ Response: { IsSuccess: true, SequenceNumber: 3n, Error: 0 } }), + appendManyForEventSources: vi.fn().mockResolvedValue({ Response: { SequenceNumbers: [], ConstraintViolations: [], Errors: [] } }), + append: vi.fn().mockResolvedValue({ Response: { SequenceNumber: 0n, ConstraintViolations: [], Errors: [] } }), ...overrides }; const observers = { @@ -53,11 +53,11 @@ function createEventSequence( eventSequence, redact: eventSequences.redact, redactForEventSource: eventSequences.redactForEventSource, - getForEventSourceIdAndEventTypes: eventSequences.getForEventSourceIdAndEventTypes, - getEventsFromEventSequenceNumber: eventSequences.getEventsFromEventSequenceNumber, - getTailSequenceNumber: eventSequences.getTailSequenceNumber, + forEventSourceIdAndEventTypes: eventSequences.forEventSourceIdAndEventTypes, + fromSequenceNumber: eventSequences.fromSequenceNumber, + tailSequenceNumber: eventSequences.tailSequenceNumber, completeStream: eventSequences.completeStream, - appendMany: eventSequences.appendMany, + appendManyForEventSources: eventSequences.appendManyForEventSources, append: eventSequences.append, waitForCompletion: observers.waitForCompletion }; @@ -144,24 +144,24 @@ describe('EventSequence', () => { expect(redactForEventSource).toHaveBeenCalledTimes(1); const request = redactForEventSource.mock.calls[0][0]; expect(request.EventTypes).toEqual([ - { Id: 'a3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3f', Generation: 1, Tombstone: false }, - { Id: 'b3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3g', Generation: 1, Tombstone: false } + 'a3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3f', + 'b3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3g' ]); }); }); describe('when getting events for an event source and event types', () => { - const { eventSequence, getForEventSourceIdAndEventTypes } = createEventSequence({ - getForEventSourceIdAndEventTypes: vi.fn().mockResolvedValue({ Events: [wireAppendedEvent()] }) + const { eventSequence, forEventSourceIdAndEventTypes } = createEventSequence({ + forEventSourceIdAndEventTypes: vi.fn().mockResolvedValue({ Data: [wireAppendedEvent()] }) }); it('should call the RPC with the resolved event type filter and map the response', async () => { const result = await eventSequence.getForEventSourceIdAndEventTypes('some-event-source', [SomethingHappened]); - expect(getForEventSourceIdAndEventTypes).toHaveBeenCalledTimes(1); - const request = getForEventSourceIdAndEventTypes.mock.calls[0][0]; + expect(forEventSourceIdAndEventTypes).toHaveBeenCalledTimes(1); + const request = forEventSourceIdAndEventTypes.mock.calls[0][0]; expect(request.EventSourceId).toEqual('some-event-source'); - expect(request.EventTypes).toEqual([{ Id: 'a3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3f', Generation: 1, Tombstone: false }]); + expect(request.EventTypeIds).toEqual('a3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3f'); expect(result).toHaveLength(1); expect(result[0].context.sequenceNumber).toEqual(7n); @@ -173,18 +173,18 @@ describe('EventSequence', () => { }); describe('when getting events from a sequence number', () => { - const { eventSequence, getEventsFromEventSequenceNumber } = createEventSequence({ - getEventsFromEventSequenceNumber: vi.fn().mockResolvedValue({ Events: [wireAppendedEvent()] }) + const { eventSequence, fromSequenceNumber } = createEventSequence({ + fromSequenceNumber: vi.fn().mockResolvedValue({ Data: [wireAppendedEvent()] }) }); it('should call the RPC starting from the given sequence number and map the response', async () => { const result = await eventSequence.getFromSequenceNumber(new EventSequenceNumber(7n), 'some-event-source', [SomethingHappened]); - expect(getEventsFromEventSequenceNumber).toHaveBeenCalledTimes(1); - const request = getEventsFromEventSequenceNumber.mock.calls[0][0]; + expect(fromSequenceNumber).toHaveBeenCalledTimes(1); + const request = fromSequenceNumber.mock.calls[0][0]; expect(request.FromEventSequenceNumber).toEqual(7n); expect(request.EventSourceId).toEqual('some-event-source'); - expect(request.EventTypes).toEqual([{ Id: 'a3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3f', Generation: 1, Tombstone: false }]); + expect(request.EventTypeIds).toEqual('a3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3f'); expect(result).toHaveLength(1); expect(result[0].content).toEqual({ value: 'hello' }); @@ -192,21 +192,21 @@ describe('EventSequence', () => { }); describe('when getting the next sequence number and the sequence is empty', () => { - const { eventSequence, getTailSequenceNumber } = createEventSequence({ - getTailSequenceNumber: vi.fn().mockResolvedValue({ SequenceNumber: EventSequenceNumber.unset.value }) + const { eventSequence, tailSequenceNumber } = createEventSequence({ + tailSequenceNumber: vi.fn().mockResolvedValue({ Data: { SequenceNumber: EventSequenceNumber.unset.value } }) }); it('should return the first sequence number', async () => { const result = await eventSequence.getNextSequenceNumber(); - expect(getTailSequenceNumber).toHaveBeenCalledTimes(1); + expect(tailSequenceNumber).toHaveBeenCalledTimes(1); expect(result.value).toEqual(EventSequenceNumber.first.value); }); }); describe('when getting the next sequence number and events already exist', () => { const { eventSequence } = createEventSequence({ - getTailSequenceNumber: vi.fn().mockResolvedValue({ SequenceNumber: 41n }) + tailSequenceNumber: vi.fn().mockResolvedValue({ Data: { SequenceNumber: 41n } }) }); it('should return one past the tail sequence number', async () => { @@ -221,23 +221,23 @@ describe('EventSequence', () => { async somethingHappened(): Promise {} } - const { eventSequence, getTailSequenceNumber } = createEventSequence({ - getTailSequenceNumber: vi.fn().mockResolvedValue({ SequenceNumber: 5n }) + const { eventSequence, tailSequenceNumber } = createEventSequence({ + tailSequenceNumber: vi.fn().mockResolvedValue({ Data: { SequenceNumber: 5n } }) }); it('should filter the tail sequence number lookup to the event types the observer handles', async () => { await eventSequence.getTailSequenceNumberForObserver(SomeReactor); - expect(getTailSequenceNumber).toHaveBeenCalledTimes(1); - const request = getTailSequenceNumber.mock.calls[0][0]; - expect(request.EventTypes).toContainEqual({ Id: 'a3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3f', Generation: 1, Tombstone: false }); - expect(request.EventTypes).not.toContainEqual({ Id: 'b3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3g', Generation: 1, Tombstone: false }); + expect(tailSequenceNumber).toHaveBeenCalledTimes(1); + const request = tailSequenceNumber.mock.calls[0][0]; + expect(request.EventTypeIds).toContain('a3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3f'); + expect(request.EventTypeIds).not.toContain('b3f6a2f0-6f2f-4a3c-9d3f-6f2f4a3c9d3g'); }); }); describe('when completing a non-default stream successfully', () => { const { eventSequence, completeStream } = createEventSequence({ - completeStream: vi.fn().mockResolvedValue({ IsSuccess: true, SequenceNumber: 9n, Error: 0 }) + completeStream: vi.fn().mockResolvedValue({ Response: { IsSuccess: true, SequenceNumber: 9n, Error: 0 } }) }); it('should call the RPC and return the tail sequence number', async () => { @@ -257,7 +257,7 @@ describe('EventSequence', () => { describe('when completing the default stream', () => { const { eventSequence } = createEventSequence({ - completeStream: vi.fn().mockResolvedValue({ IsSuccess: false, SequenceNumber: 0n, Error: 1 }) + completeStream: vi.fn().mockResolvedValue({ Response: { IsSuccess: false, SequenceNumber: 0n, Error: 1 } }) }); it('should return the DefaultStreamCannotBeCompleted error', async () => { @@ -272,7 +272,7 @@ describe('EventSequence', () => { describe('when completing an already-completed stream', () => { const { eventSequence } = createEventSequence({ - completeStream: vi.fn().mockResolvedValue({ IsSuccess: false, SequenceNumber: 0n, Error: 0 }) + completeStream: vi.fn().mockResolvedValue({ Response: { IsSuccess: false, SequenceNumber: 0n, Error: 0 } }) }); it('should return the AlreadyCompleted error', async () => { @@ -286,7 +286,7 @@ describe('EventSequence', () => { }); describe('when appending many events for distinct event sources with a shared concurrency scope option', () => { - const { eventSequence, appendMany } = createEventSequence(); + const { eventSequence, appendManyForEventSources } = createEventSequence(); it('should apply the same concurrency scope to every distinct event source id', async () => { await eventSequence.appendMany( @@ -296,15 +296,16 @@ describe('EventSequence', () => { ], { concurrencyScope: { sequenceNumber: 5n } }); - expect(appendMany).toHaveBeenCalledTimes(1); - const request = appendMany.mock.calls[0][0]; - expect(request.ConcurrencyScopes['source-1'].SequenceNumber).toEqual(5n); - expect(request.ConcurrencyScopes['source-2'].SequenceNumber).toEqual(5n); + expect(appendManyForEventSources).toHaveBeenCalledTimes(1); + const request = appendManyForEventSources.mock.calls[0][0]; + const scopeFor = (eventSourceId: string) => request.ConcurrencyScopes.find((s: { EventSourceId: string }) => s.EventSourceId === eventSourceId).Scope; + expect(scopeFor('source-1').SequenceNumber).toEqual(5n); + expect(scopeFor('source-2').SequenceNumber).toEqual(5n); }); }); describe('when appending many events for distinct event sources with a per-event-source-id concurrency scope map', () => { - const { eventSequence, appendMany } = createEventSequence(); + const { eventSequence, appendManyForEventSources } = createEventSequence(); it('should apply the distinct concurrency scope for each event source id', async () => { await eventSequence.appendMany( @@ -319,15 +320,16 @@ describe('EventSequence', () => { } }); - expect(appendMany).toHaveBeenCalledTimes(1); - const request = appendMany.mock.calls[0][0]; - expect(request.ConcurrencyScopes['source-1'].SequenceNumber).toEqual(5n); - expect(request.ConcurrencyScopes['source-2'].SequenceNumber).toEqual(9n); + expect(appendManyForEventSources).toHaveBeenCalledTimes(1); + const request = appendManyForEventSources.mock.calls[0][0]; + const scopeFor = (eventSourceId: string) => request.ConcurrencyScopes.find((s: { EventSourceId: string }) => s.EventSourceId === eventSourceId).Scope; + expect(scopeFor('source-1').SequenceNumber).toEqual(5n); + expect(scopeFor('source-2').SequenceNumber).toEqual(9n); }); }); describe('when appending many events with a per-event-source-id map that only covers some sources', () => { - const { eventSequence, appendMany } = createEventSequence(); + const { eventSequence, appendManyForEventSources } = createEventSequence(); it('should fall back to the shared concurrency scope for sources without a map entry', async () => { await eventSequence.appendMany( @@ -342,15 +344,16 @@ describe('EventSequence', () => { } }); - expect(appendMany).toHaveBeenCalledTimes(1); - const request = appendMany.mock.calls[0][0]; - expect(request.ConcurrencyScopes['source-1'].SequenceNumber).toEqual(5n); - expect(request.ConcurrencyScopes['source-2'].SequenceNumber).toEqual(1n); + expect(appendManyForEventSources).toHaveBeenCalledTimes(1); + const request = appendManyForEventSources.mock.calls[0][0]; + const scopeFor = (eventSourceId: string) => request.ConcurrencyScopes.find((s: { EventSourceId: string }) => s.EventSourceId === eventSourceId).Scope; + expect(scopeFor('source-1').SequenceNumber).toEqual(5n); + expect(scopeFor('source-2').SequenceNumber).toEqual(1n); }); }); describe('when an EventForEventSourceId specifies its own stream targeting', () => { - const { eventSequence, appendMany } = createEventSequence(); + const { eventSequence, appendManyForEventSources } = createEventSequence(); it('should use the wrapper\'s own event stream type, id, source type, and subject', async () => { await eventSequence.appendMany([ @@ -364,8 +367,8 @@ describe('EventSequence', () => { } ]); - expect(appendMany).toHaveBeenCalledTimes(1); - const request = appendMany.mock.calls[0][0]; + expect(appendManyForEventSources).toHaveBeenCalledTimes(1); + const request = appendManyForEventSources.mock.calls[0][0]; const [event] = request.Events; expect(event.EventStreamType).toEqual('custom-stream-type'); expect(event.EventStreamId).toEqual('custom-stream-id'); @@ -375,15 +378,15 @@ describe('EventSequence', () => { }); describe('when an EventForEventSourceId does not specify stream targeting', () => { - const { eventSequence, appendMany } = createEventSequence(); + const { eventSequence, appendManyForEventSources } = createEventSequence(); it('should default to the default stream type, the event source id as stream id, and the event source id as subject', async () => { await eventSequence.appendMany([ { eventSourceId: 'source-1', event: new SomethingHappened('a') } ]); - expect(appendMany).toHaveBeenCalledTimes(1); - const request = appendMany.mock.calls[0][0]; + expect(appendManyForEventSources).toHaveBeenCalledTimes(1); + const request = appendManyForEventSources.mock.calls[0][0]; const [event] = request.Events; expect(event.EventStreamType).toEqual('Default'); expect(event.EventStreamId).toEqual('source-1'); @@ -394,7 +397,7 @@ describe('EventSequence', () => { describe('when subscribing to appendOperations and appending a single event', () => { const { eventSequence } = createEventSequence({ - append: vi.fn().mockResolvedValue({ SequenceNumber: 42n, ConstraintViolations: [], Errors: [] }) + append: vi.fn().mockResolvedValue({ Response: { SequenceNumber: 42n, ConstraintViolations: [], Errors: [] } }) }); it('should publish the appended event and its result to the subscriber', async () => { @@ -416,7 +419,7 @@ describe('EventSequence', () => { describe('when subscribing to appendOperations and appending many events', () => { const { eventSequence } = createEventSequence({ - appendMany: vi.fn().mockResolvedValue({ SequenceNumbers: [10n, 11n], ConstraintViolations: [], Errors: [] }) + appendManyForEventSources: vi.fn().mockResolvedValue({ Response: { SequenceNumbers: [10n, 11n], ConstraintViolations: [], Errors: [] } }) }); it('should publish the full batch to the subscriber', async () => { @@ -439,7 +442,7 @@ describe('EventSequence', () => { describe('when two subscribers are iterating appendOperations at the same time', () => { const { eventSequence } = createEventSequence({ - append: vi.fn().mockResolvedValue({ SequenceNumber: 1n, ConstraintViolations: [], Errors: [] }) + append: vi.fn().mockResolvedValue({ Response: { SequenceNumber: 1n, ConstraintViolations: [], Errors: [] } }) }); it('should multicast the same append to every subscriber', async () => { @@ -457,7 +460,7 @@ describe('EventSequence', () => { describe('when nobody is subscribed to appendOperations', () => { const { eventSequence } = createEventSequence({ - append: vi.fn().mockResolvedValue({ SequenceNumber: 1n, ConstraintViolations: [], Errors: [] }) + append: vi.fn().mockResolvedValue({ Response: { SequenceNumber: 1n, ConstraintViolations: [], Errors: [] } }) }); it('should still complete the append normally', async () => { @@ -470,7 +473,7 @@ describe('EventSequence', () => { describe('when waiting for completion after a successful append', () => { const { eventSequence, waitForCompletion } = createEventSequence( - { append: vi.fn().mockResolvedValue({ SequenceNumber: 42n, ConstraintViolations: [], Errors: [] }) }, + { append: vi.fn().mockResolvedValue({ Response: { SequenceNumber: 42n, ConstraintViolations: [], Errors: [] } }) }, { waitForCompletion: vi.fn().mockResolvedValue({ IsSuccess: true, FailedPartitions: [] }) }); it('should call the WaitForCompletion RPC with the appended tail sequence number', async () => { @@ -498,7 +501,7 @@ describe('EventSequence', () => { describe('when waiting for completion and observers report a failed partition', () => { const { eventSequence } = createEventSequence( - { append: vi.fn().mockResolvedValue({ SequenceNumber: 42n, ConstraintViolations: [], Errors: [] }) }, + { append: vi.fn().mockResolvedValue({ Response: { SequenceNumber: 42n, ConstraintViolations: [], Errors: [] } }) }, { waitForCompletion: vi.fn().mockResolvedValue({ IsSuccess: false, @@ -525,9 +528,11 @@ describe('EventSequence', () => { describe('when waiting for completion after an append that itself failed', () => { const { eventSequence, waitForCompletion } = createEventSequence({ append: vi.fn().mockResolvedValue({ - SequenceNumber: 0n, - ConstraintViolations: [{ ConstraintId: 'unique', Message: 'Value must be unique', Details: {} }], - Errors: [] + Response: { + SequenceNumber: 0n, + ConstraintViolations: [{ ConstraintId: 'unique', Message: 'Value must be unique', Details: {} }], + Errors: [] + } }) }); @@ -544,10 +549,12 @@ describe('EventSequence', () => { describe('when a single append fails with a concurrency violation', () => { const { eventSequence } = createEventSequence({ append: vi.fn().mockResolvedValue({ - SequenceNumber: 18446744073709551615n, - ConstraintViolations: [], - Errors: [], - ConcurrencyViolation: { EventSourceId: 'some-event-source', ExpectedSequenceNumber: 1n, ActualSequenceNumber: 2n } + Response: { + SequenceNumber: 18446744073709551615n, + ConstraintViolations: [], + Errors: [], + ConcurrencyViolation: { EventSourceId: 'some-event-source', ExpectedSequenceNumber: 1n, ActualSequenceNumber: 2n } + } }) }); @@ -565,11 +572,13 @@ describe('EventSequence', () => { describe('when appendMany fails with a concurrency violation', () => { const { eventSequence } = createEventSequence({ - appendMany: vi.fn().mockResolvedValue({ - SequenceNumbers: [18446744073709551615n], - ConstraintViolations: [], - Errors: [], - ConcurrencyViolations: [{ EventSourceId: 'some-event-source', ExpectedSequenceNumber: 1n, ActualSequenceNumber: 2n }] + appendManyForEventSources: vi.fn().mockResolvedValue({ + Response: { + SequenceNumbers: [18446744073709551615n], + ConstraintViolations: [], + Errors: [], + ConcurrencyViolations: [{ EventSourceId: 'some-event-source', ExpectedSequenceNumber: 1n, ActualSequenceNumber: 2n }] + } }) }); diff --git a/Source/eventSequences/EventSequence.ts b/Source/eventSequences/EventSequence.ts index a01f134..3b2d7a7 100644 --- a/Source/eventSequences/EventSequence.ts +++ b/Source/eventSequences/EventSequence.ts @@ -3,7 +3,7 @@ import { ChronicleConnection } from '../connection'; import { SpanStatusCode } from '@opentelemetry/api'; -import type { AppendedEvent as ContractsAppendedEvent } from '@cratis/chronicle.contracts'; +import type { AppendedEventResponse as ContractsAppendedEvent } from '@cratis/chronicle.contracts'; import { Constructor, Guid, JsonSerializer } from '@cratis/fundamentals'; import { getEventTypeFor } from '../events/eventTypeDecorator'; import type { AppendedEvent } from '../events/AppendedEvent'; @@ -40,6 +40,7 @@ import { identityProvider, Identity } from '../identity'; import { causationManager, CausationType } from '../auditing'; import { correlationIdManager } from '../correlation'; import { fromContractsGuid, toContractsGuid } from '../connection/Guid'; +import { ensureCommandResponse, ensureCommandSuccess, ensureQuerySuccess } from '../connection/callResults'; import type { ConcurrencyScope } from './ConcurrencyScope'; import { IUnitOfWorkManager } from '../transactions/IUnitOfWorkManager'; @@ -67,7 +68,7 @@ export class EventSequence implements IEventSequence { const correlationId = options?.correlationId === undefined ? Guid.as(correlationIdManager.current.value) : Guid.as(options.correlationId); - const content = JsonSerializer.serialize(event); + const content = JSON.parse(JsonSerializer.serialize(event)); // Merge static tags declared on the event type with tags supplied at append time. const tags = mergeTags(getTagsFor(event.constructor as Function), options?.tags); @@ -119,12 +120,13 @@ export class EventSequence implements IEventSequence { Subject: eventSourceId }); + const appendResponse = ensureCommandResponse('append event', response); const duration = Date.now() - startTime; const result = this.mapAppendResponse( - response.SequenceNumber, - response.ConstraintViolations ?? [], - response.Errors ?? [], - response.ConcurrencyViolation + appendResponse.SequenceNumber, + appendResponse.ConstraintViolations ?? [], + appendResponse.Errors ?? [], + appendResponse.ConcurrencyViolation ); span.setAttribute('chronicle.sequence_number', result.sequenceNumber.value.toString()); span.setStatus({ code: SpanStatusCode.OK }); @@ -247,13 +249,7 @@ export class EventSequence implements IEventSequence { Generation: eventType.generation.value, Tombstone: eventType.tombstone }, - Content: JsonSerializer.serialize(event), - Causation: batchCausationChain.map(c => ({ - Occurred: { Value: c.occurred.toISOString() }, - Type: c.type.name, - Properties: { ...c.properties } - })), - CausedBy: toContractsCausedBy(identity), + Content: JSON.parse(JsonSerializer.serialize(event)), Tags: tags, Occurred: undefined, Subject: subject ?? eventSourceId @@ -279,7 +275,7 @@ export class EventSequence implements IEventSequence { span.setAttribute('chronicle.events_count', eventsForEventSourceIds.length); const startTime = Date.now(); try { - const response = await this._connection.eventSequences.appendMany({ + const response = await this._connection.eventSequences.appendManyForEventSources({ EventStore: this._eventStoreName, Namespace: this._namespace, EventSequenceId: this.id.value, @@ -291,21 +287,23 @@ export class EventSequence implements IEventSequence { Properties: { ...c.properties } })), CausedBy: toContractsCausedBy(identity), - ConcurrencyScopes: { - ...Object.fromEntries(distinctEventSourceIds.map(eventSourceId => [eventSourceId, resolveConcurrencyScope(eventSourceId)])) - } + ConcurrencyScopes: distinctEventSourceIds.map(eventSourceId => ({ + EventSourceId: eventSourceId, + Scope: resolveConcurrencyScope(eventSourceId) + })) }); + const appendManyResponse = ensureCommandResponse('append many events', response); const duration = Date.now() - startTime; // Mirrors the C# client: every per-event AppendResult in a batch carries all // constraint violations and the first concurrency violation of the whole batch — // the wire response doesn't correlate either back to a specific event index. - const firstConcurrencyViolation = (response.ConcurrencyViolations ?? [])[0]; - const result = (response.SequenceNumbers ?? []).map((sequenceNumber: bigint, index: number) => + const firstConcurrencyViolation = (appendManyResponse.ConcurrencyViolations ?? [])[0]; + const result = (appendManyResponse.SequenceNumbers ?? []).map((sequenceNumber: bigint, index: number) => this.mapAppendResponse( sequenceNumber, - response.ConstraintViolations ?? [], - (response.Errors ?? []).filter((_: string, errorIndex: number) => errorIndex === index), + appendManyResponse.ConstraintViolations ?? [], + (appendManyResponse.Errors ?? []).filter((_: string, errorIndex: number) => errorIndex === index), firstConcurrencyViolation ) ); @@ -398,18 +396,19 @@ export class EventSequence implements IEventSequence { span.setAttribute('chronicle.event_source_id', eventSourceId); } try { - const response = await this._connection.eventSequences.getTailSequenceNumber({ + const response = await this._connection.eventSequences.tailSequenceNumber({ EventStore: this._eventStoreName, Namespace: this._namespace, EventSequenceId: this.id.value, EventSourceId: eventSourceId ?? '', - EventTypes: this.toContractEventTypes(filterEventTypes ?? []), + EventTypeIds: this.joinEventTypeIds(filterEventTypes ?? []), EventSourceType: eventSourceType ?? 'Default', EventStreamId: eventStreamId ?? '', EventStreamType: eventStreamType ?? 'Default' }); - const result = new EventSequenceNumber(response.SequenceNumber ?? 0n); + const data = ensureQuerySuccess('get tail sequence number', response); + const result = new EventSequenceNumber(data?.SequenceNumber ?? 0n); span.setAttribute('chronicle.sequence_number', result.value.toString()); span.setStatus({ code: SpanStatusCode.OK }); return result; @@ -444,7 +443,7 @@ export class EventSequence implements IEventSequence { EventSourceId: eventSourceId }); - const result = response.HasEvents ?? false; + const result = ensureQuerySuccess('has events for event source', response)?.HasEvents ?? false; span.setAttribute('chronicle.has_events', result); span.setStatus({ code: SpanStatusCode.OK }); return result; @@ -464,7 +463,8 @@ export class EventSequence implements IEventSequence { eventTypes: Constructor[], eventStreamType?: string, eventStreamId?: string, - eventSourceType?: string + // Kept for IEventSequence signature compatibility; the wire no longer carries an event source type for this query. + _eventSourceType?: string ): Promise { return ChronicleTracer.startActiveSpan('chronicle.event_sequences.get_for_event_source_id_and_event_types', async span => { span.setAttribute('chronicle.event_store', this._eventStoreName); @@ -472,18 +472,17 @@ export class EventSequence implements IEventSequence { span.setAttribute('chronicle.event_sequence_id', this.id.value); span.setAttribute('chronicle.event_source_id', eventSourceId); try { - const response = await this._connection.eventSequences.getForEventSourceIdAndEventTypes({ + const response = await this._connection.eventSequences.forEventSourceIdAndEventTypes({ EventStore: this._eventStoreName, Namespace: this._namespace, EventSequenceId: this.id.value, - EventSourceType: eventSourceType ?? 'Default', EventSourceId: eventSourceId, EventStreamType: eventStreamType ?? 'Default', EventStreamId: eventStreamId ?? '', - EventTypes: this.toContractEventTypes(eventTypes) + EventTypeIds: this.joinEventTypeIds(eventTypes) }); - const result = (response.Events ?? []).map(event => this.toClientAppendedEvent(event)); + const result = ensureQuerySuccess('get events for event source id and event types', response).map(event => this.toClientAppendedEvent(event)); span.setStatus({ code: SpanStatusCode.OK }); return result; } catch (error) { @@ -508,17 +507,16 @@ export class EventSequence implements IEventSequence { span.setAttribute('chronicle.event_sequence_id', this.id.value); span.setAttribute('chronicle.sequence_number', sequenceNumber.value.toString()); try { - const response = await this._connection.eventSequences.getEventsFromEventSequenceNumber({ + const response = await this._connection.eventSequences.fromSequenceNumber({ EventStore: this._eventStoreName, Namespace: this._namespace, EventSequenceId: this.id.value, FromEventSequenceNumber: sequenceNumber.value, - ToEventSequenceNumber: 0n, EventSourceId: eventSourceId ?? '', - EventTypes: this.toContractEventTypes(filterEventTypes ?? []) + EventTypeIds: this.joinEventTypeIds(filterEventTypes ?? []) }); - const result = (response.Events ?? []).map(event => this.toClientAppendedEvent(event)); + const result = ensureQuerySuccess('get events from sequence number', response).map(event => this.toClientAppendedEvent(event)); span.setStatus({ code: SpanStatusCode.OK }); return result; } catch (error) { @@ -536,7 +534,6 @@ export class EventSequence implements IEventSequence { causationManager.add(CausationType.redact, { sequenceNumber: sequenceNumber.value.toString() }); const causationChain = causationManager.getCurrentChain(); const identity = identityProvider.getCurrent(); - const correlationId = Guid.as(correlationIdManager.current.value); return ChronicleTracer.startActiveSpan('chronicle.event_sequences.redact', async span => { span.setAttribute('chronicle.event_store', this._eventStoreName); @@ -544,20 +541,19 @@ export class EventSequence implements IEventSequence { span.setAttribute('chronicle.event_sequence_id', this.id.value); span.setAttribute('chronicle.sequence_number', sequenceNumber.value.toString()); try { - await this._connection.eventSequences.redact({ + ensureCommandSuccess('redact event', await this._connection.eventSequences.redact({ EventStore: this._eventStoreName, Namespace: this._namespace, EventSequenceId: this.id.value, SequenceNumber: sequenceNumber.value, Reason: reason, - CorrelationId: toContractsGuid(correlationId), Causation: causationChain.map(c => ({ Occurred: { Value: c.occurred.toISOString() }, Type: c.type.name, Properties: { ...c.properties } })), CausedBy: toContractsCausedBy(identity) - }); + })); span.setStatus({ code: SpanStatusCode.OK }); } catch (error) { span.setStatus({ code: SpanStatusCode.ERROR, message: String(error) }); @@ -574,15 +570,7 @@ export class EventSequence implements IEventSequence { causationManager.add(CausationType.redactForEventSource, { eventSourceId }); const causationChain = causationManager.getCurrentChain(); const identity = identityProvider.getCurrent(); - const correlationId = Guid.as(correlationIdManager.current.value); - const wireEventTypes = (eventTypes ?? []).map(constructor => { - const eventType = getEventTypeFor(constructor as unknown as Function); - return { - Id: eventType.id.value, - Generation: eventType.generation.value, - Tombstone: eventType.tombstone - }; - }); + const wireEventTypeIds = (eventTypes ?? []).map(constructor => getEventTypeFor(constructor as unknown as Function).id.value); return ChronicleTracer.startActiveSpan('chronicle.event_sequences.redact_for_event_source', async span => { span.setAttribute('chronicle.event_store', this._eventStoreName); @@ -590,21 +578,20 @@ export class EventSequence implements IEventSequence { span.setAttribute('chronicle.event_sequence_id', this.id.value); span.setAttribute('chronicle.event_source_id', eventSourceId); try { - await this._connection.eventSequences.redactForEventSource({ + ensureCommandSuccess('redact event source', await this._connection.eventSequences.redactForEventSource({ EventStore: this._eventStoreName, Namespace: this._namespace, EventSequenceId: this.id.value, EventSourceId: eventSourceId, Reason: reason, - EventTypes: wireEventTypes, - CorrelationId: toContractsGuid(correlationId), + EventTypes: wireEventTypeIds, Causation: causationChain.map(c => ({ Occurred: { Value: c.occurred.toISOString() }, Type: c.type.name, Properties: { ...c.properties } })), CausedBy: toContractsCausedBy(identity) - }); + })); span.setStatus({ code: SpanStatusCode.OK }); } catch (error) { span.setStatus({ code: SpanStatusCode.ERROR, message: String(error) }); @@ -649,9 +636,10 @@ export class EventSequence implements IEventSequence { EventStreamId: eventStreamId }); - const result: CompleteStreamResult = response.IsSuccess - ? { isSuccess: true, sequenceNumber: new EventSequenceNumber(response.SequenceNumber ?? 0n) } - : { isSuccess: false, error: this.toClientCompleteStreamError(response.Error) }; + const completeStreamResponse = ensureCommandResponse('complete stream', response); + const result: CompleteStreamResult = completeStreamResponse.IsSuccess + ? { isSuccess: true, sequenceNumber: new EventSequenceNumber(completeStreamResponse.SequenceNumber ?? 0n) } + : { isSuccess: false, error: this.toClientCompleteStreamError(completeStreamResponse.Error) }; span.setStatus({ code: SpanStatusCode.OK }); return result; @@ -671,15 +659,8 @@ export class EventSequence implements IEventSequence { return error === 1 ? CompleteStreamError.DefaultStreamCannotBeCompleted : CompleteStreamError.AlreadyCompleted; } - private toContractEventTypes(eventTypes: Constructor[]) { - return eventTypes.map(constructor => { - const eventType = getEventTypeFor(constructor as unknown as Function); - return { - Id: eventType.id.value, - Generation: eventType.generation.value, - Tombstone: eventType.tombstone - }; - }); + private joinEventTypeIds(eventTypes: Constructor[]): string { + return eventTypes.map(constructor => getEventTypeFor(constructor as unknown as Function).id.value).join(','); } private toClientAppendedEvent(wireEvent: ContractsAppendedEvent): AppendedEvent { diff --git a/Source/events/EventTypes.ts b/Source/events/EventTypes.ts index 3fec365..62e1043 100644 --- a/Source/events/EventTypes.ts +++ b/Source/events/EventTypes.ts @@ -4,6 +4,7 @@ import { Constructor } from '@cratis/fundamentals'; import { IClientArtifactsProvider } from '../artifacts'; import { ChronicleConnection } from '../connection'; +import { ensureCommandSuccess } from '../connection/callResults'; import { EventTypeId } from './EventTypeId'; import { IEventTypes } from './IEventTypes'; import { getEventTypeMetadata, getEventTypeJsonSchemaFor } from './eventTypeDecorator'; @@ -163,11 +164,11 @@ export class EventTypes implements IEventTypes { return; } - await this._connection.eventTypes.register({ + ensureCommandSuccess('register event types', await this._connection.eventTypes.registerEventTypes({ EventStore: this._eventStore, Types: registrations, DisableValidation: false - }); + })); } /** @inheritdoc */ diff --git a/Source/jobs/Jobs.ts b/Source/jobs/Jobs.ts index a7fd39b..1b1adb6 100644 --- a/Source/jobs/Jobs.ts +++ b/Source/jobs/Jobs.ts @@ -4,7 +4,7 @@ import type { JobSummaryResponse, JobStepSummaryResponse } from '@cratis/chronicle.contracts'; import { Guid } from '@cratis/fundamentals'; import { ChronicleConnection } from '../connection'; -import { ensureCommandSuccess, ensureQuerySuccess, firstQueryResult } from '../connection/callResults'; +import { ensureCommandSuccess, ensureQuerySuccess } from '../connection/callResults'; import { fromContractsGuid, toContractsGuid } from '../connection/Guid'; import { IJobs } from './IJobs'; import { JobId } from './JobId'; @@ -49,10 +49,10 @@ export class Jobs implements IJobs { /** @inheritdoc */ async getJobs(): Promise { - const response = await firstQueryResult('get jobs', this._connection.jobs.allJobs({ + const response = await this._connection.jobs.allJobs({ EventStore: this._eventStore, Namespace: this._namespace - })); + }); return ensureQuerySuccess('get jobs', response); } diff --git a/Source/observation/toObserverRunningState.ts b/Source/observation/toObserverRunningState.ts index 845eb27..ee53f2a 100644 --- a/Source/observation/toObserverRunningState.ts +++ b/Source/observation/toObserverRunningState.ts @@ -17,7 +17,7 @@ export function toObserverRunningState(state: ContractObserverRunningState): Obs return ObserverRunningState.Suspended; case ContractObserverRunningState.Replaying: return ObserverRunningState.Replaying; - case ContractObserverRunningState.Disconnected: + case ContractObserverRunningState.OBSERVER_RUNNING_STATE_Disconnected: return ObserverRunningState.Disconnected; case ContractObserverRunningState.Quarantined: return ObserverRunningState.Quarantined; diff --git a/Source/package.json b/Source/package.json index 00ef547..d5ad791 100644 --- a/Source/package.json +++ b/Source/package.json @@ -160,7 +160,7 @@ }, "dependencies": { "@bufbuild/protobuf": "^2.14.1", - "@cratis/chronicle.contracts": "17.0.0", + "@cratis/chronicle.contracts": "17.0.4", "@grpc/grpc-js": "^1.14.4", "@opentelemetry/api": "^1.9.1", "nice-grpc": "^2.1.17", diff --git a/Source/readModels/ReadModels.ts b/Source/readModels/ReadModels.ts index c116327..9bfc2a2 100644 --- a/Source/readModels/ReadModels.ts +++ b/Source/readModels/ReadModels.ts @@ -13,6 +13,7 @@ import { Guid, JsonSerializer } from '@cratis/fundamentals'; import { IClientArtifactsProvider } from '../artifacts'; import { toContractsGuid } from '../connection/Guid'; import { ChronicleConnection } from '../connection'; +import { ensureQuerySuccess } from '../connection/callResults'; import { EventSequenceId } from '../eventSequences/EventSequenceId'; import { getProjectionMetadata } from '../projections/declarative/projection'; import { hasFromEventMetadata } from '../projections/modelBound/fromEvent'; @@ -115,16 +116,17 @@ export class ReadModels implements IReadModels { /** @inheritdoc */ async getSnapshotsById(readModelType: Constructor, key: string): Promise[]> { const readModel = this.resolveReadModel(readModelType); - const response = await this._connection.readModels.getSnapshotsByKey({ + const response = ensureQuerySuccess('get read model snapshots', await this._connection.readModelExplorer.allSnapshotsForReadModel({ EventStore: this._eventStore, Namespace: this._namespace, - ReadModelIdentifier: readModel.identifier, + ReadModel: readModel.identifier, EventSequenceId: readModel.eventSequenceId, - ReadModelKey: key - }); + ReadModelKey: key, + Grouping: '' + })); - const snapshots: ReadModelSnapshot[] = response.Snapshots.map(snapshot => ({ - readModel: this.deserializeReadModel(readModelType, snapshot.ReadModel), + const snapshots: ReadModelSnapshot[] = response.map(snapshot => ({ + readModel: this.deserializeReadModel(readModelType, snapshot.Instance), events: (snapshot.Events ?? []) as AppendedEvent[], occurred: snapshot.Occurred?.Value ? new Date(snapshot.Occurred.Value) : undefined, correlationId: snapshot.CorrelationId diff --git a/Source/seeding/EventSeeding.ts b/Source/seeding/EventSeeding.ts index e0a538c..c3d3794 100644 --- a/Source/seeding/EventSeeding.ts +++ b/Source/seeding/EventSeeding.ts @@ -4,6 +4,7 @@ import { diag } from '@opentelemetry/api'; import { IClientArtifactsProvider } from '../artifacts'; import { ChronicleConnection } from '../connection'; +import { ensureCommandSuccess } from '../connection/callResults'; import { EventStoreNamespaceName } from '../EventStoreNamespaceName'; import { getEventTypeFor } from '../events/eventTypeDecorator'; import { getTagsFor } from '../events/tagDecorator'; @@ -94,7 +95,7 @@ export class EventSeeding implements IEventSeeding { })) }; - await this._connection.eventSeeding.seed(request); + ensureCommandSuccess('seed events', await this._connection.eventSeeding.seedEvents(request)); this._entries.length = 0; } diff --git a/Source/webhooks/Webhooks.ts b/Source/webhooks/Webhooks.ts index 3fd42d8..195f4d2 100644 --- a/Source/webhooks/Webhooks.ts +++ b/Source/webhooks/Webhooks.ts @@ -1,10 +1,11 @@ // Copyright (c) Cratis. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. -import { ObserverOwner, type WebhookDefinition } from '@cratis/chronicle.contracts'; +import { type WebhookDefinition } from '@cratis/chronicle.contracts'; import { Constructor } from '@cratis/fundamentals'; import { IClientArtifactsProvider } from '../artifacts'; import { ChronicleConnection } from '../connection'; +import { ensureCommandSuccess, ensureQuerySuccess } from '../connection/callResults'; import { EventSequenceId } from '../eventSequences/EventSequenceId'; import { IEventTypes } from '../events/IEventTypes'; import { IWebhook } from './IWebhook'; @@ -59,11 +60,10 @@ export class Webhooks implements IWebhooks { return; } - await this._connection.webhooks.add({ + ensureCommandSuccess('register discovered webhooks', await this._connection.webhooks.addWebhooks({ EventStore: this._eventStore, - Owner: ObserverOwner.Client, Webhooks: [...this._discovered.values()] - }); + })); } /** @inheritdoc */ @@ -79,26 +79,40 @@ export class Webhooks implements IWebhooks { configure ); - await this._connection.webhooks.add({ + ensureCommandSuccess('register webhook', await this._connection.webhooks.addWebhooks({ EventStore: this._eventStore, - Owner: ObserverOwner.Client, Webhooks: [definition] - }); + })); } /** @inheritdoc */ async getWebhooks(): Promise { const response = await this._connection.webhooks.getWebhooks({ EventStore: this._eventStore }); - return response.items ?? []; + const details = ensureQuerySuccess('get webhooks', response) ?? []; + + // The kernel does not return authorization details on read-back, so the reconstructed target + // always carries no authorization, mirroring the C# client's WebhookTarget mapping. + return details.map(webhook => ({ + EventSequenceId: webhook.EventSequenceId, + Identifier: webhook.Identifier, + EventTypes: webhook.EventTypes, + Target: { + Url: webhook.Url, + Authorization: undefined, + Headers: webhook.Headers + }, + IsReplayable: webhook.IsReplayable, + IsActive: webhook.IsActive + })); } /** @inheritdoc */ async remove(webhookId: WebhookId | string): Promise { const id = typeof webhookId === 'string' ? webhookId : webhookId.value; - await this._connection.webhooks.remove({ + ensureCommandSuccess('remove webhook', await this._connection.webhooks.removeWebhooks({ EventStore: this._eventStore, Webhooks: [id] - }); + })); } private buildDefinition( diff --git a/package.json b/package.json index 1964396..8b7afef 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "publish-version": "node ./publish-version.js" }, "dependencies": { - "@cratis/chronicle.contracts": "17.0.0", + "@cratis/chronicle.contracts": "17.0.4", "glob": "^13.0.6" } } diff --git a/yarn.lock b/yarn.lock index 79d885e..55c300b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,14 +5,7 @@ __metadata: version: 9 cacheKey: 10c0 -"@bufbuild/protobuf@npm:^2.0.0": - version: 2.12.0 - resolution: "@bufbuild/protobuf@npm:2.12.0" - checksum: 10c0/28959e371fd2e7c8d67d52af9e3c8f8e6770e2e116dcc5508f469ca736afa6905e216bc76183835898a5f3deb8aa2e7db47d4a0e706fba76115e9a1996893191 - languageName: node - linkType: hard - -"@bufbuild/protobuf@npm:^2.14.1": +"@bufbuild/protobuf@npm:^2.14.0, @bufbuild/protobuf@npm:^2.14.1": version: 2.14.1 resolution: "@bufbuild/protobuf@npm:2.14.1" checksum: 10c0/3f913aca03df8419c4b21d800ea54d7f6c836a5343e65d6f686279ec3566c4907729938ef2f94a5e27d92e8d3f4adcd6e027118ba29ba764d21e1c637cddc702 @@ -40,14 +33,14 @@ __metadata: languageName: unknown linkType: soft -"@cratis/chronicle.contracts@npm:17.0.0": - version: 17.0.0 - resolution: "@cratis/chronicle.contracts@npm:17.0.0" +"@cratis/chronicle.contracts@npm:17.0.4": + version: 17.0.4 + resolution: "@cratis/chronicle.contracts@npm:17.0.4" dependencies: - "@bufbuild/protobuf": "npm:^2.0.0" - "@grpc/grpc-js": "npm:^1.12.4" - nice-grpc: "npm:^2.1.0" - checksum: 10c0/98af30515d6e77c8052c1143aee3206281987b0b20222ad7f338b2c37841ade217a2086983c72b6cf29b6207bd9a5fcd0ec6ba634ec0ad54d50f1999b08962c7 + "@bufbuild/protobuf": "npm:^2.14.0" + "@grpc/grpc-js": "npm:^1.14.4" + nice-grpc: "npm:^2.1.17" + checksum: 10c0/9c7a20b03eb917ab1c0015eaf7393e317c1d55b2c01d04bd25793fd8138459e1eaf40541763047c54d6146ea74727d42bad85a00a6476af4be622966941c7a60 languageName: node linkType: hard @@ -56,7 +49,7 @@ __metadata: resolution: "@cratis/chronicle@workspace:Source" dependencies: "@bufbuild/protobuf": "npm:^2.14.1" - "@cratis/chronicle.contracts": "npm:17.0.0" + "@cratis/chronicle.contracts": "npm:17.0.4" "@cratis/fundamentals": "npm:7.18.3" "@grpc/grpc-js": "npm:^1.14.4" "@opentelemetry/api": "npm:^1.9.1" @@ -261,7 +254,7 @@ __metadata: languageName: node linkType: hard -"@grpc/grpc-js@npm:^1.12.4, @grpc/grpc-js@npm:^1.14.0, @grpc/grpc-js@npm:^1.14.3, @grpc/grpc-js@npm:^1.14.4": +"@grpc/grpc-js@npm:^1.14.0, @grpc/grpc-js@npm:^1.14.3, @grpc/grpc-js@npm:^1.14.4": version: 1.14.4 resolution: "@grpc/grpc-js@npm:1.14.4" dependencies: @@ -285,6 +278,20 @@ __metadata: languageName: node linkType: hard +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + "@isaacs/fs-minipass@npm:^4.0.0": version: 4.0.1 resolution: "@isaacs/fs-minipass@npm:4.0.1" @@ -301,20 +308,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.14": +"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.5": version: 1.6.0 resolution: "@jridgewell/sourcemap-codec@npm:1.6.0" checksum: 10c0/b5be700e45a775f218589c3466c4ffea630582b4988657652da464e5ab8a7d18bf928ee4fd2363fb346ede4bea9c6ff0bae05a538358c4565ece6199531b5f72 languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.5.5": - version: 1.5.5 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" - checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 - languageName: node - linkType: hard - "@jridgewell/trace-mapping@npm:0.3.31": version: 0.3.31 resolution: "@jridgewell/trace-mapping@npm:0.3.31" @@ -429,7 +429,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/core@npm:2.11.0, @opentelemetry/core@npm:^2.11.0": +"@opentelemetry/core@npm:2.11.0, @opentelemetry/core@npm:^2.0.0, @opentelemetry/core@npm:^2.11.0, @opentelemetry/core@npm:^2.9.0": version: 2.11.0 resolution: "@opentelemetry/core@npm:2.11.0" dependencies: @@ -440,28 +440,6 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/core@npm:2.7.1, @opentelemetry/core@npm:^2.0.0": - version: 2.7.1 - resolution: "@opentelemetry/core@npm:2.7.1" - dependencies: - "@opentelemetry/semantic-conventions": "npm:^1.29.0" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/a8ce7bb08f51cfce094b98febc63101ccbc00dddf845be600b059cd7877c48d88b111f46a4df94c9cfcc42f595200722caf230cdba080cdc8ab304cf664d00e5 - languageName: node - linkType: hard - -"@opentelemetry/core@npm:^2.9.0": - version: 2.10.0 - resolution: "@opentelemetry/core@npm:2.10.0" - dependencies: - "@opentelemetry/semantic-conventions": "npm:^1.29.0" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/fe79c3f77881c5cdd5cff17825f847536fb7882d8c7e26356081ab20c1a16910ae54ffb1deb49ec34293cc2da5bf8501f30acb51e7e159184f2320ebba958c3f - languageName: node - linkType: hard - "@opentelemetry/exporter-logs-otlp-grpc@npm:0.222.0": version: 0.222.0 resolution: "@opentelemetry/exporter-logs-otlp-grpc@npm:0.222.0" @@ -1281,7 +1259,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/resources@npm:2.11.0, @opentelemetry/resources@npm:^2.11.0": +"@opentelemetry/resources@npm:2.11.0, @opentelemetry/resources@npm:^2.0.0, @opentelemetry/resources@npm:^2.11.0": version: 2.11.0 resolution: "@opentelemetry/resources@npm:2.11.0" dependencies: @@ -1293,18 +1271,6 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/resources@npm:^2.0.0": - version: 2.7.1 - resolution: "@opentelemetry/resources@npm:2.7.1" - dependencies: - "@opentelemetry/core": "npm:2.7.1" - "@opentelemetry/semantic-conventions": "npm:^1.29.0" - peerDependencies: - "@opentelemetry/api": ">=1.3.0 <1.10.0" - checksum: 10c0/f752c432ff9aaaec818dc5b5dc69bb22881bf20e6f361c917fce3715d7839274aacf94d2fe06e765cabc5e08193f65bfc438917c19ddf17f21b30252d9ad81ae - languageName: node - linkType: hard - "@opentelemetry/sdk-logs@npm:0.222.0": version: 0.222.0 resolution: "@opentelemetry/sdk-logs@npm:0.222.0" @@ -1408,14 +1374,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:^1.24.0, @opentelemetry/semantic-conventions@npm:^1.27.0, @opentelemetry/semantic-conventions@npm:^1.29.0, @opentelemetry/semantic-conventions@npm:^1.30.0, @opentelemetry/semantic-conventions@npm:^1.33.0, @opentelemetry/semantic-conventions@npm:^1.33.1, @opentelemetry/semantic-conventions@npm:^1.34.0, @opentelemetry/semantic-conventions@npm:^1.36.0, @opentelemetry/semantic-conventions@npm:^1.37.0": - version: 1.40.0 - resolution: "@opentelemetry/semantic-conventions@npm:1.40.0" - checksum: 10c0/3259de0ea11b52eb70e44c12eba21448392baf9cb74c37b62071c4a5ed7fb89b61e194f3898d40ac6bfa7293617a0e132876cb6e355472b66de0cdb13c50b529 - languageName: node - linkType: hard - -"@opentelemetry/semantic-conventions@npm:^1.41.1, @opentelemetry/semantic-conventions@npm:^1.43.0": +"@opentelemetry/semantic-conventions@npm:^1.24.0, @opentelemetry/semantic-conventions@npm:^1.27.0, @opentelemetry/semantic-conventions@npm:^1.29.0, @opentelemetry/semantic-conventions@npm:^1.30.0, @opentelemetry/semantic-conventions@npm:^1.33.0, @opentelemetry/semantic-conventions@npm:^1.33.1, @opentelemetry/semantic-conventions@npm:^1.34.0, @opentelemetry/semantic-conventions@npm:^1.36.0, @opentelemetry/semantic-conventions@npm:^1.37.0, @opentelemetry/semantic-conventions@npm:^1.41.1, @opentelemetry/semantic-conventions@npm:^1.43.0": version: 1.43.0 resolution: "@opentelemetry/semantic-conventions@npm:1.43.0" checksum: 10c0/ea4b4b07c9414b0c5e7ce7349f608cb2572d16922d96077fb0882b59f173ec9b94aada74896bd5dd4aeb1759924503bd5a34b6dc2847a84c36f71626a0578ec4 @@ -1433,6 +1392,13 @@ __metadata: languageName: node linkType: hard +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + 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" @@ -1454,20 +1420,19 @@ __metadata: languageName: node linkType: hard -"@protobufjs/eventemitter@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/eventemitter@npm:1.1.0" - checksum: 10c0/1eb0a75180e5206d1033e4138212a8c7089a3d418c6dfa5a6ce42e593a4ae2e5892c4ef7421f38092badba4040ea6a45f0928869989411001d8c1018ea9a6e70 +"@protobufjs/eventemitter@npm:^1.1.1": + version: 1.1.1 + resolution: "@protobufjs/eventemitter@npm:1.1.1" + checksum: 10c0/8e06193d4629c5e7c09d4f8c2ddba8fc4dfa739f0149f33a1d901568d35bb7b8b5277a4e8452baf3bdd0b302fd599cf255d193267aa93a0a4747e23cd073c4ac languageName: node linkType: hard -"@protobufjs/fetch@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/fetch@npm:1.1.0" +"@protobufjs/fetch@npm:^1.1.1": + version: 1.1.1 + resolution: "@protobufjs/fetch@npm:1.1.1" dependencies: "@protobufjs/aspromise": "npm:^1.1.1" - "@protobufjs/inquire": "npm:^1.1.0" - checksum: 10c0/cda6a3dc2d50a182c5865b160f72077aac197046600091dbb005dd0a66db9cce3c5eaed6d470ac8ed49d7bcbeef6ee5f0bc288db5ff9a70cbd003e5909065233 + checksum: 10c0/a497ff5433854e8577f0427983ea39b9113b49a8120f94515291d763327061d2c3013e60e24ea436d091dafae01a0f6eb1867e3b1616045d96a31d8b3c646ed4 languageName: node linkType: hard @@ -1478,13 +1443,6 @@ __metadata: languageName: node linkType: hard -"@protobufjs/inquire@npm:^1.1.0, @protobufjs/inquire@npm:^1.1.1": - version: 1.1.1 - resolution: "@protobufjs/inquire@npm:1.1.1" - checksum: 10c0/a638d981adabdbdd61fba04e5045e0d2f98fa557eb0e705482a6dc25e84318bc736b0cd4aaee5d6b9941f121b488ece872c203af2a665b6dfefa95c903bb0cc8 - languageName: node - linkType: hard - "@protobufjs/path@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/path@npm:1.1.2" @@ -1500,16 +1458,16 @@ __metadata: linkType: hard "@protobufjs/utf8@npm:^1.1.1": - version: 1.1.1 - resolution: "@protobufjs/utf8@npm:1.1.1" - checksum: 10c0/641fc145f00626405e8984b6e90b9edcbcc072ffc82d0647ca3176e09c730b2d022f988e65f011a7a17e2e4d77cde7733643aa10d8ac2bfa30f134dbcad553fd + version: 1.1.2 + resolution: "@protobufjs/utf8@npm:1.1.2" + checksum: 10c0/975c6e2c0319bd50c17531d186b537a88cb4d3205e3ca9297cd842b631d341da0ee3ff16be8656cd2660756dc753b29c8a6a14c0ad8ed602c1f91ddf22e7b3f3 languageName: node linkType: hard "@types/aws-lambda@npm:^8.10.155": - version: 8.10.161 - resolution: "@types/aws-lambda@npm:8.10.161" - checksum: 10c0/5a779901bb29a1989fe0ef30e4a515522af8fc66c237e0eedc954ab650651920540196b4629df25068c130a05a2a6142f661db7e26c7fbacc17ce11338367eb1 + version: 8.10.163 + resolution: "@types/aws-lambda@npm:8.10.163" + checksum: 10c0/62936c78fd480ee7967ebb0c3cceb1071919659a83f0cc1197ef6cd2d996f6aabcc04778446f4a976e8bb19db7fe355f65a48fba8471b29aade592846e6d6ce8 languageName: node linkType: hard @@ -1555,21 +1513,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=13.7.0": - version: 25.6.2 - resolution: "@types/node@npm:25.6.2" +"@types/node@npm:*, @types/node@npm:>=13.7.0, @types/node@npm:^26.4.1": + version: 26.5.0 + resolution: "@types/node@npm:26.5.0" dependencies: - undici-types: "npm:~7.19.0" - checksum: 10c0/7f540331aa3ab88c285aeaf2eb43e3992f54f0cdb7f3593d156af67b199d4eaf56590fa1c310a00aa58ff69dba668cb3915a157fe83cd6b40a73bb338a12f09a - languageName: node - linkType: hard - -"@types/node@npm:^26.4.1": - version: 26.4.1 - resolution: "@types/node@npm:26.4.1" - dependencies: - undici-types: "npm:~8.3.0" - checksum: 10c0/29568336db8bc67740744782492af0e81ab1f88d86eaa07e38cf0a4c8bae7250a7b4b85c80ac1014fc98b2bc6d4bcac872b2c494ee0671b3880eada7c1fdbc94 + undici-types: "npm:~8.9.0" + checksum: 10c0/1ab105dfe717f6442092ad8732d25d115fcf44596bb64009b3a6eb2dd988aef9ea76ad8a372e88cdf28800161681e1597c779451bade4428801f1a34129e5e37 languageName: node linkType: hard @@ -1583,13 +1532,13 @@ __metadata: linkType: hard "@types/pg@npm:*": - version: 8.20.0 - resolution: "@types/pg@npm:8.20.0" + version: 8.23.1 + resolution: "@types/pg@npm:8.23.1" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" pg-types: "npm:^2.2.0" - checksum: 10c0/c8b5aa794ea074aa20d0c1ef6c721ce0fe16f2c084d0ccc32b7f12909a08ec969e6b01a094ce8e7019cc425381c4b59f261bd0133daf0c6d4aca5c6c492e8312 + checksum: 10c0/0e39ff7dbe233e1e50b172d87fe84cca086a52e255adb104ef1d60619cded356c4414427ffbea58e70a5a985c3036603c8e544ca2937fc1cf4050185109973be languageName: node linkType: hard @@ -1631,10 +1580,10 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:^4.0.0": - version: 4.0.0 - resolution: "abbrev@npm:4.0.0" - checksum: 10c0/b4cc16935235e80702fc90192e349e32f8ef0ed151ef506aa78c81a7c455ec18375c4125414b99f84b2e055199d66383e787675f0bcd87da7a4dbd59f9eac1d5 +"abbrev@npm:^5.0.0": + version: 5.0.0 + resolution: "abbrev@npm:5.0.0" + checksum: 10c0/8e88f5c798ea4562d28c5a3e9ad69e3879890bc5d695d8f2dffb8609be4c890aacc8f80ef4553fdd2c6a62d70c2ce8bc57b38074e383beb7487bdafa9ed42ea5 languageName: node linkType: hard @@ -1645,24 +1594,6 @@ __metadata: languageName: node linkType: hard -"acorn-import-attributes@npm:^1.9.5": - version: 1.9.5 - resolution: "acorn-import-attributes@npm:1.9.5" - peerDependencies: - acorn: ^8 - checksum: 10c0/5926eaaead2326d5a86f322ff1b617b0f698aa61dc719a5baa0e9d955c9885cc71febac3fb5bacff71bbf2c4f9c12db2056883c68c53eb962c048b952e1e013d - languageName: node - linkType: hard - -"acorn@npm:^8.15.0": - version: 8.16.0 - resolution: "acorn@npm:8.16.0" - bin: - acorn: bin/acorn - checksum: 10c0/c9c52697227661b68d0debaf972222d4f622aa06b185824164e153438afa7b08273432ca43ea792cadb24dada1d46f6f6bb1ef8de9956979288cc1b96bf9914e - languageName: node - linkType: hard - "agent-base@npm:^7.1.2": version: 7.1.4 resolution: "agent-base@npm:7.1.4" @@ -1677,6 +1608,13 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^6.2.2": + version: 6.3.0 + resolution: "ansi-regex@npm:6.3.0" + checksum: 10c0/bc047786d0531f1f22d1e22e9863e8554488a399f1ee5270b753efa6de938a788d27456f2b256770f11fdd8b1e847483bc1b55ddc2b3ffe82ec45c875292c651 + languageName: node + linkType: hard + "ansi-styles@npm:^4.0.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" @@ -1686,6 +1624,13 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^6.1.0": + version: 6.2.3 + resolution: "ansi-styles@npm:6.2.3" + checksum: 10c0/23b8a4ce14e18fb854693b95351e286b771d23d8844057ed2e7d083cd3e708376c3323707ec6a24365f7d7eda3ca00327fe04092e29e551499ec4c8b7bfac868 + languageName: node + linkType: hard + "assertion-error@npm:^2.0.1": version: 2.0.1 resolution: "assertion-error@npm:2.0.1" @@ -1693,6 +1638,13 @@ __metadata: languageName: node linkType: hard +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + "balanced-match@npm:^4.0.2": version: 4.0.4 resolution: "balanced-match@npm:4.0.4" @@ -1707,12 +1659,21 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:^5.0.5": - version: 5.0.6 - resolution: "brace-expansion@npm:5.0.6" +"brace-expansion@npm:^2.0.2": + version: 2.1.4 + resolution: "brace-expansion@npm:2.1.4" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/6c0a0e2573eac1dc565b52b1e1bfbeba39bf1830d106ebbc61ff1eaefcf610e9111cd3baa091addd18e33292135c99e019d3184d966389d85dc958fdcdc1449f + languageName: node + linkType: hard + +"brace-expansion@npm:^5.0.8": + version: 5.0.9 + resolution: "brace-expansion@npm:5.0.9" dependencies: balanced-match: "npm:^4.0.2" - checksum: 10c0/8c919869b90f61d533b341d3340be5ee4413232ea89b8246cbc2f38eb014f1d8182785c98a006eaf6111d02dc9eeffefdc240d5ac158625b2ed084dccd4bbf9b + checksum: 10c0/3dea38884a1c3c8b1c9c44a7402a0c76fca460f70cffb3127242b0b4cbf4472019e022ade021eec44838ff19f1dac2625dfd11dd459d7e1e055b0698a8d52fec languageName: node linkType: hard @@ -1734,15 +1695,15 @@ __metadata: version: 0.0.0-use.local resolution: "chronicle-typescript-workspace@workspace:." dependencies: - "@cratis/chronicle.contracts": "npm:17.0.0" + "@cratis/chronicle.contracts": "npm:17.0.4" glob: "npm:^13.0.6" languageName: unknown linkType: soft "cjs-module-lexer@npm:^2.2.0": - version: 2.2.0 - resolution: "cjs-module-lexer@npm:2.2.0" - checksum: 10c0/aec4ca58f87145fac221386790ecaae8b012f2e2359a45acb61d8c75ea4fa84f6ea869f17abc1a7e91a808eff0fed581209632f03540de16f72f0a28f5fd35ac + version: 2.2.1 + resolution: "cjs-module-lexer@npm:2.2.1" + checksum: 10c0/889777eb1e32c4662bf3744fdf09aca444a3f9373d70a8c3d2a575e845e415988912a70a7b5e3c2bf943c7547d930dff641c4e0ff2ee2110ba1daca05b2310cd languageName: node linkType: hard @@ -1773,6 +1734,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + "data-uri-to-buffer@npm:^4.0.0": version: 4.0.1 resolution: "data-uri-to-buffer@npm:4.0.1" @@ -1792,6 +1764,13 @@ __metadata: languageName: node linkType: hard +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -1799,6 +1778,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -1806,7 +1792,7 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^2.3.2": +"es-module-lexer@npm:^2.2.0, es-module-lexer@npm:^2.3.2": version: 2.3.2 resolution: "es-module-lexer@npm:2.3.2" checksum: 10c0/5e7389424c43478439f12f9a6aca1750f6f99afa384fc3de329f4a45f152ab156671055008adaafc74960877abf8cc338aeebf6bed8c21297b146fd6eb7a22f8 @@ -1961,6 +1947,16 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^3.1.0": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: "npm:^7.0.6" + signal-exit: "npm:^4.0.1" + checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 + languageName: node + linkType: hard + "formdata-polyfill@npm:^4.0.10": version: 4.0.10 resolution: "formdata-polyfill@npm:4.0.10" @@ -1996,25 +1992,26 @@ __metadata: languageName: node linkType: hard -"gaxios@npm:^7.0.0": - version: 7.1.4 - resolution: "gaxios@npm:7.1.4" +"gaxios@npm:7.1.3": + version: 7.1.3 + resolution: "gaxios@npm:7.1.3" dependencies: extend: "npm:^3.0.2" https-proxy-agent: "npm:^7.0.1" node-fetch: "npm:^3.3.2" - checksum: 10c0/147adf5f2606442945d8b19df1e9fe2833a5ec30af00743d0c44292899c5eef1c0a77b74ff07d9dfdc6b009c08af1f3f3d1d5d772109fde50c92435533795803 + rimraf: "npm:^5.0.1" + checksum: 10c0/a4a1cdf9a392c0c22e9734a40dca5a77a2903f505b939a50f1e68e312458b1289b7993d2f72d011426e89657cae77a3aa9fc62fb140e8ba90a1faa31fdbde4d2 languageName: node linkType: hard "gcp-metadata@npm:^8.0.0": - version: 8.1.2 - resolution: "gcp-metadata@npm:8.1.2" + version: 8.1.4 + resolution: "gcp-metadata@npm:8.1.4" dependencies: - gaxios: "npm:^7.0.0" - google-logging-utils: "npm:^1.0.0" + gaxios: "npm:7.1.3" + google-logging-utils: "npm:1.1.3" json-bigint: "npm:^1.0.0" - checksum: 10c0/15a61231a9410dc11c2828d2c9fdc8b0a939f1af746195c44edc6f2ffea0acab52cef3a7b9828069a36fd5d68bda730f7328a415fe42a01258f6e249dfba6908 + checksum: 10c0/dffba44f5192d73c515f04fd9ce7da89e5d05403d75c93d308bb3909044721038eac581cd08652679eaf570b232c65fae8591ba06ec8370945e1ca94609ab8aa languageName: node linkType: hard @@ -2025,6 +2022,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.3.7": + version: 10.5.0 + resolution: "glob@npm:10.5.0" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/100705eddbde6323e7b35e1d1ac28bcb58322095bd8e63a7d0bef1a2cdafe0d0f7922a981b2b48369a4f8c1b077be5c171804534c3509dfe950dde15fbe6d828 + languageName: node + linkType: hard + "glob@npm:^13.0.6": version: 13.0.6 resolution: "glob@npm:13.0.6" @@ -2036,7 +2049,7 @@ __metadata: languageName: node linkType: hard -"google-logging-utils@npm:^1.0.0": +"google-logging-utils@npm:1.1.3": version: 1.1.3 resolution: "google-logging-utils@npm:1.1.3" checksum: 10c0/e65201c7e96543bd1423b9324013736646b9eed60941e0bfa47b9bfd146d2f09cf3df1c99ca60b7d80a726075263ead049ee72de53372cb8458c3bc55c2c1e59 @@ -2061,14 +2074,13 @@ __metadata: linkType: hard "import-in-the-middle@npm:^3.0.0": - version: 3.0.1 - resolution: "import-in-the-middle@npm:3.0.1" + version: 3.4.0 + resolution: "import-in-the-middle@npm:3.4.0" dependencies: - acorn: "npm:^8.15.0" - acorn-import-attributes: "npm:^1.9.5" cjs-module-lexer: "npm:^2.2.0" + es-module-lexer: "npm:^2.2.0" module-details-from-path: "npm:^1.0.4" - checksum: 10c0/afd314edb76764ff53d624e2868f5489a9fb81d22745da3db88121a962f422390b59be86fc5cb1158ed672025ece3b3f8a4943e5dde116bae3dac9f0ff5aff86 + checksum: 10c0/bc5c1683f8edc70646dc117c8e531419d98c6ca2b445aa402aca47ebc2991cc7398c6fc9cc474bde0dec6f1271742af742954230898dd76d311ba30a8f5acfee languageName: node linkType: hard @@ -2079,6 +2091,13 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + "isexe@npm:^4.0.0": version: 4.0.0 resolution: "isexe@npm:4.0.0" @@ -2086,6 +2105,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + "json-bigint@npm:^1.0.0": version: 1.0.0 resolution: "json-bigint@npm:1.0.0" @@ -2102,17 +2134,24 @@ __metadata: languageName: node linkType: hard -"long@npm:^5.0.0": +"long@npm:^5.0.0, long@npm:^5.3.2": version: 5.3.2 resolution: "long@npm:5.3.2" checksum: 10c0/7130fe1cbce2dca06734b35b70d380ca3f70271c7f8852c922a7c62c86c4e35f0c39290565eca7133c625908d40e126ac57c02b1b1a4636b9457d77e1e60b981 languageName: node linkType: hard +"lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + "lru-cache@npm:^11.0.0": - version: 11.3.6 - resolution: "lru-cache@npm:11.3.6" - checksum: 10c0/3afe3e3000e424c18b640dcea5776b5c1de8684b7dac9718d58792dff1a4692b38cc14e263cbb41bdab98ffcf5408f003b33133b179ce5d271284be72a3ff2a9 + version: 11.5.2 + resolution: "lru-cache@npm:11.5.2" + checksum: 10c0/ece1ad731f5b655e85d67047d04bfc13823dc77aa61c5454924a9869ba600a0104e39cc33d726021feef812bc347ca34a5608a5eb1972a5dd0870b7ecd42c3f2 languageName: node linkType: hard @@ -2126,15 +2165,24 @@ __metadata: linkType: hard "minimatch@npm:^10.2.2": - version: 10.2.5 - resolution: "minimatch@npm:10.2.5" + version: 10.2.6 + resolution: "minimatch@npm:10.2.6" + dependencies: + brace-expansion: "npm:^5.0.8" + checksum: 10c0/4559a836243b98bd4d17ea9f7edae698717c76399eea7be374f3737f33164e4907f19e9726891ddeb122f750a5a7fa80d2ac43e851d6e5984dc4ff42ec127d3a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.9 + resolution: "minimatch@npm:9.0.9" dependencies: - brace-expansion: "npm:^5.0.5" - checksum: 10c0/6bb058bd6324104b9ec2f763476a35386d05079c1f5fe4fbf1f324a25237cd4534d6813ecd71f48208f4e635c1221899bef94c3c89f7df55698fe373aaae20fd + brace-expansion: "npm:^2.0.2" + checksum: 10c0/0b6a58530dbb00361745aa6c8cffaba4c90f551afe7c734830bd95fd88ebf469dd7355a027824ea1d09e37181cfeb0a797fb17df60c15ac174303ac110eb7e86 languageName: node linkType: hard -"minipass@npm:^7.0.4, minipass@npm:^7.1.2, minipass@npm:^7.1.3": +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.4, minipass@npm:^7.1.2, minipass@npm:^7.1.3": version: 7.1.3 resolution: "minipass@npm:7.1.3" checksum: 10c0/539da88daca16533211ea5a9ee98dc62ff5742f531f54640dd34429e621955e91cc280a91a776026264b7f9f6735947629f920944e9c1558369e8bf22eb33fbb @@ -2164,15 +2212,6 @@ __metadata: languageName: node linkType: hard -"nice-grpc-common@npm:^2.0.3": - version: 2.0.3 - resolution: "nice-grpc-common@npm:2.0.3" - dependencies: - ts-error: "npm:^1.0.6" - checksum: 10c0/814377b5978a84466a57fd7e996d93f80924555d701900db3e7e5c79b4e775e6a9b71e5f0f11fb719d7d94472b62dbdffdabee405bad1ea185639962794d5b1d - languageName: node - linkType: hard - "nice-grpc-common@npm:^2.0.4": version: 2.0.4 resolution: "nice-grpc-common@npm:2.0.4" @@ -2182,17 +2221,6 @@ __metadata: languageName: node linkType: hard -"nice-grpc@npm:^2.1.0": - version: 2.1.16 - resolution: "nice-grpc@npm:2.1.16" - dependencies: - "@grpc/grpc-js": "npm:^1.14.0" - abort-controller-x: "npm:^0.5.0" - nice-grpc-common: "npm:^2.0.3" - checksum: 10c0/db79f7744918a94f504b2028279df28440d8880cead2919276e4ba854f4666e888bf1df798f75c11d35e417bf9e5a8ba0110792d9708e7b94f2419cdbf187362 - languageName: node - linkType: hard - "nice-grpc@npm:^2.1.17": version: 2.1.17 resolution: "nice-grpc@npm:2.1.17" @@ -2223,33 +2251,33 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 12.3.0 - resolution: "node-gyp@npm:12.3.0" + version: 13.0.2 + resolution: "node-gyp@npm:13.0.2" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" graceful-fs: "npm:^4.2.6" - nopt: "npm:^9.0.0" - proc-log: "npm:^6.0.0" + nopt: "npm:^10.0.0" + proc-log: "npm:^7.0.0" semver: "npm:^7.3.5" tar: "npm:^7.5.4" tinyglobby: "npm:^0.2.12" - undici: "npm:^6.25.0" - which: "npm:^6.0.0" + undici: "npm:^8.4.1" + which: "npm:^7.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 10c0/9d9032b405cbe42f72a105259d9eb679376470c102df4a2dbaa51e07d59bf741dcffb85897087ea9d8318b9cabb824a8978af51508ae142f0239ae1e6a3c2329 + checksum: 10c0/29d33ccf47ffeeb5e7af925550b416f698a26a72eb10975c7eb5775c1d0cecacd76d164a4aa45503d3ddcece209db65c712be00423c69381a4cd14e2e6540559 languageName: node linkType: hard -"nopt@npm:^9.0.0": - version: 9.0.0 - resolution: "nopt@npm:9.0.0" +"nopt@npm:^10.0.0": + version: 10.0.1 + resolution: "nopt@npm:10.0.1" dependencies: - abbrev: "npm:^4.0.0" + abbrev: "npm:^5.0.0" bin: nopt: bin/nopt.js - checksum: 10c0/1822eb6f9b020ef6f7a7516d7b64a8036e09666ea55ac40416c36e4b2b343122c3cff0e2f085675f53de1d2db99a2a89a60ccea1d120bcd6a5347bf6ceb4a7fd + checksum: 10c0/980d89257f9587f3e1f77877ddbf905d6aa3b738ec33e49a4fa1a059a0dd82eb28063982b150654a7ae9de386f2ead60e56172db7d37cf56de545f7392a2a26a languageName: node linkType: hard @@ -2260,6 +2288,30 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + "path-scurry@npm:^2.0.2": version: 2.0.2 resolution: "path-scurry@npm:2.0.2" @@ -2278,9 +2330,9 @@ __metadata: linkType: hard "pg-protocol@npm:*": - version: 1.13.0 - resolution: "pg-protocol@npm:1.13.0" - checksum: 10c0/a4e851e6bb8ff404ca19d561cf49b6b0caf45163bd3f289889edaf6c4e9fb25b08fb57f50d37a8cc86007efcf2cbb3dd2372c97a353a546f45eb49ddebc84fa9 + version: 1.16.0 + resolution: "pg-protocol@npm:1.16.0" + checksum: 10c0/8ea4a8f4970aa0ca1e5bf9a482da0a41a043d7470fbaf7592736971146b09a2a4003d953c0091b72fc30bf7a7994a0b7fdf897bf50cd219787bd22806b3ffb04 languageName: node linkType: hard @@ -2297,14 +2349,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.4": - version: 4.0.4 - resolution: "picomatch@npm:4.0.4" - checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 - languageName: node - linkType: hard - -"picomatch@npm:^4.0.7": +"picomatch@npm:^4.0.4, picomatch@npm:^4.0.7": version: 4.0.7 resolution: "picomatch@npm:4.0.7" checksum: 10c0/beb6ae02c43ae44e84883b90830196d9046b1726ead292adcf7f57945e0bb0d992d68563d87e03b484b6f3c9a5c6defda7523477f047d7f0e663f126cc01787f @@ -2341,30 +2386,29 @@ __metadata: languageName: node linkType: hard -"proc-log@npm:^6.0.0": - version: 6.1.0 - resolution: "proc-log@npm:6.1.0" - checksum: 10c0/4f178d4062733ead9d71a9b1ab24ebcecdfe2250916a5b1555f04fe2eda972a0ec76fbaa8df1ad9c02707add6749219d118a4fc46dc56bdfe4dde4b47d80bb82 +"proc-log@npm:^7.0.0": + version: 7.0.0 + resolution: "proc-log@npm:7.0.0" + checksum: 10c0/b89c2d862604f35fec795477b0c7e376feab3ba0d4f4d291c4e959567442697cf451ac557d0623c1cc38af45a78128b983410f397a10c5d3a67f76c33de4754b languageName: node linkType: hard "protobufjs@npm:^7.5.5": - version: 7.5.7 - resolution: "protobufjs@npm:7.5.7" + version: 7.6.6 + resolution: "protobufjs@npm:7.6.6" dependencies: "@protobufjs/aspromise": "npm:^1.1.2" "@protobufjs/base64": "npm:^1.1.2" "@protobufjs/codegen": "npm:^2.0.5" - "@protobufjs/eventemitter": "npm:^1.1.0" - "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/eventemitter": "npm:^1.1.1" + "@protobufjs/fetch": "npm:^1.1.1" "@protobufjs/float": "npm:^1.0.2" - "@protobufjs/inquire": "npm:^1.1.1" "@protobufjs/path": "npm:^1.1.2" "@protobufjs/pool": "npm:^1.1.0" "@protobufjs/utf8": "npm:^1.1.1" "@types/node": "npm:>=13.7.0" - long: "npm:^5.0.0" - checksum: 10c0/432b30edf06c689ca591372812b57a7cda3d5325311b69369e3bb15afef80ccc5dd021cc7e92d72e55e8e0f5665abf87c32e26601319ab9576707f846777842e + long: "npm:^5.3.2" + checksum: 10c0/6c0dc6d4a2801825e39417bc116297d5261c0cf28892a5e28adafc13432331c0cb75603bbe50ad6f2715f3b0a9ce2896591ad6b51fdc8eae2d05b9ac2e4a8ec1 languageName: node linkType: hard @@ -2392,12 +2436,39 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^5.0.1": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" + dependencies: + glob: "npm:^10.3.7" + bin: + rimraf: dist/esm/bin.mjs + checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc + languageName: node + linkType: hard + "semver@npm:^7.3.5": - version: 7.8.0 - resolution: "semver@npm:7.8.0" + version: 7.8.5 + resolution: "semver@npm:7.8.5" bin: semver: bin/semver.js - checksum: 10c0/8f096ca9b80ffd47b308d03f9ce8c873e27e2983f36023c559cdc92c51e8433fc23ebbfe57ec9623fc155636a6961ee989501099841ae4bb1babc8d2b3f048cd + checksum: 10c0/b1f3127a5be8125a94f37188b361c212466c292c6910adce3ec106cff5dc211ccaedc4739c11bb70fda59d6fc1f040a9bca289f4e093451521a2372e5231fe0c + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 languageName: node linkType: hard @@ -2408,6 +2479,13 @@ __metadata: languageName: node linkType: hard +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + "stackback@npm:0.0.2": version: 0.0.2 resolution: "stackback@npm:0.0.2" @@ -2422,7 +2500,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -2433,7 +2511,18 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -2442,26 +2531,35 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^7.0.1": + version: 7.2.0 + resolution: "strip-ansi@npm:7.2.0" + dependencies: + ansi-regex: "npm:^6.2.2" + checksum: 10c0/544d13b7582f8254811ea97db202f519e189e59d35740c46095897e254e4f1aa9fe1524a83ad6bc5ad67d4dd6c0281d2e0219ed62b880a6238a16a17d375f221 + languageName: node + linkType: hard + "systeminformation@npm:^5.31.6": - version: 5.33.6 - resolution: "systeminformation@npm:5.33.6" + version: 5.33.8 + resolution: "systeminformation@npm:5.33.8" bin: systeminformation: lib/cli.js - checksum: 10c0/fa41a5d48da3dc34364038b1b26402e017132a7f5b663fdc6032d1bcb5e471039db48c74e2b7a14a79003b96dec961b3448c2f006dad13b4714fdce4cc852e8d + checksum: 10c0/cc1dd9f5998936b72f0c8fb61fdfe21294e1aa3818c79d3373e27ff65080414b3e93ced80b8ee59fcec8b603854bcd1cbabfdfbd52b75817b11e5056ba5d5ac8 conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android) languageName: node linkType: hard "tar@npm:^7.5.4": - version: 7.5.15 - resolution: "tar@npm:7.5.15" + version: 7.5.22 + resolution: "tar@npm:7.5.22" dependencies: "@isaacs/fs-minipass": "npm:^4.0.0" chownr: "npm:^3.0.0" minipass: "npm:^7.1.2" minizlib: "npm:^3.1.0" yallist: "npm:^5.0.0" - checksum: 10c0/8f039edb1d12fdd7df6c6f9877d125afe9f3da3f5f9317df326fdd090d48793d6998cede1506a1471f3e3a250db270a89dace28005eb5e99c5a9132d704ac956 + checksum: 10c0/1311f6be85a8157ac4c9147bae43e13923d2a1aae15e4aa1bd5239e4e03d2cf53cfe103dde7f35832fbb4c938b042856bc8e9a0afd29abd05e2d1608788c4fea languageName: node linkType: hard @@ -2479,17 +2577,7 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.12": - version: 0.2.16 - resolution: "tinyglobby@npm:0.2.16" - dependencies: - fdir: "npm:^6.5.0" - picomatch: "npm:^4.0.4" - checksum: 10c0/f2e09fd93dd95c41e522113b686ff6f7c13020962f8698a864a257f3d7737599afc47722b7ab726e12f8a813f779906187911ff8ee6701ede65072671a7e934b - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.17": +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.17": version: 0.2.17 resolution: "tinyglobby@npm:0.2.17" dependencies: @@ -2541,28 +2629,14 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~7.19.0": - version: 7.19.2 - resolution: "undici-types@npm:7.19.2" - checksum: 10c0/7159f10546f9f6c47d36776bb1bbf8671e87c1e587a6fee84ae1f111ae8de4f914efa8ca0dfcd224f4f4a9dfc3f6028f627ccb5ddaccf82d7fd54671b89fac3e - languageName: node - linkType: hard - -"undici-types@npm:~8.3.0": - version: 8.3.0 - resolution: "undici-types@npm:8.3.0" - checksum: 10c0/c8aa7e2fbebfce519654dafadc0ece59be888d2ccaf180fb4495da875e7b536d2456345c384069c7e6f3e9c9ab7435f074957da306f142343eee86ff8048855a - languageName: node - linkType: hard - -"undici@npm:^6.25.0": - version: 6.25.0 - resolution: "undici@npm:6.25.0" - checksum: 10c0/2597cc6689bdb02c210c557b1f85febbfda65becae6e6fc1061508e2f33734d25207f81cd8af56ada9956329eb3a7bd7431e87dcfeceba20ee87059b57dcf985 +"undici-types@npm:~8.9.0": + version: 8.9.0 + resolution: "undici-types@npm:8.9.0" + checksum: 10c0/51c712c20c087368f62c6fc0f2bc49fa76bfe5dec28ff01584bb677ff29b0622569783c02d43e151143808c48c0503f804093bd2c491b10f2a830138034cb451 languageName: node linkType: hard -"undici@npm:^8.10.2": +"undici@npm:^8.10.2, undici@npm:^8.4.1": version: 8.10.2 resolution: "undici@npm:8.10.2" checksum: 10c0/66d7fc69149207cab570d6abbc9e965b6afe1ae889a7d46945b431165c973d6a56f3dd8b70a856e7ae1e550b6366a1cde6f06e68640587f0dadca38de72995ee @@ -2637,14 +2711,25 @@ __metadata: languageName: node linkType: hard -"which@npm:^6.0.0": - version: 6.0.1 - resolution: "which@npm:6.0.1" +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^7.0.0": + version: 7.0.0 + resolution: "which@npm:7.0.0" dependencies: isexe: "npm:^4.0.0" bin: node-which: bin/which.js - checksum: 10c0/7e710e54ea36d2d6183bee2f9caa27a3b47b9baf8dee55a199b736fcf85eab3b9df7556fca3d02b50af7f3dfba5ea3a45644189836df06267df457e354da66d5 + checksum: 10c0/ca0b54f198f78bbc4b7c02e34bda8d335cb352e0adb4cbca1c37b1a957af3a879a82c4c27ca6525bc942f548d8b64f816ef6528360af9f3de55ffb9b979b620d languageName: node linkType: hard @@ -2660,7 +2745,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -2671,6 +2756,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + "xtend@npm:^4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -2709,8 +2805,8 @@ __metadata: linkType: hard "yargs@npm:^17.7.2": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" + version: 17.7.3 + resolution: "yargs@npm:17.7.3" dependencies: cliui: "npm:^8.0.1" escalade: "npm:^3.1.1" @@ -2719,6 +2815,6 @@ __metadata: string-width: "npm:^4.2.3" y18n: "npm:^5.0.5" yargs-parser: "npm:^21.1.1" - checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + checksum: 10c0/7a28572f7e785a57886e34fdbddb9b28756dec552e1453d5f6e7cdd00ad8721a4e8c4321d33683f5e61cacb36ad43258adbb48396b71ec4ed14abee0fc0d0c1f languageName: node linkType: hard