@pikku/core 0.12.103 → 0.12.106

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 (146) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/dev/module-runner.js +33 -1
  3. package/dist/middleware/index.d.ts +1 -0
  4. package/dist/middleware/index.js +1 -0
  5. package/dist/middleware/remote-jobs-secret.d.ts +14 -0
  6. package/dist/middleware/remote-jobs-secret.js +27 -0
  7. package/dist/services/credential-wire-service.d.ts +15 -0
  8. package/dist/services/credential-wire-service.js +30 -11
  9. package/dist/services/index.d.ts +1 -0
  10. package/dist/services/index.js +1 -0
  11. package/dist/services/remote-jobs.d.ts +27 -0
  12. package/dist/services/remote-jobs.js +59 -0
  13. package/dist/services/webhook-service.d.ts +8 -0
  14. package/dist/wirings/scheduler/index.d.ts +1 -1
  15. package/dist/wirings/scheduler/index.js +1 -1
  16. package/dist/wirings/scheduler/scheduler-runner.d.ts +4 -0
  17. package/dist/wirings/scheduler/scheduler-runner.js +1 -1
  18. package/package.json +1 -1
  19. package/src/dev/module-runner.test.ts +23 -0
  20. package/src/dev/module-runner.ts +39 -1
  21. package/src/middleware/index.ts +1 -0
  22. package/src/middleware/remote-jobs-secret.ts +35 -0
  23. package/src/public-surface.json +61 -14
  24. package/src/services/credential-wire-service.test.ts +63 -0
  25. package/src/services/credential-wire-service.ts +27 -9
  26. package/src/services/index.ts +10 -0
  27. package/src/services/remote-jobs.test.ts +106 -0
  28. package/src/services/remote-jobs.ts +92 -0
  29. package/src/services/webhook-service.ts +8 -0
  30. package/src/wirings/scheduler/index.ts +1 -0
  31. package/src/wirings/scheduler/scheduler-runner.ts +1 -1
  32. package/tsconfig.tsbuildinfo +1 -1
  33. package/dist/classification/data-lock.d.ts +0 -80
  34. package/dist/classification/data-lock.js +0 -146
  35. package/dist/column-form.d.ts +0 -32
  36. package/dist/column-form.js +0 -42
  37. package/dist/data-classification.d.ts +0 -64
  38. package/dist/data-classification.js +0 -1
  39. package/dist/ecosystem/agent-scorer.d.ts +0 -12
  40. package/dist/ecosystem/agent-scorer.js +0 -5
  41. package/dist/ecosystem/agent.d.ts +0 -21
  42. package/dist/ecosystem/agent.js +0 -6
  43. package/dist/ecosystem/channel/local.d.ts +0 -3
  44. package/dist/ecosystem/channel/local.js +0 -3
  45. package/dist/ecosystem/channel/serverless.d.ts +0 -9
  46. package/dist/ecosystem/channel/serverless.js +0 -1
  47. package/dist/ecosystem/channel.d.ts +0 -15
  48. package/dist/ecosystem/channel.js +0 -5
  49. package/dist/ecosystem/cli/channel.d.ts +0 -16
  50. package/dist/ecosystem/cli/channel.js +0 -2
  51. package/dist/ecosystem/cli.d.ts +0 -9
  52. package/dist/ecosystem/cli.js +0 -2
  53. package/dist/ecosystem/credential.d.ts +0 -10
  54. package/dist/ecosystem/credential.js +0 -1
  55. package/dist/ecosystem/crypto-utils.d.ts +0 -8
  56. package/dist/ecosystem/crypto-utils.js +0 -1
  57. package/dist/ecosystem/dev.d.ts +0 -9
  58. package/dist/ecosystem/dev.js +0 -2
  59. package/dist/ecosystem/errors.d.ts +0 -8
  60. package/dist/ecosystem/errors.js +0 -2
  61. package/dist/ecosystem/function.d.ts +0 -13
  62. package/dist/ecosystem/function.js +0 -2
  63. package/dist/ecosystem/gateway.d.ts +0 -1
  64. package/dist/ecosystem/gateway.js +0 -1
  65. package/dist/ecosystem/hmac.d.ts +0 -1
  66. package/dist/ecosystem/hmac.js +0 -1
  67. package/dist/ecosystem/http.d.ts +0 -13
  68. package/dist/ecosystem/http.js +0 -5
  69. package/dist/ecosystem/mcp.d.ts +0 -3
  70. package/dist/ecosystem/mcp.js +0 -2
  71. package/dist/ecosystem/middleware.d.ts +0 -18
  72. package/dist/ecosystem/middleware.js +0 -7
  73. package/dist/ecosystem/node-host-resolver.d.ts +0 -1
  74. package/dist/ecosystem/node-host-resolver.js +0 -1
  75. package/dist/ecosystem/node.d.ts +0 -1
  76. package/dist/ecosystem/node.js +0 -1
  77. package/dist/ecosystem/oauth2.d.ts +0 -1
  78. package/dist/ecosystem/oauth2.js +0 -1
  79. package/dist/ecosystem/persona.d.ts +0 -17
  80. package/dist/ecosystem/persona.js +0 -5
  81. package/dist/ecosystem/queue.d.ts +0 -13
  82. package/dist/ecosystem/queue.js +0 -4
  83. package/dist/ecosystem/remote.d.ts +0 -8
  84. package/dist/ecosystem/remote.js +0 -1
  85. package/dist/ecosystem/role.d.ts +0 -4
  86. package/dist/ecosystem/role.js +0 -2
  87. package/dist/ecosystem/rpc.d.ts +0 -6
  88. package/dist/ecosystem/rpc.js +0 -3
  89. package/dist/ecosystem/safe-fetch.d.ts +0 -7
  90. package/dist/ecosystem/safe-fetch.js +0 -1
  91. package/dist/ecosystem/scenario.d.ts +0 -21
  92. package/dist/ecosystem/scenario.js +0 -8
  93. package/dist/ecosystem/scheduler.d.ts +0 -3
  94. package/dist/ecosystem/scheduler.js +0 -2
  95. package/dist/ecosystem/schema.d.ts +0 -2
  96. package/dist/ecosystem/schema.js +0 -1
  97. package/dist/ecosystem/scope.d.ts +0 -5
  98. package/dist/ecosystem/scope.js +0 -3
  99. package/dist/ecosystem/secret.d.ts +0 -11
  100. package/dist/ecosystem/secret.js +0 -2
  101. package/dist/ecosystem/services/istanbul-coverage.d.ts +0 -1
  102. package/dist/ecosystem/services/istanbul-coverage.js +0 -1
  103. package/dist/ecosystem/services/local-content-request-handler.d.ts +0 -9
  104. package/dist/ecosystem/services/local-content-request-handler.js +0 -1
  105. package/dist/ecosystem/services/local-content.d.ts +0 -2
  106. package/dist/ecosystem/services/local-content.js +0 -1
  107. package/dist/ecosystem/services/local-meta.d.ts +0 -1
  108. package/dist/ecosystem/services/local-meta.js +0 -1
  109. package/dist/ecosystem/services/v8-coverage.d.ts +0 -1
  110. package/dist/ecosystem/services/v8-coverage.js +0 -1
  111. package/dist/ecosystem/services.d.ts +0 -36
  112. package/dist/ecosystem/services.js +0 -12
  113. package/dist/ecosystem/testing.d.ts +0 -7
  114. package/dist/ecosystem/testing.js +0 -1
  115. package/dist/ecosystem/trigger.d.ts +0 -2
  116. package/dist/ecosystem/trigger.js +0 -1
  117. package/dist/ecosystem/types.d.ts +0 -12
  118. package/dist/ecosystem/types.js +0 -6
  119. package/dist/ecosystem/variable.d.ts +0 -9
  120. package/dist/ecosystem/variable.js +0 -1
  121. package/dist/ecosystem/virtual-user.d.ts +0 -24
  122. package/dist/ecosystem/virtual-user.js +0 -8
  123. package/dist/ecosystem/workflow.d.ts +0 -20
  124. package/dist/ecosystem/workflow.js +0 -6
  125. package/dist/ecosystem.d.ts +0 -27
  126. package/dist/ecosystem.js +0 -26
  127. package/dist/index.d.ts +0 -60
  128. package/dist/index.js +0 -25
  129. package/dist/middleware/require-unlocked.d.ts +0 -23
  130. package/dist/middleware/require-unlocked.js +0 -21
  131. package/dist/pikku-request.d.ts +0 -8
  132. package/dist/pikku-request.js +0 -15
  133. package/dist/secret-value.d.ts +0 -56
  134. package/dist/secret-value.js +0 -46
  135. package/dist/wirings/data-lock/data-lock-wiring.d.ts +0 -40
  136. package/dist/wirings/data-lock/data-lock-wiring.js +0 -77
  137. package/dist/wirings/data-lock/index.d.ts +0 -9
  138. package/dist/wirings/data-lock/index.js +0 -8
  139. package/dist/wirings/rpc/addon-runner.d.ts +0 -17
  140. package/dist/wirings/rpc/addon-runner.js +0 -150
  141. package/dist/wirings/rpc/remote-addon-auth.d.ts +0 -16
  142. package/dist/wirings/rpc/remote-addon-auth.js +0 -39
  143. package/dist/wirings/rpc/wire-addon.d.ts +0 -62
  144. package/dist/wirings/rpc/wire-addon.js +0 -88
  145. package/dist/wirings/rpc/wire-remote-addon.d.ts +0 -22
  146. package/dist/wirings/rpc/wire-remote-addon.js +0 -11
