@emseepea/server 0.24.0 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/events-cloud-tasks-transport.d.ts +30 -0
  2. package/dist/events-cloud-tasks-transport.d.ts.map +1 -0
  3. package/dist/events-cloud-tasks-transport.js +213 -0
  4. package/dist/events-cloud-tasks-transport.js.map +1 -0
  5. package/dist/events-google-sdk-guards.d.ts +8 -0
  6. package/dist/events-google-sdk-guards.d.ts.map +1 -0
  7. package/dist/events-google-sdk-guards.js +31 -0
  8. package/dist/events-google-sdk-guards.js.map +1 -0
  9. package/dist/events-google-sdk-lifetime.d.ts +7 -0
  10. package/dist/events-google-sdk-lifetime.d.ts.map +1 -0
  11. package/dist/events-google-sdk-lifetime.js +70 -0
  12. package/dist/events-google-sdk-lifetime.js.map +1 -0
  13. package/dist/events-google-worker-runtime.d.ts +21 -0
  14. package/dist/events-google-worker-runtime.d.ts.map +1 -0
  15. package/dist/events-google-worker-runtime.js +149 -0
  16. package/dist/events-google-worker-runtime.js.map +1 -0
  17. package/dist/events-google-worker.d.ts +4 -0
  18. package/dist/events-google-worker.d.ts.map +1 -0
  19. package/dist/events-google-worker.js +3 -0
  20. package/dist/events-google-worker.js.map +1 -0
  21. package/dist/events-postgres-delivery-migrations.d.ts +18 -0
  22. package/dist/events-postgres-delivery-migrations.d.ts.map +1 -0
  23. package/dist/events-postgres-delivery-migrations.js +146 -0
  24. package/dist/events-postgres-delivery-migrations.js.map +1 -0
  25. package/dist/events-postgres-delivery-owned.d.ts +16 -0
  26. package/dist/events-postgres-delivery-owned.d.ts.map +1 -0
  27. package/dist/events-postgres-delivery-owned.js +178 -0
  28. package/dist/events-postgres-delivery-owned.js.map +1 -0
  29. package/dist/events-postgres-delivery.d.ts +29 -0
  30. package/dist/events-postgres-delivery.d.ts.map +1 -0
  31. package/dist/events-postgres-delivery.js +299 -0
  32. package/dist/events-postgres-delivery.js.map +1 -0
  33. package/dist/events-postgres-dispatch-migrations.d.ts +19 -0
  34. package/dist/events-postgres-dispatch-migrations.d.ts.map +1 -0
  35. package/dist/events-postgres-dispatch-migrations.js +162 -0
  36. package/dist/events-postgres-dispatch-migrations.js.map +1 -0
  37. package/dist/events-postgres-dispatch.d.ts +39 -0
  38. package/dist/events-postgres-dispatch.d.ts.map +1 -0
  39. package/dist/events-postgres-dispatch.js +270 -0
  40. package/dist/events-postgres-dispatch.js.map +1 -0
  41. package/dist/events-postgres-lifecycle-migrations.d.ts +17 -0
  42. package/dist/events-postgres-lifecycle-migrations.d.ts.map +1 -0
  43. package/dist/events-postgres-lifecycle-migrations.js +125 -0
  44. package/dist/events-postgres-lifecycle-migrations.js.map +1 -0
  45. package/dist/events-postgres-lifecycle.d.ts +13 -0
  46. package/dist/events-postgres-lifecycle.d.ts.map +1 -0
  47. package/dist/events-postgres-lifecycle.js +176 -0
  48. package/dist/events-postgres-lifecycle.js.map +1 -0
  49. package/dist/events-postgres-migrations.d.ts +32 -0
  50. package/dist/events-postgres-migrations.d.ts.map +1 -0
  51. package/dist/events-postgres-migrations.js +329 -0
  52. package/dist/events-postgres-migrations.js.map +1 -0
  53. package/dist/events-postgres-owned.d.ts +16 -0
  54. package/dist/events-postgres-owned.d.ts.map +1 -0
  55. package/dist/events-postgres-owned.js +161 -0
  56. package/dist/events-postgres-owned.js.map +1 -0
  57. package/dist/events-postgres.d.ts +53 -0
  58. package/dist/events-postgres.d.ts.map +1 -0
  59. package/dist/events-postgres.js +289 -0
  60. package/dist/events-postgres.js.map +1 -0
  61. package/dist/index.js +58 -9
  62. package/dist/index.js.map +1 -1
  63. package/package.json +33 -5
