@emseepea/server 0.23.1 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app-shutdown.d.ts +11 -0
- package/dist/app-shutdown.d.ts.map +1 -0
- package/dist/app-shutdown.js +46 -0
- package/dist/app-shutdown.js.map +1 -0
- package/dist/events-cloud-tasks-transport.d.ts +34 -0
- package/dist/events-cloud-tasks-transport.d.ts.map +1 -0
- package/dist/events-cloud-tasks-transport.js +232 -0
- package/dist/events-cloud-tasks-transport.js.map +1 -0
- package/dist/events-external.d.ts +62 -0
- package/dist/events-external.d.ts.map +1 -0
- package/dist/events-external.js +289 -0
- package/dist/events-external.js.map +1 -0
- package/dist/events-google-sdk-lifetime.d.ts +7 -0
- package/dist/events-google-sdk-lifetime.d.ts.map +1 -0
- package/dist/events-google-sdk-lifetime.js +70 -0
- package/dist/events-google-sdk-lifetime.js.map +1 -0
- package/dist/events-postgres-delivery-migrations.d.ts +18 -0
- package/dist/events-postgres-delivery-migrations.d.ts.map +1 -0
- package/dist/events-postgres-delivery-migrations.js +146 -0
- package/dist/events-postgres-delivery-migrations.js.map +1 -0
- package/dist/events-postgres-delivery-owned.d.ts +16 -0
- package/dist/events-postgres-delivery-owned.d.ts.map +1 -0
- package/dist/events-postgres-delivery-owned.js +178 -0
- package/dist/events-postgres-delivery-owned.js.map +1 -0
- package/dist/events-postgres-delivery.d.ts +29 -0
- package/dist/events-postgres-delivery.d.ts.map +1 -0
- package/dist/events-postgres-delivery.js +299 -0
- package/dist/events-postgres-delivery.js.map +1 -0
- package/dist/events-postgres-dispatch-migrations.d.ts +19 -0
- package/dist/events-postgres-dispatch-migrations.d.ts.map +1 -0
- package/dist/events-postgres-dispatch-migrations.js +162 -0
- package/dist/events-postgres-dispatch-migrations.js.map +1 -0
- package/dist/events-postgres-dispatch.d.ts +39 -0
- package/dist/events-postgres-dispatch.d.ts.map +1 -0
- package/dist/events-postgres-dispatch.js +270 -0
- package/dist/events-postgres-dispatch.js.map +1 -0
- package/dist/events-postgres-lifecycle-migrations.d.ts +17 -0
- package/dist/events-postgres-lifecycle-migrations.d.ts.map +1 -0
- package/dist/events-postgres-lifecycle-migrations.js +125 -0
- package/dist/events-postgres-lifecycle-migrations.js.map +1 -0
- package/dist/events-postgres-lifecycle.d.ts +13 -0
- package/dist/events-postgres-lifecycle.d.ts.map +1 -0
- package/dist/events-postgres-lifecycle.js +176 -0
- package/dist/events-postgres-lifecycle.js.map +1 -0
- package/dist/events-postgres-migrations.d.ts +32 -0
- package/dist/events-postgres-migrations.d.ts.map +1 -0
- package/dist/events-postgres-migrations.js +329 -0
- package/dist/events-postgres-migrations.js.map +1 -0
- package/dist/events-postgres-owned.d.ts +16 -0
- package/dist/events-postgres-owned.d.ts.map +1 -0
- package/dist/events-postgres-owned.js +161 -0
- package/dist/events-postgres-owned.js.map +1 -0
- package/dist/events-postgres.d.ts +53 -0
- package/dist/events-postgres.d.ts.map +1 -0
- package/dist/events-postgres.js +289 -0
- package/dist/events-postgres.js.map +1 -0
- package/dist/events.d.ts +30 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +146 -134
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +219 -90
- package/dist/index.js.map +1 -1
- package/package.json +31 -6
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ExternalMcpEventInvocation } from './events-external.js';
|
|
2
|
+
type Owner = (invocation: ExternalMcpEventInvocation) => Promise<boolean>;
|
|
3
|
+
/** Private owner registry, always keyed by the root application, never by a child plugin. */
|
|
4
|
+
export declare function registerAppShutdownOwner(root: object, owner: Owner): () => void;
|
|
5
|
+
/** Establish before stopping request admission. Repeated calls cannot extend the deadline. */
|
|
6
|
+
export declare function prepareAppShutdown(root: object, timeoutMs?: number): void;
|
|
7
|
+
export declare function remainingAppShutdown(root: object): number;
|
|
8
|
+
/** Start every owner once, concurrently; observe raw results even after the bounded join expires. */
|
|
9
|
+
export declare function startAppShutdown(root: object): Promise<boolean>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=app-shutdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-shutdown.d.ts","sourceRoot":"","sources":["../src/app-shutdown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,0BAA0B,EAAC,MAAM,sBAAsB,CAAC;AACrE,KAAK,KAAK,GAAC,CAAC,UAAU,EAAC,0BAA0B,KAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAKrE,6FAA6F;AAC7F,wBAAgB,wBAAwB,CAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,KAAK,GAAE,MAAI,IAAI,CAGzE;AACD,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,IAAI,EAAC,MAAM,EAAC,SAAS,SAAM,GAAE,IAAI,CAInE;AACD,wBAAgB,oBAAoB,CAAC,IAAI,EAAC,MAAM,GAAE,MAAM,CAAyF;AACjJ,qGAAqG;AACrG,wBAAgB,gBAAgB,CAAC,IAAI,EAAC,MAAM,GAAE,OAAO,CAAC,OAAO,CAAC,CAU7D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { performance } from 'node:perf_hooks';
|
|
2
|
+
const scopes = new WeakMap();
|
|
3
|
+
function scope(root) { let value = scopes.get(root); if (!value) {
|
|
4
|
+
value = { owners: new Set() };
|
|
5
|
+
scopes.set(root, value);
|
|
6
|
+
} return value; }
|
|
7
|
+
/** Private owner registry, always keyed by the root application, never by a child plugin. */
|
|
8
|
+
export function registerAppShutdownOwner(root, owner) {
|
|
9
|
+
const value = scope(root);
|
|
10
|
+
if (value.budget)
|
|
11
|
+
throw new Error('APP_SHUTDOWN_ALREADY_STARTED');
|
|
12
|
+
value.owners.add(owner);
|
|
13
|
+
return () => { if (!value.budget)
|
|
14
|
+
value.owners.delete(owner); };
|
|
15
|
+
}
|
|
16
|
+
/** Establish before stopping request admission. Repeated calls cannot extend the deadline. */
|
|
17
|
+
export function prepareAppShutdown(root, timeoutMs = 10000) {
|
|
18
|
+
const value = scope(root);
|
|
19
|
+
if (value.budget)
|
|
20
|
+
return;
|
|
21
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs < 0)
|
|
22
|
+
throw new Error('INVALID_SHUTDOWN_BUDGET');
|
|
23
|
+
value.budget = { end: performance.now() + timeoutMs, controller: new AbortController() };
|
|
24
|
+
}
|
|
25
|
+
export function remainingAppShutdown(root) { prepareAppShutdown(root); return Math.max(0, scope(root).budget.end - performance.now()); }
|
|
26
|
+
/** Start every owner once, concurrently; observe raw results even after the bounded join expires. */
|
|
27
|
+
export function startAppShutdown(root) {
|
|
28
|
+
const value = scope(root);
|
|
29
|
+
prepareAppShutdown(root);
|
|
30
|
+
if (value.result)
|
|
31
|
+
return value.result;
|
|
32
|
+
const budget = value.budget, remaining = Math.max(0, budget.end - performance.now());
|
|
33
|
+
if (remaining === 0)
|
|
34
|
+
budget.controller.abort();
|
|
35
|
+
const invocation = Object.freeze({ signal: budget.controller.signal, deadlineMs: Date.now() + remaining });
|
|
36
|
+
const actual = Promise.all([...value.owners].map(owner => Promise.resolve().then(() => owner(invocation)).then(answer => answer === true, () => false)));
|
|
37
|
+
let timer;
|
|
38
|
+
const expired = new Promise(resolve => { timer = setTimeout(() => { budget.controller.abort(); resolve(false); }, remaining); });
|
|
39
|
+
value.result = Promise.race([actual.then(answers => { if (performance.now() >= budget.end || !answers.every(Boolean)) {
|
|
40
|
+
budget.controller.abort();
|
|
41
|
+
return false;
|
|
42
|
+
} return true; }), expired]).finally(() => { if (timer)
|
|
43
|
+
clearTimeout(timer); });
|
|
44
|
+
return value.result;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=app-shutdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-shutdown.js","sourceRoot":"","sources":["../src/app-shutdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ExternalMcpEventInvocation } from './events-external.js';
|
|
2
|
+
import type { EventDispatchTransport } from './events-postgres-dispatch.js';
|
|
3
|
+
type Invocation = ExternalMcpEventInvocation;
|
|
4
|
+
export declare class GoogleEventTransportSetupError extends Error {
|
|
5
|
+
readonly code: 'INVALID_CONFIGURATION' | 'UNSUPPORTED_DEPENDENCY_GRAPH' | 'UNSAFE_SDK_LOGGING';
|
|
6
|
+
constructor(code: 'INVALID_CONFIGURATION' | 'UNSUPPORTED_DEPENDENCY_GRAPH' | 'UNSAFE_SDK_LOGGING');
|
|
7
|
+
}
|
|
8
|
+
export interface CloudTasksEventConfiguration {
|
|
9
|
+
readonly namespace: string;
|
|
10
|
+
readonly projectId: string;
|
|
11
|
+
readonly location: string;
|
|
12
|
+
readonly queueId: string;
|
|
13
|
+
readonly workerURL: string;
|
|
14
|
+
readonly audience: string;
|
|
15
|
+
readonly serviceAccountEmail: string;
|
|
16
|
+
readonly serviceAccountUid: string;
|
|
17
|
+
}
|
|
18
|
+
interface Credentials {
|
|
19
|
+
getRequestHeaders(url: string): Promise<Headers>;
|
|
20
|
+
}
|
|
21
|
+
interface Runtime {
|
|
22
|
+
graphSafe(): boolean;
|
|
23
|
+
loggingSafe(): boolean;
|
|
24
|
+
createAuth(projectId: string): {
|
|
25
|
+
getClient(): Promise<Credentials>;
|
|
26
|
+
};
|
|
27
|
+
fetch: typeof globalThis.fetch;
|
|
28
|
+
}
|
|
29
|
+
/** Private preparation seam; no public route or credential/provider override is exported by the package. */
|
|
30
|
+
export declare function createCloudTasksRestTransportRuntime(options: CloudTasksEventConfiguration, runtime?: Runtime): EventDispatchTransport & {
|
|
31
|
+
settle(invocation: Invocation): Promise<boolean>;
|
|
32
|
+
};
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=events-cloud-tasks-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-cloud-tasks-transport.d.ts","sourceRoot":"","sources":["../src/events-cloud-tasks-transport.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAI5E,KAAK,UAAU,GAAC,0BAA0B,CAAC;AAG3C,qBAAa,8BAA+B,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAC,uBAAuB,GAAC,8BAA8B,GAAC,oBAAoB;gBAAhF,IAAI,EAAC,uBAAuB,GAAC,8BAA8B,GAAC,oBAAoB;CACrG;AACD,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,SAAS,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,SAAS,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,OAAO,EAAC,MAAM,CAAC;IACrG,QAAQ,CAAC,SAAS,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,mBAAmB,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,iBAAiB,EAAC,MAAM,CAAC;CACzH;AACD,UAAU,WAAW;IAAE,iBAAiB,CAAC,GAAG,EAAC,MAAM,GAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAC;AACtE,UAAU,OAAO;IAChB,SAAS,IAAG,OAAO,CAAC;IAAA,WAAW,IAAG,OAAO,CAAC;IAC1C,UAAU,CAAC,SAAS,EAAC,MAAM,GAAE;QAAC,SAAS,IAAG,OAAO,CAAC,WAAW,CAAC,CAAA;KAAC,CAAC;IAChE,KAAK,EAAC,OAAO,UAAU,CAAC,KAAK,CAAC;CAC9B;AAkCD,4GAA4G;AAC5G,wBAAgB,oCAAoC,CAAC,OAAO,EAAC,4BAA4B,EAAC,OAAO,GAAC,OAAkB,GAAE,sBAAsB,GAAC;IAAC,MAAM,CAAC,UAAU,EAAC,UAAU,GAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAC,CAmE5L"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { realpathSync } from 'node:fs';
|
|
4
|
+
import { TextDecoder } from 'node:util';
|
|
5
|
+
import { GoogleAuth, AuthClient } from 'google-auth-library';
|
|
6
|
+
import { log, placeholder } from 'google-logging-utils';
|
|
7
|
+
import { createGoogleApiLifetime } from './events-google-sdk-lifetime.js';
|
|
8
|
+
const origin = 'https://cloudtasks.googleapis.com';
|
|
9
|
+
const requestLimit = 8192, responseLimit = 16384, bodyLimit = 1024;
|
|
10
|
+
export class GoogleEventTransportSetupError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
constructor(code) {
|
|
13
|
+
super(code);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.name = 'GoogleEventTransportSetupError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const production = {
|
|
19
|
+
graphSafe() {
|
|
20
|
+
try {
|
|
21
|
+
const here = createRequire(import.meta.url), auth = createRequire(here.resolve('google-auth-library'));
|
|
22
|
+
const metadata = createRequire(auth.resolve('gcp-metadata'));
|
|
23
|
+
const expected = realpathSync(here.resolve('google-logging-utils'));
|
|
24
|
+
return expected === realpathSync(auth.resolve('google-logging-utils')) && expected === realpathSync(metadata.resolve('google-logging-utils'));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
loggingSafe: () => !process.env.DEBUG_AUTH && AuthClient.log === placeholder && log('auth') === placeholder && log('gcp-metadata') === placeholder,
|
|
31
|
+
createAuth: projectId => new GoogleAuth({ projectId, universeDomain: 'googleapis.com', scopes: ['https://www.googleapis.com/auth/cloud-platform'] }),
|
|
32
|
+
fetch: (input, options) => globalThis.fetch(input, options),
|
|
33
|
+
};
|
|
34
|
+
const setup = (code) => { throw new GoogleEventTransportSetupError(code); };
|
|
35
|
+
const hasControl = (value) => { for (const character of value) {
|
|
36
|
+
const code = character.codePointAt(0);
|
|
37
|
+
if (code <= 31 || code === 127)
|
|
38
|
+
return true;
|
|
39
|
+
} return false; };
|
|
40
|
+
const text = (v, max) => typeof v === 'string' && v.length > 0 && Buffer.byteLength(v) <= max &&
|
|
41
|
+
!hasControl(v) && !/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u.test(v);
|
|
42
|
+
const object = (v) => !!v && typeof v === 'object' && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
|
|
43
|
+
const keys = (v, allowed) => Object.keys(v).every(k => allowed.includes(k));
|
|
44
|
+
const noKeys = (v) => v === undefined || object(v) && Object.keys(v).length === 0;
|
|
45
|
+
function https(value) {
|
|
46
|
+
if (!text(value, 2048))
|
|
47
|
+
return setup('INVALID_CONFIGURATION');
|
|
48
|
+
try {
|
|
49
|
+
const url = new URL(value);
|
|
50
|
+
if (url.protocol !== 'https:' || url.username || url.password || url.search || url.hash || url.port && url.port !== '443')
|
|
51
|
+
return setup('INVALID_CONFIGURATION');
|
|
52
|
+
return url.href;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return setup('INVALID_CONFIGURATION');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function configure(value) {
|
|
59
|
+
if (!object(value) || !keys(value, ['namespace', 'projectId', 'location', 'queueId', 'workerURL', 'audience', 'serviceAccountEmail', 'serviceAccountUid']) ||
|
|
60
|
+
!text(value.namespace, 240) || typeof value.projectId !== 'string' || !/^[a-z][a-z0-9-]{4,28}[a-z0-9]$/.test(value.projectId) ||
|
|
61
|
+
typeof value.location !== 'string' || !/^[a-z][a-z0-9-]{0,62}$/.test(value.location) || typeof value.queueId !== 'string' || !/^[A-Za-z0-9_-]{1,100}$/.test(value.queueId) ||
|
|
62
|
+
typeof value.serviceAccountEmail !== 'string' || !/^[-a-z0-9.]{1,64}@[-a-z0-9.]{1,128}\.iam\.gserviceaccount\.com$/.test(value.serviceAccountEmail) ||
|
|
63
|
+
typeof value.serviceAccountUid !== 'string' || !/^[0-9]{1,40}$/.test(value.serviceAccountUid))
|
|
64
|
+
return setup('INVALID_CONFIGURATION');
|
|
65
|
+
const config = Object.freeze({ ...value, workerURL: https(value.workerURL), audience: https(value.audience) });
|
|
66
|
+
const queue = `projects/${config.projectId}/locations/${config.location}/queues/${config.queueId}`;
|
|
67
|
+
return { config, queue, fingerprint: createHash('sha256').update(JSON.stringify([config.namespace, queue, config.workerURL, config.audience, config.serviceAccountEmail, config.serviceAccountUid, 'POST', 1, 28])).digest('hex') };
|
|
68
|
+
}
|
|
69
|
+
/** Private preparation seam; no public route or credential/provider override is exported by the package. */
|
|
70
|
+
export function createCloudTasksRestTransportRuntime(options, runtime = production) {
|
|
71
|
+
const { config, queue, fingerprint } = configure(options), lifetime = createGoogleApiLifetime();
|
|
72
|
+
let disposalFailed = false;
|
|
73
|
+
const endpoint = `${origin}/v2/${queue.split('/').map(encodeURIComponent).join('/')}`;
|
|
74
|
+
const body = (deliveryId) => Buffer.from(JSON.stringify({ deliveryId }));
|
|
75
|
+
function descriptor(deliveryId, taskId) {
|
|
76
|
+
if (!text(deliveryId, 240) || !/^emseepea-[0-9a-f]{64}$/.test(taskId))
|
|
77
|
+
throw new Error('INVALID_TASK_IDENTITY');
|
|
78
|
+
const bytes = body(deliveryId);
|
|
79
|
+
if (bytes.length > bodyLimit)
|
|
80
|
+
throw new Error('TASK_BODY_TOO_LARGE');
|
|
81
|
+
return { name: `${queue}/tasks/${taskId}`, httpRequest: { httpMethod: 'POST', url: config.workerURL, headers: { 'Content-Type': 'application/json' }, body: bytes.toString('base64'),
|
|
82
|
+
oidcToken: { serviceAccountEmail: config.serviceAccountEmail, audience: config.audience } }, dispatchDeadline: '28s' };
|
|
83
|
+
}
|
|
84
|
+
function requestBody(deliveryId, taskId) { const bytes = Buffer.from(JSON.stringify({ task: descriptor(deliveryId, taskId), responseView: 'BASIC' })); if (bytes.length > requestLimit)
|
|
85
|
+
throw new Error('CREATE_REQUEST_TOO_LARGE'); return bytes; }
|
|
86
|
+
// Reject configurations whose worst valid escaped identifier can never meet the request cap.
|
|
87
|
+
try {
|
|
88
|
+
requestBody('\\'.repeat(240), 'emseepea-' + 'f'.repeat(64));
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return setup('INVALID_CONFIGURATION');
|
|
92
|
+
}
|
|
93
|
+
const guards = () => { if (!runtime.graphSafe())
|
|
94
|
+
return setup('UNSUPPORTED_DEPENDENCY_GRAPH'); if (!runtime.loggingSafe())
|
|
95
|
+
return setup('UNSAFE_SDK_LOGGING'); };
|
|
96
|
+
guards();
|
|
97
|
+
const auth = runtime.createAuth(config.projectId);
|
|
98
|
+
async function read(response, check) {
|
|
99
|
+
if (!response.body)
|
|
100
|
+
throw new Error('EMPTY_GOOGLE_RESPONSE');
|
|
101
|
+
const reader = response.body.getReader();
|
|
102
|
+
let done = false, total = 0, value, failure;
|
|
103
|
+
const chunks = [];
|
|
104
|
+
try {
|
|
105
|
+
while (true) {
|
|
106
|
+
check();
|
|
107
|
+
const next = await reader.read();
|
|
108
|
+
check();
|
|
109
|
+
if (next.done) {
|
|
110
|
+
done = true;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
total += next.value.byteLength;
|
|
114
|
+
if (total > responseLimit)
|
|
115
|
+
throw new Error('GOOGLE_RESPONSE_TOO_LARGE');
|
|
116
|
+
chunks.push(next.value);
|
|
117
|
+
}
|
|
118
|
+
value = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(Buffer.concat(chunks, total)));
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
failure = error;
|
|
122
|
+
}
|
|
123
|
+
if (!done)
|
|
124
|
+
try {
|
|
125
|
+
await reader.cancel();
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
disposalFailed = true;
|
|
129
|
+
failure = new Error('GOOGLE_STREAM_CLEANUP_FAILED');
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
reader.releaseLock();
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
disposalFailed = true;
|
|
136
|
+
}
|
|
137
|
+
if (failure)
|
|
138
|
+
throw failure;
|
|
139
|
+
return value;
|
|
140
|
+
}
|
|
141
|
+
async function request(path, method, data, invocation) {
|
|
142
|
+
if (data && data.length > requestLimit)
|
|
143
|
+
return null;
|
|
144
|
+
return lifetime.invoke(invocation, null, async (signal, check) => {
|
|
145
|
+
guards();
|
|
146
|
+
check();
|
|
147
|
+
const credentials = await auth.getClient();
|
|
148
|
+
check();
|
|
149
|
+
guards();
|
|
150
|
+
const supplied = await credentials.getRequestHeaders(origin);
|
|
151
|
+
check();
|
|
152
|
+
guards();
|
|
153
|
+
const authorization = supplied.get('authorization');
|
|
154
|
+
if (typeof authorization !== 'string' || authorization.length > 8192 || !/^Bearer [A-Za-z0-9._~+\x2f-]+=*$/.test(authorization))
|
|
155
|
+
throw new Error('GOOGLE_AUTH_UNAVAILABLE');
|
|
156
|
+
// Do not forward quota-project or arbitrary SDK headers into the configured queue request.
|
|
157
|
+
const headers = { Authorization: authorization };
|
|
158
|
+
if (data)
|
|
159
|
+
headers['Content-Type'] = 'application/json';
|
|
160
|
+
check();
|
|
161
|
+
const response = await runtime.fetch(path, { method, headers, redirect: 'manual', signal, ...(data ? { body: data.toString('utf8') } : {}) });
|
|
162
|
+
if (response.status >= 300 && response.status < 400) {
|
|
163
|
+
if (response.body)
|
|
164
|
+
await response.body.cancel();
|
|
165
|
+
throw new Error('GOOGLE_REDIRECT_REJECTED');
|
|
166
|
+
}
|
|
167
|
+
const value = await read(response, check);
|
|
168
|
+
check();
|
|
169
|
+
return { status: response.status, value };
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
function matching(value, deliveryId, taskId) {
|
|
173
|
+
if (!object(value) || !keys(value, ['name', 'httpRequest', 'dispatchDeadline', 'scheduleTime', 'createTime', 'dispatchCount', 'responseCount', 'firstAttempt', 'lastAttempt', 'view']))
|
|
174
|
+
return false;
|
|
175
|
+
const wanted = descriptor(deliveryId, taskId), http = value.httpRequest;
|
|
176
|
+
if (value.name !== wanted.name || value.dispatchDeadline !== '28s' || !object(http) || !keys(http, ['httpMethod', 'url', 'headers', 'body', 'oidcToken']) || http.httpMethod !== 'POST' || http.url !== config.workerURL)
|
|
177
|
+
return false;
|
|
178
|
+
if (!object(http.oidcToken) || !keys(http.oidcToken, ['serviceAccountEmail', 'audience']) || http.oidcToken.serviceAccountEmail !== config.serviceAccountEmail || http.oidcToken.audience !== config.audience)
|
|
179
|
+
return false;
|
|
180
|
+
if (!object(http.headers) || Object.keys(http.headers).length !== 1 || Object.entries(http.headers).some(([name, value]) => name.toLowerCase() !== 'content-type' || value !== 'application/json'))
|
|
181
|
+
return false;
|
|
182
|
+
if (typeof http.body !== 'string' || http.body.length > 1400 || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(http.body))
|
|
183
|
+
return false;
|
|
184
|
+
const decoded = Buffer.from(http.body, 'base64');
|
|
185
|
+
return decoded.length <= bodyLimit && decoded.toString('base64') === http.body && decoded.equals(body(deliveryId));
|
|
186
|
+
}
|
|
187
|
+
return Object.freeze({
|
|
188
|
+
fingerprint,
|
|
189
|
+
async queue(invocation) {
|
|
190
|
+
const response = await request(endpoint, 'GET', undefined, invocation);
|
|
191
|
+
if (!response || response.status !== 200 || !object(response.value))
|
|
192
|
+
return 'unavailable';
|
|
193
|
+
const value = response.value;
|
|
194
|
+
return value.name === queue && value.state === 'RUNNING' && keys(value, ['name', 'state', 'rateLimits', 'retryConfig', 'purgeTime', 'taskTtl', 'tombstoneTtl', 'stackdriverLoggingConfig', 'httpTarget', 'appEngineRoutingOverride']) && noKeys(value.httpTarget) && noKeys(value.appEngineRoutingOverride) ? 'present' : 'unavailable';
|
|
195
|
+
},
|
|
196
|
+
async inspect(task, invocation) {
|
|
197
|
+
const { deliveryId, taskId } = task;
|
|
198
|
+
try {
|
|
199
|
+
descriptor(deliveryId, taskId);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return 'conflict';
|
|
203
|
+
}
|
|
204
|
+
const response = await request(`${endpoint}/tasks/${taskId}?responseView=FULL`, 'GET', undefined, invocation);
|
|
205
|
+
if (!response)
|
|
206
|
+
return 'unavailable';
|
|
207
|
+
if (response.status === 404)
|
|
208
|
+
return 'missing';
|
|
209
|
+
if (response.status !== 200)
|
|
210
|
+
return 'unavailable';
|
|
211
|
+
return matching(response.value, deliveryId, taskId) ? 'matching' : 'conflict';
|
|
212
|
+
},
|
|
213
|
+
async create(task, invocation) {
|
|
214
|
+
const { deliveryId, taskId } = task;
|
|
215
|
+
let bytes;
|
|
216
|
+
try {
|
|
217
|
+
bytes = requestBody(deliveryId, taskId);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return 'unavailable';
|
|
221
|
+
}
|
|
222
|
+
const response = await request(`${endpoint}/tasks`, 'POST', bytes, invocation);
|
|
223
|
+
if (!response || !object(response.value))
|
|
224
|
+
return 'unavailable';
|
|
225
|
+
if (response.status >= 200 && response.status < 300 && response.value.name === `${queue}/tasks/${taskId}`)
|
|
226
|
+
return 'created';
|
|
227
|
+
return response.status === 409 && object(response.value.error) && response.value.error.status === 'ALREADY_EXISTS' ? 'exists' : 'unavailable';
|
|
228
|
+
},
|
|
229
|
+
async settle(invocation) { return await lifetime.settle(invocation) && !disposalFailed; },
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=events-cloud-tasks-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-cloud-tasks-transport.js","sourceRoot":"","sources":["../src/events-cloud-tasks-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type McpEventsOptions, type McpEventRuntime, type McpEventSubscription } from "./events.js";
|
|
2
|
+
import { postCheckedWebhook } from "./events-webhook.js";
|
|
3
|
+
export interface ExternalMcpEventInvocation {
|
|
4
|
+
readonly signal: AbortSignal;
|
|
5
|
+
readonly deadlineMs: number;
|
|
6
|
+
}
|
|
7
|
+
export interface ExternalMcpEventIdentity {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly ownerKey: string;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly arguments: Readonly<Record<string, unknown>>;
|
|
12
|
+
readonly url: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ExternalMcpEventObservation {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly ownerKey: string;
|
|
17
|
+
readonly revision: string | null;
|
|
18
|
+
readonly generation: string | null;
|
|
19
|
+
readonly active: boolean;
|
|
20
|
+
readonly observedAt: number;
|
|
21
|
+
readonly subscription: Omit<McpEventSubscription, "secret" | "previousSecret" | "previousSecretUntil" | "verifiedUntil"> | null;
|
|
22
|
+
}
|
|
23
|
+
export interface ExternalMcpEventActivation {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly revision: string;
|
|
26
|
+
readonly generation: string;
|
|
27
|
+
readonly observedAt: number;
|
|
28
|
+
readonly expiresAt: number;
|
|
29
|
+
}
|
|
30
|
+
/** Durable implementations must qualify CAS, database-time expiry and tombstone fencing. */
|
|
31
|
+
export interface ExternalMcpEventLifecycle {
|
|
32
|
+
observe(identity: ExternalMcpEventIdentity, invocation: ExternalMcpEventInvocation): Promise<ExternalMcpEventObservation>;
|
|
33
|
+
activate(request: ExternalMcpEventIdentity & Readonly<{
|
|
34
|
+
expectedRevision: string | null;
|
|
35
|
+
intent: "renew" | "new";
|
|
36
|
+
secret: string;
|
|
37
|
+
ttlMs: number;
|
|
38
|
+
}>, invocation: ExternalMcpEventInvocation): Promise<ExternalMcpEventActivation>;
|
|
39
|
+
/** Join adapter-owned raw work within the shared shutdown budget. */
|
|
40
|
+
settle?(invocation: ExternalMcpEventInvocation): Promise<boolean>;
|
|
41
|
+
/** Fence stale activation even when observe previously returned revision:null. */
|
|
42
|
+
revoke(identity: ExternalMcpEventIdentity, invocation: ExternalMcpEventInvocation): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
export interface ExternalMcpEventsOptions extends Omit<McpEventsOptions, "store"> {
|
|
45
|
+
readonly mode: "external";
|
|
46
|
+
readonly lifecycle: ExternalMcpEventLifecycle;
|
|
47
|
+
readonly store?: never;
|
|
48
|
+
}
|
|
49
|
+
export type ExternalMcpEventErrorCode = "INVALID_INPUT" | "SUBSCRIPTION_CHANGED" | "UNAVAILABLE" | "ABORTED" | "DEADLINE" | "OUTCOME_UNKNOWN" | "EXTERNAL_PUBLICATION_REQUIRES_CAPTURE";
|
|
50
|
+
export declare class ExternalMcpEventError extends Error {
|
|
51
|
+
readonly code: ExternalMcpEventErrorCode;
|
|
52
|
+
constructor(code: ExternalMcpEventErrorCode);
|
|
53
|
+
}
|
|
54
|
+
type ProtocolRuntime = Omit<McpEventRuntime, "drain">;
|
|
55
|
+
export interface ExternalMcpEventRuntime extends ProtocolRuntime {
|
|
56
|
+
forInvocation(invocation: ExternalMcpEventInvocation): ProtocolRuntime;
|
|
57
|
+
settle(invocation?: ExternalMcpEventInvocation): Promise<boolean>;
|
|
58
|
+
}
|
|
59
|
+
/** No SQL/provider implementation and no legacy queue are created by this runtime. */
|
|
60
|
+
export declare function createExternalMcpEventRuntime(options: ExternalMcpEventsOptions, webhookPost?: typeof postCheckedWebhook): ExternalMcpEventRuntime;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=events-external.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-external.d.ts","sourceRoot":"","sources":["../src/events-external.ts"],"names":[],"mappings":"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"}
|