@@ -1,80 +0,0 @@
1
- import type { WrappedValue } from './data-classification.js';
2
- export type LockState = 'uninitialized' | 'locked' | 'unlocked';
3
- /**
4
- * One KEK's stored material: everything a passphrase has to reproduce, and
5
- * nothing a passphrase could be recovered from.
6
- */
7
- export type LockRecord = {
8
- keyId: string;
9
- keyVersion: number;
10
- salt: string;
11
- /**
12
- * A DEK sealed under this KEK. Unwrapping it is the passphrase check — AES-GCM
13
- * fails its authentication tag under the wrong key, so a bad passphrase is
14
- * caught before it can produce a single garbled row.
15
- */
16
- verifier: WrappedValue;
17
- };
18
- /**
19
- * Where lock records live.
20
- *
21
- * Necessarily readable while locked — a store that needed its own key to find
22
- * out how to unlock itself could never be opened. It holds no plaintext key
23
- * material, so this costs nothing.
24
- */
25
- export interface LockVault {
26
- read(): Promise<LockRecord[]>;
27
- write(records: LockRecord[]): Promise<void>;
28
- }
29
- /**
30
- * The gate in front of every classified column.
31
- *
32
- * A key is never held at construction: the server boots locked and serves the
33
- * unlock screen, so the passphrase arrives over HTTP long after services are
34
- * built. `getKEK` is what a Kysely classification resolver calls per operation,
35
- * and it throws rather than returning a falsy key — silently writing plaintext
36
- * into a column the manifest calls `wrapped` would look like a working app
37
- * while the data sat exposed.
38
- */
39
- export declare class DataLock {
40
- private readonly vault;
41
- private keks;
42
- private records;
43
- private initialized;
44
- private failures;
45
- private lockedOutUntil;
46
- private readonly now;
47
- constructor(vault: LockVault, options?: {
48
- now?: () => number;
49
- });
50
- get state(): LockState;
51
- /**
52
- * How long before another guess will be looked at, or 0.
53
- *
54
- * Exposed so an unlock screen can show the wait instead of discovering it by
55
- * guessing again — a guess made during a lockout is itself a failure, and
56
- * extends the window it was trying to wait out.
57
- */
58
- get retryAfterMs(): number;
59
- /** Read what the store already has, so `state` can answer. */
60
- init(): Promise<LockState>;
61
- /**
62
- * First run: mint a salt and verifier per key and leave the store open, since
63
- * whoever chose the passphrase a moment ago does not need to retype it.
64
- */
65
- initialize(passphrase: string, keyIds?: string[]): Promise<void>;
66
- unlock(passphrase: string): Promise<void>;
67
- lock(): void;
68
- getKEK(keyId: string): Promise<CryptoKey>;
69
- /**
70
- * The version to stamp into a value written under `keyId`.
71
- *
72
- * Separate from `getKEK` because only a write has to ask: a stored value
73
- * carries the version it was sealed under, so a read already knows. Readable
74
- * while locked, since a version number is not key material.
75
- */
76
- getKeyVersion(keyId: string): number;
77
- private assertKnownKeyId;
78
- private recordFailure;
79
- private assertInitialized;
80
- }
@@ -1,146 +0,0 @@
1
- import { deriveKEK, generateDEK, generateKEKSalt, unwrapDEK, wrapDEK, } from '../crypto-utils.js';
2
- import { DataLockedError, InvalidPassphraseError, TooManyAttemptsError, } from '../errors/errors.js';
3
- import { DEFAULT_KEY_ID } from './key-ids.js';
4
- /** Wrong guesses tolerated before a lockout window opens. */
5
- const MAX_ATTEMPTS = 5;
6
- const LOCKOUT_MS = 30_000;
7
- const MAX_LOCKOUT_MS = 15 * 60_000;
8
- /**
9
- * The gate in front of every classified column.
10
- *
11
- * A key is never held at construction: the server boots locked and serves the
12
- * unlock screen, so the passphrase arrives over HTTP long after services are
13
- * built. `getKEK` is what a Kysely classification resolver calls per operation,
14
- * and it throws rather than returning a falsy key — silently writing plaintext
15
- * into a column the manifest calls `wrapped` would look like a working app
16
- * while the data sat exposed.
17
- */
18
- export class DataLock {
19
- vault;
20
- keks = new Map();
21
- records = [];
22
- initialized = false;
23
- failures = 0;
24
- lockedOutUntil = 0;
25
- now;
26
- constructor(vault, options = {}) {
27
- this.vault = vault;
28
- this.now = options.now ?? Date.now;
29
- }
30
- get state() {
31
- if (!this.records.length) {
32
- return 'uninitialized';
33
- }
34
- return this.keks.size ? 'unlocked' : 'locked';
35
- }
36
- /**
37
- * How long before another guess will be looked at, or 0.
38
- *
39
- * Exposed so an unlock screen can show the wait instead of discovering it by
40
- * guessing again — a guess made during a lockout is itself a failure, and
41
- * extends the window it was trying to wait out.
42
- */
43
- get retryAfterMs() {
44
- return Math.max(0, this.lockedOutUntil - this.now());
45
- }
46
- /** Read what the store already has, so `state` can answer. */
47
- async init() {
48
- this.records = await this.vault.read();
49
- this.initialized = true;
50
- return this.state;
51
- }
52
- /**
53
- * First run: mint a salt and verifier per key and leave the store open, since
54
- * whoever chose the passphrase a moment ago does not need to retype it.
55
- */
56
- async initialize(passphrase, keyIds = [DEFAULT_KEY_ID]) {
57
- this.assertInitialized();
58
- if (this.records.length) {
59
- throw new Error('This store is already initialized. Re-initializing would seal it under a new key while every existing row stayed sealed under the old one.');
60
- }
61
- const records = [];
62
- for (const keyId of keyIds) {
63
- const salt = generateKEKSalt();
64
- const kek = await deriveKEK(passphrase, salt);
65
- records.push({
66
- keyId,
67
- keyVersion: 1,
68
- salt,
69
- verifier: await wrapDEK(kek, await generateDEK()),
70
- });
71
- this.keks.set(keyId, kek);
72
- }
73
- await this.vault.write(records);
74
- this.records = records;
75
- }
76
- async unlock(passphrase) {
77
- this.assertInitialized();
78
- if (this.now() < this.lockedOutUntil) {
79
- // A correct passphrase waits too. Exempting it would hand an attacker the
80
- // oracle the throttle exists to deny: a guess that behaves differently is
81
- // a guess that has been confirmed.
82
- throw new TooManyAttemptsError();
83
- }
84
- const opened = new Map();
85
- for (const record of this.records) {
86
- const kek = await deriveKEK(passphrase, record.salt);
87
- try {
88
- await unwrapDEK(kek, record.verifier);
89
- }
90
- catch {
91
- this.recordFailure();
92
- // Which record failed says which key the passphrase was not for, so the
93
- // whole attempt fails as one rather than naming it.
94
- throw new InvalidPassphraseError();
95
- }
96
- opened.set(record.keyId, kek);
97
- }
98
- this.failures = 0;
99
- this.lockedOutUntil = 0;
100
- this.keks = opened;
101
- }
102
- lock() {
103
- this.keks.clear();
104
- }
105
- async getKEK(keyId) {
106
- // A keyId nobody initialized is a configuration error, and saying "locked"
107
- // about it sends whoever reads that log hunting for a passphrase to a
108
- // store that is already open. `DataLockedError` means only the lock state.
109
- this.assertKnownKeyId(keyId);
110
- const kek = this.keks.get(keyId);
111
- if (!kek) {
112
- throw new DataLockedError();
113
- }
114
- return kek;
115
- }
116
- /**
117
- * The version to stamp into a value written under `keyId`.
118
- *
119
- * Separate from `getKEK` because only a write has to ask: a stored value
120
- * carries the version it was sealed under, so a read already knows. Readable
121
- * while locked, since a version number is not key material.
122
- */
123
- getKeyVersion(keyId) {
124
- this.assertKnownKeyId(keyId);
125
- return this.records.find((record) => record.keyId === keyId).keyVersion;
126
- }
127
- assertKnownKeyId(keyId) {
128
- if (!this.records.some((record) => record.keyId === keyId)) {
129
- throw new Error(`No lock record for key "${keyId}" — every keyId a column names has to be passed to initialize(). Derive the list from the classification manifest with keyIdsFromManifest() so the two cannot drift.`);
130
- }
131
- }
132
- recordFailure() {
133
- this.failures += 1;
134
- if (this.failures < MAX_ATTEMPTS) {
135
- return;
136
- }
137
- const escalation = this.failures - MAX_ATTEMPTS;
138
- this.lockedOutUntil =
139
- this.now() + Math.min(LOCKOUT_MS * 2 ** escalation, MAX_LOCKOUT_MS);
140
- }
141
- assertInitialized() {
142
- if (!this.initialized) {
143
- throw new Error('DataLock.init() must run before the store is used');
144
- }
145
- }
146
- }
@@ -1,32 +0,0 @@
1
- import type { HashedValue, SealedValue, WrappedValue } from './data-classification.js';
2
- /**
3
- * SHA-256 of a credential, lowercase hex — the sole producer of `HashedValue`.
4
- *
5
- * Deliberately unpeppered. These are high-entropy random bearer tokens, not
6
- * passwords: there is no candidate set to search, so a pepper would add a key
7
- * to manage and a rotation story to own while buying nothing. A column holding
8
- * a *low*-entropy secret is not a `hashed` column — it wants a password KDF and
9
- * a different type entirely.
10
- *
11
- * Async because it runs on WebCrypto rather than `node:crypto`, so the same
12
- * code path works in a Worker. Callers that hash a bearer token on every
13
- * request are already async.
14
- */
15
- export declare const hashToken: (raw: string) => Promise<HashedValue>;
16
- /**
17
- * Assert that a string already in storage is ciphertext of the given form.
18
- *
19
- * The brands exist so that new writes must come from a real encrypt/hash call,
20
- * but three paths legitimately hold such a value as a bare `string`: a
21
- * migration backfilling rows written before the column declared its form, a
22
- * test fixture, and a value arriving over the wire from a service that sealed
23
- * it elsewhere. Each of those is a promise the caller is making, not something
24
- * the type system can check — which is why these are named to be greppable and
25
- * why there is no non-`unsafe` spelling. If one of these appears in ordinary
26
- * request-handling code, that is the bug.
27
- */
28
- export declare const unsafeAsWrapped: (stored: string) => WrappedValue;
29
- /** See `unsafeAsWrapped`. */
30
- export declare const unsafeAsSealed: (stored: string) => SealedValue;
31
- /** See `unsafeAsWrapped`. */
32
- export declare const unsafeAsHashed: (stored: string) => HashedValue;
@@ -1,42 +0,0 @@
1
- /**
2
- * SHA-256 of a credential, lowercase hex — the sole producer of `HashedValue`.
3
- *
4
- * Deliberately unpeppered. These are high-entropy random bearer tokens, not
5
- * passwords: there is no candidate set to search, so a pepper would add a key
6
- * to manage and a rotation story to own while buying nothing. A column holding
7
- * a *low*-entropy secret is not a `hashed` column — it wants a password KDF and
8
- * a different type entirely.
9
- *
10
- * Async because it runs on WebCrypto rather than `node:crypto`, so the same
11
- * code path works in a Worker. Callers that hash a bearer token on every
12
- * request are already async.
13
- */
14
- export const hashToken = async (raw) => {
15
- const subtle = globalThis.crypto?.subtle;
16
- if (!subtle) {
17
- throw new Error('WebCrypto not available');
18
- }
19
- const digest = await subtle.digest('SHA-256', new TextEncoder().encode(raw));
20
- let hex = '';
21
- for (const byte of new Uint8Array(digest)) {
22
- hex += byte.toString(16).padStart(2, '0');
23
- }
24
- return hex;
25
- };
26
- /**
27
- * Assert that a string already in storage is ciphertext of the given form.
28
- *
29
- * The brands exist so that new writes must come from a real encrypt/hash call,
30
- * but three paths legitimately hold such a value as a bare `string`: a
31
- * migration backfilling rows written before the column declared its form, a
32
- * test fixture, and a value arriving over the wire from a service that sealed
33
- * it elsewhere. Each of those is a promise the caller is making, not something
34
- * the type system can check — which is why these are named to be greppable and
35
- * why there is no non-`unsafe` spelling. If one of these appears in ordinary
36
- * request-handling code, that is the bug.
37
- */
38
- export const unsafeAsWrapped = (stored) => stored;
39
- /** See `unsafeAsWrapped`. */
40
- export const unsafeAsSealed = (stored) => stored;
41
- /** See `unsafeAsWrapped`. */
42
- export const unsafeAsHashed = (stored) => stored;
@@ -1,64 +0,0 @@
1
- export type Private<T> = T & {
2
- readonly __classification__?: 'private';
3
- };
4
- export type Pii<T> = T & {
5
- readonly __classification__?: 'pii';
6
- };
7
- export type Secret<T> = T & {
8
- readonly __classification__?: 'secret';
9
- };
10
- export type Classification = 'public' | 'private' | 'pii' | 'secret';
11
- export type AnonymizeStrategy = 'fake:email' | 'fake:name' | 'hash' | 'keep' | null;
12
- /**
13
- * How a column's bytes are represented at rest, as distinct from how sensitive
14
- * the value is (`Classification`). The two are independent: a token hash is
15
- * `secret` + `hashed` and must never be encrypted, because the hash *is* the
16
- * lookup key; a live bearer token is `secret` + `plain` today and should not be.
17
- *
18
- * `wrapped` and `sealed` are siblings rather than one being "encrypted": both
19
- * are ciphertext, and what separates them is who can read it back. Wrapped is
20
- * symmetric and the application holds the key. Sealed is asymmetric and the
21
- * application holds only the public half, so it can write the value and never
22
- * read it. Storing one where the other is expected is silent, permanent data
23
- * loss, which is why they are not collapsed into a single `encrypted`.
24
- */
25
- export type ColumnForm = 'plain' | 'hashed' | 'wrapped' | 'sealed';
26
- declare const wrappedBrand: unique symbol;
27
- declare const sealedBrand: unique symbol;
28
- declare const hashedBrand: unique symbol;
29
- /**
30
- * Ciphertext under a symmetric key the application holds — the output of
31
- * `envelopeEncrypt`, `wrapDEK` or `envelopeRewrap`.
32
- *
33
- * Unlike `Secret<T>` the brand is REQUIRED, so a plain `string` is not
34
- * assignable and a column declared `form: 'wrapped'` cannot be written with
35
- * anything but genuine ciphertext. It stays assignable *to* `string`, so it
36
- * still works as a query operand and serializes normally — the constraint is on
37
- * construction, not on use.
38
- */
39
- export type WrappedValue = string & {
40
- readonly [wrappedBrand]: true;
41
- };
42
- /** Ciphertext under a public key whose private half the application does not
43
- * hold. Deliberately not assignable to `WrappedValue`: writing one where the
44
- * other belongs produces a row nobody can ever open. */
45
- export type SealedValue = string & {
46
- readonly [sealedBrand]: true;
47
- };
48
- /** A one-way digest of a secret input. The brand's job is narrow — stop a *raw*
49
- * credential being written into the column that should hold its hash. */
50
- export type HashedValue = string & {
51
- readonly [hashedBrand]: true;
52
- };
53
- export interface ColumnClassification {
54
- classification: Classification;
55
- anonymize_strategy: AnonymizeStrategy;
56
- /** At-rest representation. Absent means `plain`. */
57
- form?: ColumnForm;
58
- description?: string;
59
- }
60
- export type ClassificationManifest = {
61
- version: 1;
62
- tables: Record<string, Record<string, ColumnClassification>>;
63
- };
64
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,12 +0,0 @@
1
- export { gradeRun } from '../wirings/agent-scorer/agent-scorer-grade.js';
2
- export { addAgentScorer } from '../wirings/agent-scorer/agent-scorer-registry.js';
3
- export { enableScoreSnapshots, getScoreSnapshot, } from '../wirings/agent-scorer/agent-scorer-snapshots.js';
4
- export { wireAgentScorerQueueWorkers } from '../wirings/agent-scorer/agent-scorer-worker.js';
5
- export { pikkuAgentJudge, pikkuAgentScorer, } from '../wirings/agent-scorer/agent-scorer.js';
6
- export type { AgentRunScore, ScorerMeta, } from '../wirings/agent-scorer/agent-scorer.types.js';
7
- /**
8
- * Types the exports above mention but do not themselves export. Without
9
- * them a consumer's declaration emit has no name for the type it infers,
10
- * and fails with TS2883 rather than reaching for the original entry point.
11
- */
12
- export type { PikkuAgentScorer, ScoreJob, ScorerInput, ScorerOutput, } from '../wirings/agent-scorer/agent-scorer.types.js';
@@ -1,5 +0,0 @@
1
- export { gradeRun } from '../wirings/agent-scorer/agent-scorer-grade.js';
2
- export { addAgentScorer } from '../wirings/agent-scorer/agent-scorer-registry.js';
3
- export { enableScoreSnapshots, getScoreSnapshot, } from '../wirings/agent-scorer/agent-scorer-snapshots.js';
4
- export { wireAgentScorerQueueWorkers } from '../wirings/agent-scorer/agent-scorer-worker.js';
5
- export { pikkuAgentJudge, pikkuAgentScorer, } from '../wirings/agent-scorer/agent-scorer.js';
@@ -1,21 +0,0 @@
1
- export type { AgentRunStateService, CreateRunInput, SaveScoreInput, } from '../services/agent-run-state-service.js';
2
- export type { AgentRunnerParams, AgentRunnerService, AgentStepResult, } from '../services/agent-runner-service.js';
3
- export type { AgentStorageService } from '../services/agent-storage-service.js';
4
- export { agent, agentApprove, agentResume, agentStream, } from '../wirings/agent/agent-helpers.js';
5
- export { resolveModelAlias } from '../wirings/agent/agent-model-config.js';
6
- export { canAccessThread, isOwnedByPrincipal, threadOwnerConstraint, } from '../wirings/agent/agent-prepare.js';
7
- export { addAgent } from '../wirings/agent/agent-registry.js';
8
- export type { AgentInput, AgentMemoryConfig, AgentMessage, AgentsMeta, AgentStep, AgentContentPart, AgentRunRow, AgentRunService, AgentRunState, AgentStreamChannel, AgentThread, CoreAgent, PendingApproval, PikkuAgentMiddlewareHooks, } from '../wirings/agent/agent.types.js';
9
- export { voiceInput } from '../wirings/agent/voice-input.js';
10
- export { voiceOutput } from '../wirings/agent/voice-output.js';
11
- /**
12
- * Types the exports above mention but do not themselves export. Without
13
- * them a consumer's declaration emit has no name for the type it infers,
14
- * and fails with TS2883 rather than reaching for the original entry point.
15
- */
16
- export type { LogLevel } from '../services/logger.js';
17
- export type { WebhookServiceConfig } from '../services/webhook-service.js';
18
- export type { CoreSingletonServices, PostgresConfig, } from '../types/core.types.js';
19
- export type { SpeakableScripts } from '../wirings/agent/voice-output.js';
20
- export type { WorkflowServiceConfig } from '../wirings/workflow/workflow.types.js';
21
- export type { VoiceOutputState } from '../wirings/agent/voice-output.js';
@@ -1,6 +0,0 @@
1
- export { agent, agentApprove, agentResume, agentStream, } from '../wirings/agent/agent-helpers.js';
2
- export { resolveModelAlias } from '../wirings/agent/agent-model-config.js';
3
- export { canAccessThread, isOwnedByPrincipal, threadOwnerConstraint, } from '../wirings/agent/agent-prepare.js';
4
- export { addAgent } from '../wirings/agent/agent-registry.js';
5
- export { voiceInput } from '../wirings/agent/voice-input.js';
6
- export { voiceOutput } from '../wirings/agent/voice-output.js';
@@ -1,3 +0,0 @@
1
- export { PikkuLocalChannelHandler } from '../../wirings/channel/local/local-channel-handler.js';
2
- export { runLocalChannel } from '../../wirings/channel/local/local-channel-runner.js';
3
- export { LocalEventHubService } from '../../wirings/channel/local/local-eventhub-service.js';
@@ -1,3 +0,0 @@
1
- export { PikkuLocalChannelHandler } from '../../wirings/channel/local/local-channel-handler.js';
2
- export { runLocalChannel } from '../../wirings/channel/local/local-channel-runner.js';
3
- export { LocalEventHubService } from '../../wirings/channel/local/local-eventhub-service.js';
@@ -1,9 +0,0 @@
1
- export { runChannelConnect, runChannelDisconnect, runChannelMessage, } from '../../wirings/channel/serverless/serverless-channel-runner.js';
2
- export type { RunServerlessChannelParams } from '../../wirings/channel/serverless/serverless-channel-runner.js';
3
- /**
4
- * Types the exports above mention but do not themselves export. Without
5
- * them a consumer's declaration emit has no name for the type it infers,
6
- * and fails with TS2883 rather than reaching for the original entry point.
7
- */
8
- export type { ChannelStore } from '../../wirings/channel/channel-store.js';
9
- export type { PikkuChannelHandlerFactory } from '../../wirings/channel/channel.types.js';
@@ -1 +0,0 @@
1
- export { runChannelConnect, runChannelDisconnect, runChannelMessage, } from '../../wirings/channel/serverless/serverless-channel-runner.js';
@@ -1,15 +0,0 @@
1
- export { addChannelMiddleware } from '../wirings/channel/channel-middleware-runner.js';
2
- export type { Capabilities } from '../wirings/channel/channel-rpc.types.js';
3
- export { ChannelStore } from '../wirings/channel/channel-store.js';
4
- export type { Channel } from '../wirings/channel/channel-store.js';
5
- export type { BinaryData, ChannelMessageMeta, ChannelMeta, ChannelsMeta, CoreChannel, CorePikkuChannelMiddleware, CorePikkuChannelMiddlewareFactory, PikkuChannelHandlerFactory, } from '../wirings/channel/channel.types.js';
6
- export type { EventHubService } from '../wirings/channel/eventhub-service.js';
7
- export { EventHubStore } from '../wirings/channel/eventhub-store.js';
8
- export { logChannels } from '../wirings/channel/log-channels.js';
9
- export { PikkuAbstractChannelHandler } from '../wirings/channel/pikku-abstract-channel-handler.js';
10
- /**
11
- * Types the exports above mention but do not themselves export. Without
12
- * them a consumer's declaration emit has no name for the type it infers,
13
- * and fails with TS2883 rather than reaching for the original entry point.
14
- */
15
- export type { Logger } from '../services/logger.js';
@@ -1,5 +0,0 @@
1
- export { addChannelMiddleware } from '../wirings/channel/channel-middleware-runner.js';
2
- export { ChannelStore } from '../wirings/channel/channel-store.js';
3
- export { EventHubStore } from '../wirings/channel/eventhub-store.js';
4
- export { logChannels } from '../wirings/channel/log-channels.js';
5
- export { PikkuAbstractChannelHandler } from '../wirings/channel/pikku-abstract-channel-handler.js';
@@ -1,16 +0,0 @@
1
- export { handleRawCLI } from '../../wirings/cli/channel/cli-raw-channel-runner.js';
2
- export type { RawCLIFrame } from '../../wirings/cli/channel/cli-raw-channel-runner.js';
3
- export { executeRawCLIViaChannel } from '../../wirings/cli/channel/cli-raw-client-runner.js';
4
- export type { CorePikkuCLIClientRender } from '../../wirings/cli/channel/cli-raw-client-runner.js';
5
- /**
6
- * Types the exports above mention but do not themselves export. Without
7
- * them a consumer's declaration emit has no name for the type it infers,
8
- * and fails with TS2883 rather than reaching for the original entry point.
9
- */
10
- export type { LogLevel } from '../../services/logger.js';
11
- export type { WebhookServiceConfig } from '../../services/webhook-service.js';
12
- export type { CoreSingletonServices, CoreUserSession, CreateWireServices, PostgresConfig, } from '../../types/core.types.js';
13
- export type { ApprovalRequester, Capabilities, } from '../../wirings/channel/channel-rpc.types.js';
14
- export type { PikkuChannel } from '../../wirings/channel/channel.types.js';
15
- export type { RawCLIResult } from '../../wirings/cli/channel/cli-raw-channel-runner.js';
16
- export type { WorkflowServiceConfig } from '../../wirings/workflow/workflow.types.js';
@@ -1,2 +0,0 @@
1
- export { handleRawCLI } from '../../wirings/cli/channel/cli-raw-channel-runner.js';
2
- export { executeRawCLIViaChannel } from '../../wirings/cli/channel/cli-raw-client-runner.js';
@@ -1,9 +0,0 @@
1
- export { CLIError, executeCLI, pikkuCLIRender, } from '../wirings/cli/cli-runner.js';
2
- export type { CLICommandMeta, CLIMeta, CLIProgramMeta, CoreCLI, CoreCLICommandConfig, CorePikkuCLIRender, } from '../wirings/cli/cli.types.js';
3
- export { generateCommandHelp } from '../wirings/cli/command-parser.js';
4
- /**
5
- * Types the exports above mention but do not themselves export. Without
6
- * them a consumer's declaration emit has no name for the type it infers,
7
- * and fails with TS2883 rather than reaching for the original entry point.
8
- */
9
- export type { CreateConfig, CreateSingletonServices, CreateWireServices, } from '../types/core.types.js';
@@ -1,2 +0,0 @@
1
- export { CLIError, executeCLI, pikkuCLIRender, } from '../wirings/cli/cli-runner.js';
2
- export { generateCommandHelp } from '../wirings/cli/command-parser.js';
@@ -1,10 +0,0 @@
1
- export type { CredentialService } from '../services/credential-service.js';
2
- export type { CredentialDefinitions } from '../wirings/credential/credential.types.js';
3
- export { validateAndBuildCredentialDefinitionsMeta } from '../wirings/credential/validate-credential-definitions.js';
4
- /**
5
- * Types the exports above mention but do not themselves export. Without
6
- * them a consumer's declaration emit has no name for the type it infers,
7
- * and fails with TS2883 rather than reaching for the original entry point.
8
- */
9
- export type { SchemaRefLike } from '../types/core.types.js';
10
- export type { CredentialDefinitionsMeta } from '../wirings/credential/credential.types.js';
@@ -1 +0,0 @@
1
- export { validateAndBuildCredentialDefinitionsMeta } from '../wirings/credential/validate-credential-definitions.js';
@@ -1,8 +0,0 @@
1
- export { deriveKEK, envelopeDecrypt, envelopeEncrypt, envelopeRewrap, generateKEKSalt, } from '../crypto-utils.js';
2
- export type { EnvelopeEncryptResult } from '../crypto-utils.js';
3
- /**
4
- * Types the exports above mention but do not themselves export. Without
5
- * them a consumer's declaration emit has no name for the type it infers,
6
- * and fails with TS2883 rather than reaching for the original entry point.
7
- */
8
- export type { WrappedValue } from '../data-classification.js';
@@ -1 +0,0 @@
1
- export { deriveKEK, envelopeDecrypt, envelopeEncrypt, envelopeRewrap, generateKEKSalt, } from '../crypto-utils.js';
@@ -1,9 +0,0 @@
1
- export { pikkuDevReloader } from '../dev/hot-reload.js';
2
- export { reconcileAddonRegistry, reloadGeneratedMeta, } from '../dev/reload-meta.js';
3
- /**
4
- * Types the exports above mention but do not themselves export. Without
5
- * them a consumer's declaration emit has no name for the type it infers,
6
- * and fails with TS2883 rather than reaching for the original entry point.
7
- */
8
- export type { ReloadGeneratedMetaOptions } from '../dev/reload-meta.js';
9
- export type { Logger } from '../services/logger.js';
@@ -1,2 +0,0 @@
1
- export { pikkuDevReloader } from '../dev/hot-reload.js';
2
- export { reconcileAddonRegistry, reloadGeneratedMeta, } from '../dev/reload-meta.js';
@@ -1,8 +0,0 @@
1
- export * from '../errors/errors.js';
2
- export { PikkuError, addError } from '../errors/error-handler.js';
3
- /**
4
- * Types the exports above mention but do not themselves export. Without
5
- * them a consumer's declaration emit has no name for the type it infers,
6
- * and fails with TS2883 rather than reaching for the original entry point.
7
- */
8
- export type { ErrorDetails } from '../errors/error-handler.js';
@@ -1,2 +0,0 @@
1
- export * from '../errors/errors.js';
2
- export { PikkuError, addError } from '../errors/error-handler.js';
@@ -1,13 +0,0 @@
1
- export { addFunction, getAllFunctionNames, } from '../function/function-runner.js';
2
- export { pikkuAuth } from '../function/functions.types.js';
3
- export type { CorePikkuAuth, CorePikkuAuthConfig, CorePikkuFunction, CorePikkuFunctionConfig, CorePikkuFunctionSessionless, CorePikkuPermission, CorePikkuSessionlessFunctionConfig, } from '../function/functions.types.js';
4
- export type { ListInput, ListOutput } from '../function/list.types.js';
5
- /**
6
- * Types the exports above mention but do not themselves export. Without
7
- * them a consumer's declaration emit has no name for the type it infers,
8
- * and fails with TS2883 rather than reaching for the original entry point.
9
- */
10
- export type { LogLevel } from '../services/logger.js';
11
- export type { WebhookServiceConfig } from '../services/webhook-service.js';
12
- export type { CoreSecretlessSingletonServices, CoreSingletonServices, CoreUserSession, PostgresConfig, SecretlessServices, } from '../types/core.types.js';
13
- export type { WorkflowServiceConfig } from '../wirings/workflow/workflow.types.js';
@@ -1,2 +0,0 @@
1
- export { addFunction, getAllFunctionNames, } from '../function/function-runner.js';
2
- export { pikkuAuth } from '../function/functions.types.js';
@@ -1 +0,0 @@
1
- export type { GatewayTransportType, GatewaysMeta, } from '../wirings/gateway/gateway.types.js';
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export { hmacSha256Hex, timingSafeStringEqual } from '../utils/hmac.js';
@@ -1 +0,0 @@
1
- export { hmacSha256Hex, timingSafeStringEqual } from '../utils/hmac.js';
@@ -1,13 +0,0 @@
1
- export { fetch, fetchData, wireHTTP } from '../wirings/http/http-runner.js';
2
- export type { AssertHTTPWiringParams, CoreHTTPFunctionWiring, HTTPMethod, HTTPRouteBaseConfig, HTTPWiringsMeta, PikkuHTTP, PikkuHTTPResponse, PikkuQuery, RunHTTPWiringOptions, } from '../wirings/http/http.types.js';
3
- export { logRoutes } from '../wirings/http/log-http-routes.js';
4
- export { DEFAULT_MAX_BODY_SIZE, PikkuFetchHTTPRequest, } from '../wirings/http/pikku-fetch-http-request.js';
5
- export { PikkuFetchHTTPResponse } from '../wirings/http/pikku-fetch-http-response.js';
6
- export { toWebRequest } from '../wirings/http/web-request.js';
7
- /**
8
- * Types the exports above mention but do not themselves export. Without
9
- * them a consumer's declaration emit has no name for the type it infers,
10
- * and fails with TS2883 rather than reaching for the original entry point.
11
- */
12
- export type { Logger } from '../services/logger.js';
13
- export type { PikkuHTTPRequest } from '../wirings/http/http.types.js';
@@ -1,5 +0,0 @@
1
- export { fetch, fetchData, wireHTTP } from '../wirings/http/http-runner.js';
2
- export { logRoutes } from '../wirings/http/log-http-routes.js';
3
- export { DEFAULT_MAX_BODY_SIZE, PikkuFetchHTTPRequest, } from '../wirings/http/pikku-fetch-http-request.js';
4
- export { PikkuFetchHTTPResponse } from '../wirings/http/pikku-fetch-http-response.js';
5
- export { toWebRequest } from '../wirings/http/web-request.js';
@@ -1,3 +0,0 @@
1
- export { MCPEndpointRegistry } from '../wirings/mcp/mcp-endpoint-registry.js';
2
- export { MCPError, getMCPPromptsMeta, getMCPResourcesMeta, getMCPToolsMeta, runMCPPrompt, runMCPResource, runMCPTool, } from '../wirings/mcp/mcp-runner.js';
3
- export type { AssertMCPResourceURIParams, CoreMCPPrompt, CoreMCPResource, MCPPromptMeta, MCPResourceMeta, MCPToolMeta, MCPToolResponse, PikkuMCP, } from '../wirings/mcp/mcp.types.js';
@@ -1,2 +0,0 @@
1
- export { MCPEndpointRegistry } from '../wirings/mcp/mcp-endpoint-registry.js';
2
- export { MCPError, getMCPPromptsMeta, getMCPResourcesMeta, getMCPToolsMeta, runMCPPrompt, runMCPResource, runMCPTool, } from '../wirings/mcp/mcp-runner.js';