@minion-stack/shared 0.5.0 → 0.6.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.
- package/dist/gateway/cache-events.d.ts +22 -0
- package/dist/gateway/cache-events.d.ts.map +1 -0
- package/dist/gateway/cache-events.js +21 -0
- package/dist/gateway/cache-events.js.map +1 -0
- package/dist/gateway/cache-events.test.d.ts +2 -0
- package/dist/gateway/cache-events.test.d.ts.map +1 -0
- package/dist/gateway/cache-events.test.js +47 -0
- package/dist/gateway/cache-events.test.js.map +1 -0
- package/dist/gateway/index.d.ts +1 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +1 -0
- package/dist/gateway/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type CacheInvalidateSource = 'hub' | 'gateway' | 'paperclip' | 'browser' | 'site';
|
|
2
|
+
export interface CacheInvalidatePayload {
|
|
3
|
+
/** Tag names whose entries should be busted. Always present (may be empty if `keys` covers the bust). */
|
|
4
|
+
tags: string[];
|
|
5
|
+
/** Optional surgical key list — busted in addition to tag-matched keys. */
|
|
6
|
+
keys?: string[];
|
|
7
|
+
/** Runtime that originated the mutation. */
|
|
8
|
+
source: CacheInvalidateSource;
|
|
9
|
+
/** Per-process unique id so emitters can dedupe their own busts. */
|
|
10
|
+
sourceId: string;
|
|
11
|
+
/** Tenant scope — subscribers may gate on this. Empty string means global/no-tenant. */
|
|
12
|
+
tenantId: string;
|
|
13
|
+
/** Emission timestamp, ms since epoch. */
|
|
14
|
+
ts: number;
|
|
15
|
+
}
|
|
16
|
+
export interface CacheInvalidateEvent {
|
|
17
|
+
type: 'event';
|
|
18
|
+
event: 'cache.invalidate';
|
|
19
|
+
payload: CacheInvalidatePayload;
|
|
20
|
+
}
|
|
21
|
+
export declare function isCacheInvalidateEvent(value: unknown): value is CacheInvalidateEvent;
|
|
22
|
+
//# sourceMappingURL=cache-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-events.d.ts","sourceRoot":"","sources":["../../src/gateway/cache-events.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzF,MAAM,WAAW,sBAAsB;IACrC,yGAAyG;IACzG,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,4CAA4C;IAC5C,MAAM,EAAE,qBAAqB,CAAC;IAC9B,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAapF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Cache invalidation gateway event frame.
|
|
2
|
+
//
|
|
3
|
+
// Convention follows existing EventFrame in ./types.ts:
|
|
4
|
+
// { type: 'event', event: '<name>', payload: {...} }
|
|
5
|
+
// (No `v: 3` discriminator — the gateway WS protocol does not version frames.)
|
|
6
|
+
export function isCacheInvalidateEvent(value) {
|
|
7
|
+
if (typeof value !== 'object' || value === null)
|
|
8
|
+
return false;
|
|
9
|
+
const v = value;
|
|
10
|
+
if (v.type !== 'event' || v.event !== 'cache.invalidate')
|
|
11
|
+
return false;
|
|
12
|
+
if (typeof v.payload !== 'object' || v.payload === null)
|
|
13
|
+
return false;
|
|
14
|
+
const p = v.payload;
|
|
15
|
+
return (Array.isArray(p.tags) &&
|
|
16
|
+
typeof p.source === 'string' &&
|
|
17
|
+
typeof p.sourceId === 'string' &&
|
|
18
|
+
typeof p.tenantId === 'string' &&
|
|
19
|
+
typeof p.ts === 'number');
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=cache-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-events.js","sourceRoot":"","sources":["../../src/gateway/cache-events.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,wDAAwD;AACxD,uDAAuD;AACvD,+EAA+E;AAyB/E,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,kBAAkB;QAAE,OAAO,KAAK,CAAC;IACvE,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAkC,CAAC;IAC/C,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACrB,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAC5B,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAC9B,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAC9B,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-events.test.d.ts","sourceRoot":"","sources":["../../src/gateway/cache-events.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { isCacheInvalidateEvent } from './cache-events.js';
|
|
3
|
+
describe('CacheInvalidateEvent', () => {
|
|
4
|
+
it('isCacheInvalidateEvent returns true for a valid event', () => {
|
|
5
|
+
const evt = {
|
|
6
|
+
type: 'event',
|
|
7
|
+
event: 'cache.invalidate',
|
|
8
|
+
payload: {
|
|
9
|
+
tags: ['t:abc:agent-groups'],
|
|
10
|
+
keys: [],
|
|
11
|
+
source: 'hub',
|
|
12
|
+
sourceId: 'vercel-fn-1',
|
|
13
|
+
tenantId: 'ten_abc',
|
|
14
|
+
ts: 1715500000000,
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
expect(isCacheInvalidateEvent(evt)).toBe(true);
|
|
18
|
+
});
|
|
19
|
+
it('isCacheInvalidateEvent returns false for the wrong name', () => {
|
|
20
|
+
const evt = {
|
|
21
|
+
type: 'event',
|
|
22
|
+
event: 'chat.message',
|
|
23
|
+
payload: { tags: [], keys: [], source: 'hub', sourceId: 'x', tenantId: 't', ts: 0 },
|
|
24
|
+
};
|
|
25
|
+
expect(isCacheInvalidateEvent(evt)).toBe(false);
|
|
26
|
+
});
|
|
27
|
+
it('isCacheInvalidateEvent returns false for non-objects', () => {
|
|
28
|
+
expect(isCacheInvalidateEvent(null)).toBe(false);
|
|
29
|
+
expect(isCacheInvalidateEvent('event')).toBe(false);
|
|
30
|
+
expect(isCacheInvalidateEvent({})).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
it('isCacheInvalidateEvent allows missing optional keys', () => {
|
|
33
|
+
const evt = {
|
|
34
|
+
type: 'event',
|
|
35
|
+
event: 'cache.invalidate',
|
|
36
|
+
payload: {
|
|
37
|
+
tags: ['t:abc'],
|
|
38
|
+
source: 'gateway',
|
|
39
|
+
sourceId: 'gw-1',
|
|
40
|
+
tenantId: 'ten_abc',
|
|
41
|
+
ts: 0,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
expect(isCacheInvalidateEvent(evt)).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=cache-events.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-events.test.js","sourceRoot":"","sources":["../../src/gateway/cache-events.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAA6B,MAAM,mBAAmB,CAAC;AAEtF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,GAAG,GAAyB;YAChC,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,kBAAkB;YACzB,OAAO,EAAE;gBACP,IAAI,EAAE,CAAC,oBAAoB,CAAC;gBAC5B,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,aAAa;gBACvB,QAAQ,EAAE,SAAS;gBACnB,EAAE,EAAE,aAAa;aAClB;SACF,CAAC;QACF,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,GAAG,GAAG;YACV,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;SACpF,CAAC;QACF,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG;YACV,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,kBAAkB;YACzB,OAAO,EAAE;gBACP,IAAI,EAAE,CAAC,OAAO,CAAC;gBACf,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,SAAS;gBACnB,EAAE,EAAE,CAAC;aACN;SACF,CAAC;QACF,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/gateway/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
|
package/dist/gateway/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
|