@@ -0,0 +1,30 @@
1
+ export { GoogleEventTransportSetupError } from './events-google-sdk-guards.js';
2
+ import type { ExternalMcpEventInvocation } from './events-external.js';
3
+ import type { EventDispatchTransport } from './events-postgres-dispatch.js';
4
+ type Invocation = ExternalMcpEventInvocation;
5
+ export interface CloudTasksEventConfiguration {
6
+ readonly namespace: string;
7
+ readonly projectId: string;
8
+ readonly location: string;
9
+ readonly queueId: string;
10
+ readonly workerURL: string;
11
+ readonly audience: string;
12
+ readonly serviceAccountEmail: string;
13
+ readonly serviceAccountUid: string;
14
+ }
15
+ interface Credentials {
16
+ getRequestHeaders(url: string): Promise<Headers>;
17
+ }
18
+ interface Runtime {
19
+ graphSafe(): boolean;
20
+ loggingSafe(): boolean;
21
+ createAuth(projectId: string): {
22
+ getClient(): Promise<Credentials>;
23
+ };
24
+ fetch: typeof globalThis.fetch;
25
+ }
26
+ /** Private preparation seam; no public route or credential/provider override is exported by the package. */
27
+ export declare function createCloudTasksRestTransportRuntime(options: CloudTasksEventConfiguration, runtime?: Runtime): EventDispatchTransport & {
28
+ settle(invocation: Invocation): Promise<boolean>;
29
+ };
30
+ //# 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":"AAIA,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAC/E,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,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;AA6BD,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,213 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { TextDecoder } from 'node:util';
3
+ import { GoogleAuth } from 'google-auth-library';
4
+ import { GoogleEventTransportSetupError, googleSdkGraphSafe, googleSdkLoggingSafe } from './events-google-sdk-guards.js';
5
+ export { GoogleEventTransportSetupError } from './events-google-sdk-guards.js';
6
+ import { createGoogleApiLifetime } from './events-google-sdk-lifetime.js';
7
+ const origin = 'https://cloudtasks.googleapis.com';
8
+ const requestLimit = 8192, responseLimit = 16384, bodyLimit = 1024;
9
+ const production = {
10
+ graphSafe: googleSdkGraphSafe,
11
+ loggingSafe: googleSdkLoggingSafe,
12
+ createAuth: projectId => new GoogleAuth({ projectId, universeDomain: 'googleapis.com', scopes: ['https://www.googleapis.com/auth/cloud-platform'] }),
13
+ fetch: (input, options) => globalThis.fetch(input, options),
14
+ };
15
+ const setup = (code) => { throw new GoogleEventTransportSetupError(code); };
16
+ const hasControl = (value) => { for (const character of value) {
17
+ const code = character.codePointAt(0);
18
+ if (code <= 31 || code === 127)
19
+ return true;
20
+ } return false; };
21
+ const text = (v, max) => typeof v === 'string' && v.length > 0 && Buffer.byteLength(v) <= max &&
22
+ !hasControl(v) && !/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u.test(v);
23
+ const object = (v) => !!v && typeof v === 'object' && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
24
+ const keys = (v, allowed) => Object.keys(v).every(k => allowed.includes(k));
25
+ const noKeys = (v) => v === undefined || object(v) && Object.keys(v).length === 0;
26
+ function https(value) {
27
+ if (!text(value, 2048))
28
+ return setup('INVALID_CONFIGURATION');
29
+ try {
30
+ const url = new URL(value);
31
+ if (url.protocol !== 'https:' || url.username || url.password || url.search || url.hash || url.port && url.port !== '443')
32
+ return setup('INVALID_CONFIGURATION');
33
+ return url.href;
34
+ }
35
+ catch {
36
+ return setup('INVALID_CONFIGURATION');
37
+ }
38
+ }
39
+ function configure(value) {
40
+ if (!object(value) || !keys(value, ['namespace', 'projectId', 'location', 'queueId', 'workerURL', 'audience', 'serviceAccountEmail', 'serviceAccountUid']) ||
41
+ !text(value.namespace, 240) || typeof value.projectId !== 'string' || !/^[a-z][a-z0-9-]{4,28}[a-z0-9]$/.test(value.projectId) ||
42
+ 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) ||
43
+ typeof value.serviceAccountEmail !== 'string' || !/^[-a-z0-9.]{1,64}@[-a-z0-9.]{1,128}\.iam\.gserviceaccount\.com$/.test(value.serviceAccountEmail) ||
44
+ typeof value.serviceAccountUid !== 'string' || !/^[0-9]{1,40}$/.test(value.serviceAccountUid))
45
+ return setup('INVALID_CONFIGURATION');
46
+ const config = Object.freeze({ ...value, workerURL: https(value.workerURL), audience: https(value.audience) });
47
+ const queue = `projects/${config.projectId}/locations/${config.location}/queues/${config.queueId}`;
48
+ 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') };
49
+ }
50
+ /** Private preparation seam; no public route or credential/provider override is exported by the package. */
51
+ export function createCloudTasksRestTransportRuntime(options, runtime = production) {
52
+ const { config, queue, fingerprint } = configure(options), lifetime = createGoogleApiLifetime();
53
+ let disposalFailed = false;
54
+ const endpoint = `${origin}/v2/${queue.split('/').map(encodeURIComponent).join('/')}`;
55
+ const body = (deliveryId) => Buffer.from(JSON.stringify({ deliveryId }));
56
+ function descriptor(deliveryId, taskId) {
57
+ if (!text(deliveryId, 240) || !/^emseepea-[0-9a-f]{64}$/.test(taskId))
58
+ throw new Error('INVALID_TASK_IDENTITY');
59
+ const bytes = body(deliveryId);
60
+ if (bytes.length > bodyLimit)
61
+ throw new Error('TASK_BODY_TOO_LARGE');
62
+ return { name: `${queue}/tasks/${taskId}`, httpRequest: { httpMethod: 'POST', url: config.workerURL, headers: { 'Content-Type': 'application/json' }, body: bytes.toString('base64'),
63
+ oidcToken: { serviceAccountEmail: config.serviceAccountEmail, audience: config.audience } }, dispatchDeadline: '28s' };
64
+ }
65
+ function requestBody(deliveryId, taskId) { const bytes = Buffer.from(JSON.stringify({ task: descriptor(deliveryId, taskId), responseView: 'BASIC' })); if (bytes.length > requestLimit)
66
+ throw new Error('CREATE_REQUEST_TOO_LARGE'); return bytes; }
67
+ // Reject configurations whose worst valid escaped identifier can never meet the request cap.
68
+ try {
69
+ requestBody('\\'.repeat(240), 'emseepea-' + 'f'.repeat(64));
70
+ }
71
+ catch {
72
+ return setup('INVALID_CONFIGURATION');
73
+ }
74
+ const guards = () => { if (!runtime.graphSafe())
75
+ return setup('UNSUPPORTED_DEPENDENCY_GRAPH'); if (!runtime.loggingSafe())
76
+ return setup('UNSAFE_SDK_LOGGING'); };
77
+ guards();
78
+ const auth = runtime.createAuth(config.projectId);
79
+ async function read(response, check) {
80
+ if (!response.body)
81
+ throw new Error('EMPTY_GOOGLE_RESPONSE');
82
+ const reader = response.body.getReader();
83
+ let done = false, total = 0, value, failure;
84
+ const chunks = [];
85
+ try {
86
+ while (true) {
87
+ check();
88
+ const next = await reader.read();
89
+ check();
90
+ if (next.done) {
91
+ done = true;
92
+ break;
93
+ }
94
+ total += next.value.byteLength;
95
+ if (total > responseLimit)
96
+ throw new Error('GOOGLE_RESPONSE_TOO_LARGE');
97
+ chunks.push(next.value);
98
+ }
99
+ value = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(Buffer.concat(chunks, total)));
100
+ }
101
+ catch (error) {
102
+ failure = error;
103
+ }
104
+ if (!done)
105
+ try {
106
+ await reader.cancel();
107
+ }
108
+ catch {
109
+ disposalFailed = true;
110
+ failure = new Error('GOOGLE_STREAM_CLEANUP_FAILED');
111
+ }
112
+ try {
113
+ reader.releaseLock();
114
+ }
115
+ catch {
116
+ disposalFailed = true;
117
+ }
118
+ if (failure)
119
+ throw failure;
120
+ return value;
121
+ }
122
+ async function request(path, method, data, invocation) {
123
+ if (data && data.length > requestLimit)
124
+ return null;
125
+ return lifetime.invoke(invocation, null, async (signal, check) => {
126
+ guards();
127
+ check();
128
+ const credentials = await auth.getClient();
129
+ check();
130
+ guards();
131
+ const supplied = await credentials.getRequestHeaders(origin);
132
+ check();
133
+ guards();
134
+ const authorization = supplied.get('authorization');
135
+ if (typeof authorization !== 'string' || authorization.length > 8192 || !/^Bearer [A-Za-z0-9._~+\x2f-]+=*$/.test(authorization))
136
+ throw new Error('GOOGLE_AUTH_UNAVAILABLE');
137
+ // Do not forward quota-project or arbitrary SDK headers into the configured queue request.
138
+ const headers = { Authorization: authorization };
139
+ if (data)
140
+ headers['Content-Type'] = 'application/json';
141
+ check();
142
+ const response = await runtime.fetch(path, { method, headers, redirect: 'manual', signal, ...(data ? { body: data.toString('utf8') } : {}) });
143
+ if (response.status >= 300 && response.status < 400) {
144
+ if (response.body)
145
+ await response.body.cancel();
146
+ throw new Error('GOOGLE_REDIRECT_REJECTED');
147
+ }
148
+ const value = await read(response, check);
149
+ check();
150
+ return { status: response.status, value };
151
+ });
152
+ }
153
+ function matching(value, deliveryId, taskId) {
154
+ if (!object(value) || !keys(value, ['name', 'httpRequest', 'dispatchDeadline', 'scheduleTime', 'createTime', 'dispatchCount', 'responseCount', 'firstAttempt', 'lastAttempt', 'view']))
155
+ return false;
156
+ const wanted = descriptor(deliveryId, taskId), http = value.httpRequest;
157
+ if (value.name !== wanted.name || value.dispatchDeadline !== '28s' || !object(http) || !keys(http, ['httpMethod', 'url', 'headers', 'body', 'oidcToken']) || http.httpMethod !== 'POST' || http.url !== config.workerURL)
158
+ return false;
159
+ if (!object(http.oidcToken) || !keys(http.oidcToken, ['serviceAccountEmail', 'audience']) || http.oidcToken.serviceAccountEmail !== config.serviceAccountEmail || http.oidcToken.audience !== config.audience)
160
+ return false;
161
+ if (!object(http.headers) || Object.keys(http.headers).length !== 1 || Object.entries(http.headers).some(([name, value]) => name.toLowerCase() !== 'content-type' || value !== 'application/json'))
162
+ return false;
163
+ 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))
164
+ return false;
165
+ const decoded = Buffer.from(http.body, 'base64');
166
+ return decoded.length <= bodyLimit && decoded.toString('base64') === http.body && decoded.equals(body(deliveryId));
167
+ }
168
+ return Object.freeze({
169
+ fingerprint,
170
+ async queue(invocation) {
171
+ const response = await request(endpoint, 'GET', undefined, invocation);
172
+ if (!response || response.status !== 200 || !object(response.value))
173
+ return 'unavailable';
174
+ const value = response.value;
175
+ 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';
176
+ },
177
+ async inspect(task, invocation) {
178
+ const { deliveryId, taskId } = task;
179
+ try {
180
+ descriptor(deliveryId, taskId);
181
+ }
182
+ catch {
183
+ return 'conflict';
184
+ }
185
+ const response = await request(`${endpoint}/tasks/${taskId}?responseView=FULL`, 'GET', undefined, invocation);
186
+ if (!response)
187
+ return 'unavailable';
188
+ if (response.status === 404)
189
+ return 'missing';
190
+ if (response.status !== 200)
191
+ return 'unavailable';
192
+ return matching(response.value, deliveryId, taskId) ? 'matching' : 'conflict';
193
+ },
194
+ async create(task, invocation) {
195
+ const { deliveryId, taskId } = task;
196
+ let bytes;
197
+ try {
198
+ bytes = requestBody(deliveryId, taskId);
199
+ }
200
+ catch {
201
+ return 'unavailable';
202
+ }
203
+ const response = await request(`${endpoint}/tasks`, 'POST', bytes, invocation);
204
+ if (!response || !object(response.value))
205
+ return 'unavailable';
206
+ if (response.status >= 200 && response.status < 300 && response.value.name === `${queue}/tasks/${taskId}`)
207
+ return 'created';
208
+ return response.status === 409 && object(response.value.error) && response.value.error.status === 'ALREADY_EXISTS' ? 'exists' : 'unavailable';
209
+ },
210
+ async settle(invocation) { return await lifetime.settle(invocation) && !disposalFailed; },
211
+ });
212
+ }
213
+ //# 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,8 @@
1
+ export declare class GoogleEventTransportSetupError extends Error {
2
+ readonly code: 'INVALID_CONFIGURATION' | 'UNSUPPORTED_DEPENDENCY_GRAPH' | 'UNSAFE_SDK_LOGGING';
3
+ constructor(code: 'INVALID_CONFIGURATION' | 'UNSUPPORTED_DEPENDENCY_GRAPH' | 'UNSAFE_SDK_LOGGING');
4
+ }
5
+ export declare function googleSdkGraphSafe(): boolean;
6
+ export declare const googleSdkLoggingSafe: () => boolean;
7
+ export declare function assertGoogleSdkSafe(): void;
8
+ //# sourceMappingURL=events-google-sdk-guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-google-sdk-guards.d.ts","sourceRoot":"","sources":["../src/events-google-sdk-guards.ts"],"names":[],"mappings":"AAKA,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,wBAAgB,kBAAkB,IAAG,OAAO,CAO3C;AACD,eAAO,MAAM,oBAAoB,eAAwH,CAAC;AAC1J,wBAAgB,mBAAmB,IAAG,IAAI,CAGzC"}
@@ -0,0 +1,31 @@
1
+ import { createRequire } from 'node:module';
2
+ import { realpathSync } from 'node:fs';
3
+ import { AuthClient } from 'google-auth-library';
4
+ import { log, placeholder } from 'google-logging-utils';
5
+ export class GoogleEventTransportSetupError extends Error {
6
+ code;
7
+ constructor(code) {
8
+ super(code);
9
+ this.code = code;
10
+ this.name = 'GoogleEventTransportSetupError';
11
+ }
12
+ }
13
+ export function googleSdkGraphSafe() {
14
+ try {
15
+ const here = createRequire(import.meta.url), auth = createRequire(here.resolve('google-auth-library'));
16
+ const metadata = createRequire(auth.resolve('gcp-metadata'));
17
+ const expected = realpathSync(here.resolve('google-logging-utils'));
18
+ return expected === realpathSync(auth.resolve('google-logging-utils')) && expected === realpathSync(metadata.resolve('google-logging-utils'));
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }
24
+ export const googleSdkLoggingSafe = () => !process.env.DEBUG_AUTH && AuthClient.log === placeholder && log('auth') === placeholder && log('gcp-metadata') === placeholder;
25
+ export function assertGoogleSdkSafe() {
26
+ if (!googleSdkGraphSafe())
27
+ throw new GoogleEventTransportSetupError('UNSUPPORTED_DEPENDENCY_GRAPH');
28
+ if (!googleSdkLoggingSafe())
29
+ throw new GoogleEventTransportSetupError('UNSAFE_SDK_LOGGING');
30
+ }
31
+ //# sourceMappingURL=events-google-sdk-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-google-sdk-guards.js","sourceRoot":"","sources":["../src/events-google-sdk-guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAC,YAAY,EAAC,MAAM,SAAS,CAAC;AACrC,OAAO,EAAC,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAC,GAAG,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IACnC;IAArB,YAAqB,IAAgF;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAA9F,SAAI,GAAJ,IAAI,CAA4E;QAAc,IAAI,CAAC,IAAI,GAAC,gCAAgC,CAAC;IAAA,CAAC;CAC/J;AACD,MAAM,UAAU,kBAAkB;IACjC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC,IAAI,GAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAClG,MAAM,QAAQ,GAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAClE,OAAO,QAAQ,KAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,IAAE,QAAQ,KAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACzI,CAAC;IAAA,MAAK,CAAC;QAAA,OAAO,KAAK,CAAC;IAAA,CAAC;AACtB,CAAC;AACD,MAAM,CAAC,MAAM,oBAAoB,GAAC,GAAE,EAAE,CAAA,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAE,UAAU,CAAC,GAAG,KAAG,WAAW,IAAE,GAAG,CAAC,MAAM,CAAC,KAAG,WAAW,IAAE,GAAG,CAAC,cAAc,CAAC,KAAG,WAAW,CAAC;AAC1J,MAAM,UAAU,mBAAmB;IAClC,IAAG,CAAC,kBAAkB,EAAE;QAAC,MAAM,IAAI,8BAA8B,CAAC,8BAA8B,CAAC,CAAC;IAClG,IAAG,CAAC,oBAAoB,EAAE;QAAC,MAAM,IAAI,8BAA8B,CAAC,oBAAoB,CAAC,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ExternalMcpEventInvocation } from './events-external.js';
2
+ /** Private ownership of exposed credential/fetch/body promises, never a cancellation guarantee. */
3
+ export declare function createGoogleApiLifetime(): {
4
+ invoke<T>(invocation: ExternalMcpEventInvocation, unavailable: T, work: (signal: AbortSignal, check: () => void) => Promise<T>): Promise<T>;
5
+ settle(invocation: ExternalMcpEventInvocation): Promise<boolean>;
6
+ };
7
+ //# sourceMappingURL=events-google-sdk-lifetime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-google-sdk-lifetime.d.ts","sourceRoot":"","sources":["../src/events-google-sdk-lifetime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,mGAAmG;AACnG,wBAAgB,uBAAuB;WAGxB,CAAC,cAAa,0BAA0B,eAAa,CAAC,QAAM,CAAC,MAAM,EAAC,WAAW,EAAC,KAAK,EAAC,MAAI,IAAI,KAAG,OAAO,CAAC,CAAC,CAAC,GAAE,OAAO,CAAC,CAAC,CAAC;uBAgB5G,0BAA0B,GAAE,OAAO,CAAC,OAAO,CAAC;EAYrE"}
@@ -0,0 +1,70 @@
1
+ import { performance } from 'node:perf_hooks';
2
+ /** Private ownership of exposed credential/fetch/body promises, never a cancellation guarantee. */
3
+ export function createGoogleApiLifetime() {
4
+ const pending = new Set();
5
+ let closing = false;
6
+ return {
7
+ async invoke(invocation, unavailable, work) {
8
+ if (!invocation?.signal || !Number.isFinite(invocation.deadlineMs) || closing || invocation.signal.aborted || pending.size >= 2)
9
+ return unavailable;
10
+ const end = performance.now() + Math.min(3000, invocation.deadlineMs - Date.now());
11
+ if (end <= performance.now())
12
+ return unavailable;
13
+ const controller = new AbortController();
14
+ const check = () => { if (closing || controller.signal.aborted || invocation.signal.aborted || performance.now() >= end)
15
+ throw new Error('GOOGLE_OPERATION_UNAVAILABLE'); };
16
+ let timer, stop;
17
+ const actual = Promise.resolve().then(async () => { check(); return work(controller.signal, check); }).catch(() => { controller.abort(); return unavailable; });
18
+ pending.add(actual);
19
+ void actual.then(() => pending.delete(actual));
20
+ try {
21
+ const value = await Promise.race([actual, new Promise(resolve => {
22
+ timer = setTimeout(() => { controller.abort(); resolve(unavailable); }, Math.max(1, end - performance.now()));
23
+ stop = () => { controller.abort(); resolve(unavailable); };
24
+ invocation.signal.addEventListener('abort', stop, { once: true });
25
+ if (invocation.signal.aborted)
26
+ stop();
27
+ })]);
28
+ if (closing || invocation.signal.aborted || performance.now() >= end)
29
+ return unavailable;
30
+ return value;
31
+ }
32
+ finally {
33
+ if (timer)
34
+ clearTimeout(timer);
35
+ if (stop)
36
+ invocation.signal.removeEventListener('abort', stop);
37
+ }
38
+ },
39
+ async settle(invocation) {
40
+ closing = true;
41
+ if (!invocation?.signal || !Number.isFinite(invocation.deadlineMs))
42
+ return false;
43
+ const end = performance.now() + Math.max(0, invocation.deadlineMs - Date.now());
44
+ while (pending.size) {
45
+ if (invocation.signal.aborted || performance.now() >= end)
46
+ return false;
47
+ let timer, stop;
48
+ try {
49
+ const complete = await Promise.race([Promise.allSettled(pending).then(() => true), new Promise(resolve => {
50
+ timer = setTimeout(() => resolve(false), Math.max(1, end - performance.now()));
51
+ stop = () => resolve(false);
52
+ invocation.signal.addEventListener('abort', stop, { once: true });
53
+ if (invocation.signal.aborted)
54
+ stop();
55
+ })]);
56
+ if (!complete)
57
+ return false;
58
+ }
59
+ finally {
60
+ if (timer)
61
+ clearTimeout(timer);
62
+ if (stop)
63
+ invocation.signal.removeEventListener('abort', stop);
64
+ }
65
+ }
66
+ return true;
67
+ },
68
+ };
69
+ }
70
+ //# sourceMappingURL=events-google-sdk-lifetime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-google-sdk-lifetime.js","sourceRoot":"","sources":["../src/events-google-sdk-lifetime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { FastifyReply, FastifyRequest } from 'fastify';
2
+ import { OAuth2Client } from 'google-auth-library';
3
+ import { type PostgresEventDelivery, type PostgresEventDeliveryOptions } from './events-postgres-delivery.js';
4
+ import type { ExternalMcpEventInvocation } from './events-external.js';
5
+ interface WorkerIdentity {
6
+ readonly audience: string;
7
+ readonly serviceAccountEmail: string;
8
+ readonly serviceAccountUid: string;
9
+ }
10
+ export interface GoogleEventDeliveryWorkerOptions extends PostgresEventDeliveryOptions, WorkerIdentity {
11
+ }
12
+ export interface GoogleEventDeliveryWorker {
13
+ handle(request: FastifyRequest, reply: FastifyReply): Promise<void>;
14
+ settle(invocation: ExternalMcpEventInvocation): Promise<boolean>;
15
+ }
16
+ /** Explicitly register handle on a worker route, never on the public MCP route. */
17
+ export declare function createGoogleEventDeliveryWorker(options: GoogleEventDeliveryWorkerOptions): GoogleEventDeliveryWorker;
18
+ /** Private test seam. The public factory always uses Google verification and checked delivery. */
19
+ export declare function createGoogleEventDeliveryWorkerRuntime(options: WorkerIdentity, delivery: PostgresEventDelivery, auth: OAuth2Client): GoogleEventDeliveryWorker;
20
+ export {};
21
+ //# sourceMappingURL=events-google-worker-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-google-worker-runtime.d.ts","sourceRoot":"","sources":["../src/events-google-worker-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AACzD,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAGjD,OAAO,EAA6B,KAAK,qBAAqB,EAAC,KAAK,4BAA4B,EAAC,MAAM,+BAA+B,CAAC;AACvI,OAAO,KAAK,EAAC,0BAA0B,EAAC,MAAM,sBAAsB,CAAC;AAErE,UAAU,cAAc;IACvB,QAAQ,CAAC,QAAQ,EAAC,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAC,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAC,MAAM,CAAC;CAClC;AACD,MAAM,WAAW,gCAAiC,SAAQ,4BAA4B,EAAC,cAAc;CAAG;AACxG,MAAM,WAAW,yBAAyB;IACzC,MAAM,CAAC,OAAO,EAAC,cAAc,EAAC,KAAK,EAAC,YAAY,GAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,UAAU,EAAC,0BAA0B,GAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAuBD,mFAAmF;AACnF,wBAAgB,+BAA+B,CAAC,OAAO,EAAC,gCAAgC,GAAE,yBAAyB,CAIlH;AACD,kGAAkG;AAClG,wBAAgB,sCAAsC,CAAC,OAAO,EAAC,cAAc,EAAC,QAAQ,EAAC,qBAAqB,EAAC,IAAI,EAAC,YAAY,GAAE,yBAAyB,CAgDxJ"}
@@ -0,0 +1,149 @@
1
+ import { performance } from 'node:perf_hooks';
2
+ import { OAuth2Client } from 'google-auth-library';
3
+ import { assertGoogleSdkSafe, GoogleEventTransportSetupError } from './events-google-sdk-guards.js';
4
+ import { createGoogleApiLifetime } from './events-google-sdk-lifetime.js';
5
+ import { createPostgresEventDelivery } from './events-postgres-delivery.js';
6
+ function hasControl(value) {
7
+ for (const character of value) {
8
+ const code = character.codePointAt(0);
9
+ if (code <= 31 || code === 127)
10
+ return true;
11
+ }
12
+ return false;
13
+ }
14
+ function identity(options) {
15
+ try {
16
+ const url = new URL(options.audience);
17
+ if (typeof options.audience !== 'string' || Buffer.byteLength(options.audience) > 2048 || hasControl(options.audience) ||
18
+ url.protocol !== 'https:' || url.username || url.password || url.search || url.hash || url.port && url.port !== '443' ||
19
+ typeof options.serviceAccountEmail !== 'string' || typeof options.serviceAccountUid !== 'string' ||
20
+ !/^[-a-z0-9.]{1,64}@[-a-z0-9.]{1,128}\.iam\.gserviceaccount\.com$/.test(options.serviceAccountEmail) ||
21
+ !/^[0-9]{1,40}$/.test(options.serviceAccountUid))
22
+ throw new Error();
23
+ return Object.freeze({ audience: options.audience, serviceAccountEmail: options.serviceAccountEmail, serviceAccountUid: options.serviceAccountUid });
24
+ }
25
+ catch {
26
+ throw new GoogleEventTransportSetupError('INVALID_CONFIGURATION');
27
+ }
28
+ }
29
+ function deliveryId(body) {
30
+ if (!body || typeof body !== 'object' || Object.getPrototypeOf(body) !== Object.prototype || Reflect.ownKeys(body).length !== 1)
31
+ return null;
32
+ const field = Object.getOwnPropertyDescriptor(body, 'deliveryId');
33
+ const value = field && 'value' in field ? field.value : undefined;
34
+ return typeof value === 'string' && value.length > 0 && Buffer.byteLength(value) <= 240 &&
35
+ !hasControl(value) && !/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u.test(value) ? value : null;
36
+ }
37
+ /** Explicitly register handle on a worker route, never on the public MCP route. */
38
+ export function createGoogleEventDeliveryWorker(options) {
39
+ const configured = identity(options);
40
+ assertGoogleSdkSafe();
41
+ const delivery = createPostgresEventDelivery({ namespace: options.namespace, pool: options.pool, definitions: options.definitions, authorize: options.authorize });
42
+ return createGoogleEventDeliveryWorkerRuntime(configured, delivery, new OAuth2Client());
43
+ }
44
+ /** Private test seam. The public factory always uses Google verification and checked delivery. */
45
+ export function createGoogleEventDeliveryWorkerRuntime(options, delivery, auth) {
46
+ const configured = identity(options), authentication = createGoogleApiLifetime();
47
+ assertGoogleSdkSafe();
48
+ const pending = new Set(), controllers = new Set();
49
+ let closing = false;
50
+ async function handle(request, reply) {
51
+ if (closing) {
52
+ reply.code(503).send();
53
+ return;
54
+ }
55
+ const controller = new AbortController(), end = performance.now() + 25000, deadlineMs = Date.now() + 25000;
56
+ const abort = () => controller.abort(), closed = () => { if (!reply.raw.writableFinished)
57
+ abort(); };
58
+ const timer = setTimeout(abort, 25000);
59
+ controllers.add(controller);
60
+ request.raw.once('aborted', abort);
61
+ reply.raw.once('close', closed);
62
+ if (request.raw.aborted || reply.raw.destroyed)
63
+ abort();
64
+ try {
65
+ const id = deliveryId(request.body);
66
+ if (id === null) {
67
+ reply.code(400).send();
68
+ return;
69
+ }
70
+ const header = request.headers.authorization;
71
+ const authHeaders = request.raw.rawHeaders.filter((_, index) => index % 2 === 0 && request.raw.rawHeaders[index].toLowerCase() === 'authorization');
72
+ if (authHeaders.length !== 1 || typeof header !== 'string' || header.length > 8192 || !/^Bearer [A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(header)) {
73
+ reply.code(401).send();
74
+ return;
75
+ }
76
+ const context = { signal: controller.signal, deadlineMs };
77
+ const allowed = await authentication.invoke(context, null, async (_signal, check) => {
78
+ assertGoogleSdkSafe();
79
+ check();
80
+ let ticket;
81
+ try {
82
+ ticket = await auth.verifyIdToken({ idToken: header.slice(7), audience: configured.audience });
83
+ }
84
+ catch {
85
+ return false;
86
+ }
87
+ check();
88
+ assertGoogleSdkSafe();
89
+ const claims = ticket.getPayload();
90
+ return !!claims && (claims.iss === 'https://accounts.google.com' || claims.iss === 'accounts.google.com') &&
91
+ claims.aud === configured.audience && claims.sub === configured.serviceAccountUid && claims.email === configured.serviceAccountEmail &&
92
+ claims.email_verified === true && Number.isFinite(claims.exp) && claims.exp * 1000 > Date.now();
93
+ });
94
+ if (closing || controller.signal.aborted || performance.now() >= end || allowed === null) {
95
+ reply.code(503).send();
96
+ return;
97
+ }
98
+ if (!allowed) {
99
+ reply.code(401).send();
100
+ return;
101
+ }
102
+ const result = await delivery.deliver(id, context);
103
+ reply.code(result.outcome === 'terminal' ? 204 : 503).send();
104
+ }
105
+ catch {
106
+ if (!reply.sent)
107
+ reply.code(503).send();
108
+ }
109
+ finally {
110
+ clearTimeout(timer);
111
+ controllers.delete(controller);
112
+ request.raw.removeListener('aborted', abort);
113
+ reply.raw.removeListener('close', closed);
114
+ }
115
+ }
116
+ return Object.freeze({
117
+ handle(request, reply) {
118
+ const operation = handle(request, reply);
119
+ pending.add(operation);
120
+ void operation.then(() => pending.delete(operation), () => pending.delete(operation));
121
+ return operation;
122
+ },
123
+ async settle(invocation) {
124
+ closing = true;
125
+ for (const controller of controllers)
126
+ controller.abort();
127
+ if (!invocation?.signal || !Number.isFinite(invocation.deadlineMs) || invocation.signal.aborted || invocation.deadlineMs <= Date.now())
128
+ return false;
129
+ const complete = Promise.all([authentication.settle(invocation), delivery.settle(invocation), Promise.allSettled(pending).then(() => true)]).then(results => results.every(Boolean), () => false);
130
+ let timer, stop;
131
+ try {
132
+ return await Promise.race([complete, new Promise(resolve => {
133
+ timer = setTimeout(() => resolve(false), Math.min(2147483647, Math.max(1, invocation.deadlineMs - Date.now())));
134
+ stop = () => resolve(false);
135
+ invocation.signal.addEventListener('abort', stop, { once: true });
136
+ if (invocation.signal.aborted)
137
+ stop();
138
+ })]);
139
+ }
140
+ finally {
141
+ if (timer)
142
+ clearTimeout(timer);
143
+ if (stop)
144
+ invocation.signal.removeEventListener('abort', stop);
145
+ }
146
+ },
147
+ });
148
+ }
149
+ //# sourceMappingURL=events-google-worker-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-google-worker-runtime.js","sourceRoot":"","sources":["../src/events-google-worker-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { createGoogleEventDeliveryWorker } from './events-google-worker-runtime.js';
2
+ export type { GoogleEventDeliveryWorker, GoogleEventDeliveryWorkerOptions } from './events-google-worker-runtime.js';
3
+ export { GoogleEventTransportSetupError } from './events-google-sdk-guards.js';
4
+ //# sourceMappingURL=events-google-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-google-worker.d.ts","sourceRoot":"","sources":["../src/events-google-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,+BAA+B,EAAC,MAAM,mCAAmC,CAAC;AAClF,YAAY,EAAC,yBAAyB,EAAC,gCAAgC,EAAC,MAAM,mCAAmC,CAAC;AAClH,OAAO,EAAC,8BAA8B,EAAC,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { createGoogleEventDeliveryWorker } from './events-google-worker-runtime.js';
2
+ export { GoogleEventTransportSetupError } from './events-google-sdk-guards.js';
3
+ //# sourceMappingURL=events-google-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-google-worker.js","sourceRoot":"","sources":["../src/events-google-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,+BAA+B,EAAC,MAAM,mCAAmC,CAAC;AAElF,OAAO,EAAC,8BAA8B,EAAC,MAAM,+BAA+B,CAAC"}