@plumbus/core 0.6.4 → 0.6.5

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 (191) hide show
  1. package/CHANGELOG.md +385 -0
  2. package/README.md +23 -13
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/ai/ai/security.d.ts +36 -0
  5. package/dist/ai/ai-service.d.ts.map +1 -1
  6. package/dist/ai/ai-service.js +36 -8
  7. package/dist/ai/ai-service.js.map +1 -1
  8. package/dist/ai/index.d.ts +1 -1
  9. package/dist/ai/index.d.ts.map +1 -1
  10. package/dist/ai/index.js +1 -1
  11. package/dist/ai/index.js.map +1 -1
  12. package/dist/ai/security.d.ts +9 -0
  13. package/dist/ai/security.d.ts.map +1 -1
  14. package/dist/ai/security.js +18 -1
  15. package/dist/ai/security.js.map +1 -1
  16. package/dist/ai/types/config.d.ts +11 -0
  17. package/dist/ai/types/entity.d.ts +15 -0
  18. package/dist/ai/types/fields.d.ts +51 -0
  19. package/dist/api/index.d.ts +2 -2
  20. package/dist/api/index.d.ts.map +1 -1
  21. package/dist/api/index.js +1 -1
  22. package/dist/api/index.js.map +1 -1
  23. package/dist/api/route-generator.d.ts +17 -0
  24. package/dist/api/route-generator.d.ts.map +1 -1
  25. package/dist/api/route-generator.js +55 -2
  26. package/dist/api/route-generator.js.map +1 -1
  27. package/dist/cli/commands/api.d.ts +9 -0
  28. package/dist/cli/commands/api.d.ts.map +1 -1
  29. package/dist/cli/commands/api.js +10 -1
  30. package/dist/cli/commands/api.js.map +1 -1
  31. package/dist/cli/commands/init.js +1 -1
  32. package/dist/cli/mcp-serve-context.d.ts.map +1 -1
  33. package/dist/cli/mcp-serve-context.js +40 -35
  34. package/dist/cli/mcp-serve-context.js.map +1 -1
  35. package/dist/cli/templates/resources.d.ts.map +1 -1
  36. package/dist/cli/templates/resources.js +5 -6
  37. package/dist/cli/templates/resources.js.map +1 -1
  38. package/dist/config/loader.d.ts.map +1 -1
  39. package/dist/config/loader.js +37 -0
  40. package/dist/config/loader.js.map +1 -1
  41. package/dist/data/field-encryption.d.ts +17 -0
  42. package/dist/data/field-encryption.d.ts.map +1 -0
  43. package/dist/data/field-encryption.js +80 -0
  44. package/dist/data/field-encryption.js.map +1 -0
  45. package/dist/data/index.d.ts +2 -0
  46. package/dist/data/index.d.ts.map +1 -1
  47. package/dist/data/index.js +2 -0
  48. package/dist/data/index.js.map +1 -1
  49. package/dist/data/mask-fields.d.ts +17 -0
  50. package/dist/data/mask-fields.d.ts.map +1 -0
  51. package/dist/data/mask-fields.js +56 -0
  52. package/dist/data/mask-fields.js.map +1 -0
  53. package/dist/data/registry.d.ts +4 -0
  54. package/dist/data/registry.d.ts.map +1 -1
  55. package/dist/data/registry.js +6 -0
  56. package/dist/data/registry.js.map +1 -1
  57. package/dist/data/repository.d.ts +3 -0
  58. package/dist/data/repository.d.ts.map +1 -1
  59. package/dist/data/repository.js +123 -41
  60. package/dist/data/repository.js.map +1 -1
  61. package/dist/define/defineCapability.d.ts +2 -0
  62. package/dist/define/defineCapability.d.ts.map +1 -1
  63. package/dist/define/defineCapability.js.map +1 -1
  64. package/dist/errors/data-errors.d.ts +23 -0
  65. package/dist/errors/data-errors.d.ts.map +1 -0
  66. package/dist/errors/data-errors.js +45 -0
  67. package/dist/errors/data-errors.js.map +1 -0
  68. package/dist/errors/index.d.ts +3 -11
  69. package/dist/errors/index.d.ts.map +1 -1
  70. package/dist/errors/index.js +3 -16
  71. package/dist/errors/index.js.map +1 -1
  72. package/dist/errors/plumbus-error.d.ts +13 -0
  73. package/dist/errors/plumbus-error.d.ts.map +1 -0
  74. package/dist/errors/plumbus-error.js +15 -0
  75. package/dist/errors/plumbus-error.js.map +1 -0
  76. package/dist/execution/capability-executor.d.ts.map +1 -1
  77. package/dist/execution/capability-executor.js +142 -61
  78. package/dist/execution/capability-executor.js.map +1 -1
  79. package/dist/execution/capability-invocation.d.ts +3 -1
  80. package/dist/execution/capability-invocation.d.ts.map +1 -1
  81. package/dist/execution/capability-invocation.js +41 -2
  82. package/dist/execution/capability-invocation.js.map +1 -1
  83. package/dist/execution/context-deps.d.ts +23 -0
  84. package/dist/execution/context-deps.d.ts.map +1 -0
  85. package/dist/execution/context-deps.js +45 -0
  86. package/dist/execution/context-deps.js.map +1 -0
  87. package/dist/execution/context-factory.d.ts.map +1 -1
  88. package/dist/execution/context-factory.js +9 -1
  89. package/dist/execution/context-factory.js.map +1 -1
  90. package/dist/execution/deferred-flow-service.d.ts +9 -0
  91. package/dist/execution/deferred-flow-service.d.ts.map +1 -0
  92. package/dist/execution/deferred-flow-service.js +54 -0
  93. package/dist/execution/deferred-flow-service.js.map +1 -0
  94. package/dist/execution/index.d.ts +4 -0
  95. package/dist/execution/index.d.ts.map +1 -1
  96. package/dist/execution/index.js +2 -0
  97. package/dist/execution/index.js.map +1 -1
  98. package/dist/execution/transactional-outbox.d.ts +33 -0
  99. package/dist/execution/transactional-outbox.d.ts.map +1 -0
  100. package/dist/execution/transactional-outbox.js +84 -0
  101. package/dist/execution/transactional-outbox.js.map +1 -0
  102. package/dist/flows/engine.d.ts +1 -0
  103. package/dist/flows/engine.d.ts.map +1 -1
  104. package/dist/flows/engine.js +1 -1
  105. package/dist/flows/engine.js.map +1 -1
  106. package/dist/flows/flow-service.d.ts.map +1 -1
  107. package/dist/flows/flow-service.js +2 -2
  108. package/dist/flows/flow-service.js.map +1 -1
  109. package/dist/governance/index.d.ts +1 -1
  110. package/dist/governance/index.d.ts.map +1 -1
  111. package/dist/governance/index.js +1 -1
  112. package/dist/governance/index.js.map +1 -1
  113. package/dist/index.d.ts +10 -10
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +8 -8
  116. package/dist/index.js.map +1 -1
  117. package/dist/jobs/deferred-job-dispatch-service.d.ts +7 -0
  118. package/dist/jobs/deferred-job-dispatch-service.d.ts.map +1 -0
  119. package/dist/jobs/deferred-job-dispatch-service.js +16 -0
  120. package/dist/jobs/deferred-job-dispatch-service.js.map +1 -0
  121. package/dist/jobs/dispatch.d.ts.map +1 -1
  122. package/dist/jobs/dispatch.js +8 -2
  123. package/dist/jobs/dispatch.js.map +1 -1
  124. package/dist/jobs/index.d.ts +3 -0
  125. package/dist/jobs/index.d.ts.map +1 -1
  126. package/dist/jobs/index.js +2 -0
  127. package/dist/jobs/index.js.map +1 -1
  128. package/dist/jobs/job-dispatch-service.d.ts +24 -0
  129. package/dist/jobs/job-dispatch-service.d.ts.map +1 -0
  130. package/dist/jobs/job-dispatch-service.js +26 -0
  131. package/dist/jobs/job-dispatch-service.js.map +1 -0
  132. package/dist/observability/index.d.ts +1 -1
  133. package/dist/observability/index.d.ts.map +1 -1
  134. package/dist/observability/index.js +1 -1
  135. package/dist/observability/index.js.map +1 -1
  136. package/dist/observability/metrics.d.ts +4 -0
  137. package/dist/observability/metrics.d.ts.map +1 -1
  138. package/dist/observability/metrics.js +19 -1
  139. package/dist/observability/metrics.js.map +1 -1
  140. package/dist/runtime/bootstrap.d.ts +2 -0
  141. package/dist/runtime/bootstrap.d.ts.map +1 -1
  142. package/dist/runtime/bootstrap.js +3 -1
  143. package/dist/runtime/bootstrap.js.map +1 -1
  144. package/dist/runtime/register-consumers.d.ts.map +1 -1
  145. package/dist/runtime/register-consumers.js +12 -16
  146. package/dist/runtime/register-consumers.js.map +1 -1
  147. package/dist/runtime/start-worker-pool.d.ts.map +1 -1
  148. package/dist/runtime/start-worker-pool.js +5 -1
  149. package/dist/runtime/start-worker-pool.js.map +1 -1
  150. package/dist/runtime/startup-warnings.d.ts +8 -0
  151. package/dist/runtime/startup-warnings.d.ts.map +1 -0
  152. package/dist/runtime/startup-warnings.js +26 -0
  153. package/dist/runtime/startup-warnings.js.map +1 -0
  154. package/dist/server/bootstrap.d.ts +1 -1
  155. package/dist/server/bootstrap.d.ts.map +1 -1
  156. package/dist/server/bootstrap.js +49 -23
  157. package/dist/server/bootstrap.js.map +1 -1
  158. package/dist/testing/e2e.d.ts.map +1 -1
  159. package/dist/testing/e2e.js +4 -1
  160. package/dist/testing/e2e.js.map +1 -1
  161. package/dist/translations/index.d.ts +2 -0
  162. package/dist/translations/index.d.ts.map +1 -1
  163. package/dist/translations/index.js +10 -0
  164. package/dist/translations/index.js.map +1 -1
  165. package/dist/types/capability.d.ts +5 -0
  166. package/dist/types/capability.d.ts.map +1 -1
  167. package/dist/types/config.d.ts +11 -0
  168. package/dist/types/config.d.ts.map +1 -1
  169. package/dist/types/context.d.ts +37 -1
  170. package/dist/types/context.d.ts.map +1 -1
  171. package/dist/worker/bootstrap.d.ts.map +1 -1
  172. package/dist/worker/bootstrap.js +25 -37
  173. package/dist/worker/bootstrap.js.map +1 -1
  174. package/dist/worker/index.d.ts +1 -1
  175. package/dist/worker/index.d.ts.map +1 -1
  176. package/dist/worker/index.js +1 -1
  177. package/dist/worker/index.js.map +1 -1
  178. package/instructions/README.md +38 -0
  179. package/instructions/ai.md +68 -20
  180. package/instructions/api.md +2 -0
  181. package/instructions/capabilities.md +19 -1
  182. package/instructions/cli.md +68 -2
  183. package/instructions/events.md +2 -0
  184. package/instructions/framework.md +5 -1
  185. package/instructions/governance.md +2 -0
  186. package/instructions/patterns.md +1 -1
  187. package/instructions/peer-dependencies.md +17 -5
  188. package/instructions/prompts.md +84 -0
  189. package/instructions/security.md +27 -15
  190. package/instructions/testing.md +45 -32
  191. package/package.json +5 -4
@@ -0,0 +1,80 @@
1
+ import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto';
2
+ import { EncryptionConfigError, EncryptionPayloadError } from '../errors/data-errors.js';
3
+ export const ENCRYPTION_PREFIX = 'plumbus:enc:v1:';
4
+ const IV_LENGTH = 12;
5
+ const AUTH_TAG_LENGTH = 16;
6
+ /**
7
+ * Resolve a 32-byte AES-256 key from `PLUMBUS_ENCRYPTION_KEY`.
8
+ * Accepts 64-char hex or base64/base64url encoding.
9
+ */
10
+ export function resolveEncryptionKey(env = process.env) {
11
+ const raw = env.PLUMBUS_ENCRYPTION_KEY?.trim();
12
+ if (!raw)
13
+ return undefined;
14
+ if (/^[0-9a-fA-F]{64}$/.test(raw)) {
15
+ return Buffer.from(raw, 'hex');
16
+ }
17
+ try {
18
+ const key = Buffer.from(raw, 'base64url');
19
+ if (key.length === 32)
20
+ return key;
21
+ }
22
+ catch {
23
+ // fall through
24
+ }
25
+ try {
26
+ const key = Buffer.from(raw, 'base64');
27
+ if (key.length === 32)
28
+ return key;
29
+ }
30
+ catch {
31
+ // fall through
32
+ }
33
+ throw new EncryptionConfigError('PLUMBUS_ENCRYPTION_KEY must be 32 bytes encoded as 64-char hex or base64/base64url');
34
+ }
35
+ export function isEncryptedValue(value) {
36
+ return typeof value === 'string' && value.startsWith(ENCRYPTION_PREFIX);
37
+ }
38
+ /** Encrypt a string field value. Returns ciphertext prefixed with `plumbus:enc:v1:`. */
39
+ export function encryptFieldValue(plaintext, key) {
40
+ const iv = randomBytes(IV_LENGTH);
41
+ const cipher = createCipheriv('aes-256-gcm', key, iv);
42
+ const ciphertext = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);
43
+ const authTag = cipher.getAuthTag();
44
+ const payload = Buffer.concat([iv, authTag, ciphertext]).toString('base64url');
45
+ return `${ENCRYPTION_PREFIX}${payload}`;
46
+ }
47
+ /**
48
+ * Decrypt a stored field value. Plaintext values (no prefix) pass through unchanged.
49
+ */
50
+ export function decryptFieldValue(value, key) {
51
+ if (!isEncryptedValue(value)) {
52
+ return value;
53
+ }
54
+ const payload = Buffer.from(value.slice(ENCRYPTION_PREFIX.length), 'base64url');
55
+ if (payload.length < IV_LENGTH + AUTH_TAG_LENGTH) {
56
+ throw new EncryptionPayloadError('Invalid encrypted field payload');
57
+ }
58
+ const iv = payload.subarray(0, IV_LENGTH);
59
+ const authTag = payload.subarray(IV_LENGTH, IV_LENGTH + AUTH_TAG_LENGTH);
60
+ const ciphertext = payload.subarray(IV_LENGTH + AUTH_TAG_LENGTH);
61
+ const decipher = createDecipheriv('aes-256-gcm', key, iv);
62
+ decipher.setAuthTag(authTag);
63
+ try {
64
+ return Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('utf8');
65
+ }
66
+ catch {
67
+ throw new EncryptionPayloadError('Failed to decrypt encrypted field value');
68
+ }
69
+ }
70
+ /** Extract string field names marked `encrypted: true` on an entity definition. */
71
+ export function getEncryptedFields(entity) {
72
+ const encrypted = [];
73
+ for (const [name, descriptor] of Object.entries(entity.fields)) {
74
+ if (descriptor.type === 'string' && descriptor.options.encrypted) {
75
+ encrypted.push(name);
76
+ }
77
+ }
78
+ return encrypted;
79
+ }
80
+ //# sourceMappingURL=field-encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-encryption.js","sourceRoot":"","sources":["../../src/data/field-encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGzF,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAEnD,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAA0C,OAAO,CAAC,GAAG;IAErD,MAAM,GAAG,GAAG,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAE3B,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,GAAG,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,GAAG,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IAED,MAAM,IAAI,qBAAqB,CAC7B,oFAAoF,CACrF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AAC1E,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,GAAW;IAC9D,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/E,OAAO,GAAG,iBAAiB,GAAG,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,GAAW;IAC1D,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;IAChF,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,eAAe,EAAE,CAAC;QACjD,MAAM,IAAI,sBAAsB,CAAC,iCAAiC,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC1D,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,sBAAsB,CAAC,yCAAyC,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,kBAAkB,CAAC,MAAwB;IACzD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACjE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -3,6 +3,8 @@ export { applyMigrations, collectSchemas, readPendingMigrations, rollbackLastMig
3
3
  export { extractCreateTableNames, formatDriftReport, FRAMEWORK_TABLE_NAMES, getExistingFrameworkTables, inspectFrameworkDrift, type ColumnDrift, type DriftReport, type FrameworkTableName, type TableDrift, } from './drift-inspector.js';
4
4
  export { closeDatabaseConnection, connectPostgresDatabase, resolveDatabaseConnection, type DatabaseConnection, } from './connection.js';
5
5
  export { EntityRegistry } from './registry.js';
6
+ export { collectMaskedFieldsFromEntities, getMaskedFields, } from './mask-fields.js';
7
+ export { decryptFieldValue, encryptFieldValue, getEncryptedFields, isEncryptedValue, resolveEncryptionKey, ENCRYPTION_PREFIX, } from './field-encryption.js';
6
8
  export { createRepository, type RepositoryOptions } from './repository.js';
7
9
  export { generateDrizzleSchema, generateSchemas } from './schema-generator.js';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,UAAU,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,UAAU,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,+BAA+B,EAC/B,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -9,6 +9,8 @@ export { applyMigrations, collectSchemas, readPendingMigrations, rollbackLastMig
9
9
  export { extractCreateTableNames, formatDriftReport, FRAMEWORK_TABLE_NAMES, getExistingFrameworkTables, inspectFrameworkDrift, } from './drift-inspector.js';
10
10
  export { closeDatabaseConnection, connectPostgresDatabase, resolveDatabaseConnection, } from './connection.js';
11
11
  export { EntityRegistry } from './registry.js';
12
+ export { collectMaskedFieldsFromEntities, getMaskedFields, } from './mask-fields.js';
13
+ export { decryptFieldValue, encryptFieldValue, getEncryptedFields, isEncryptedValue, resolveEncryptionKey, ENCRYPTION_PREFIX, } from './field-encryption.js';
12
14
  export { createRepository } from './repository.js';
13
15
  export { generateDrizzleSchema, generateSchemas } from './schema-generator.js';
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,+EAA+E;AAC/E,oEAAoE;AACpE,EAAE;AACF,wFAAwF;AAExF,0DAA0D;AAC1D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,qBAAqB,GAKtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,GAKtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,GAE1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAA0B,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,+EAA+E;AAC/E,oEAAoE;AACpE,EAAE;AACF,wFAAwF;AAExF,0DAA0D;AAC1D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,qBAAqB,GAKtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,GAKtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,GAE1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,+BAA+B,EAC/B,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAA0B,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { EntityDefinition } from '../types/entity.js';
2
+ /**
3
+ * Field names that should be masked in audit logs and structured log metadata,
4
+ * based on `maskedInLogs` or sensitive field classifications.
5
+ */
6
+ export declare function getMaskedFields(entity: EntityDefinition): string[];
7
+ /** Token substituted for redacted structured log metadata. */
8
+ export declare const LOG_MASK_TOKEN = "***MASKED***";
9
+ /** Token substituted for redacted audit-record field values (stored-data compat). */
10
+ export declare const AUDIT_MASK_TOKEN = "***";
11
+ /**
12
+ * Deep-mask values whose keys appear in `maskKeys` (top-level or nested objects).
13
+ */
14
+ export declare function maskSensitiveValues(value: unknown, maskKeys: string[], token?: string): unknown;
15
+ /** Collect unique masked field names across all registered entities. */
16
+ export declare function collectMaskedFieldsFromEntities(entities: EntityDefinition[]): string[];
17
+ //# sourceMappingURL=mask-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask-fields.d.ts","sourceRoot":"","sources":["../../src/data/mask-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAS3D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAYlE;AAED,8DAA8D;AAC9D,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,GAAE,MAAuB,GAC7B,OAAO,CAaT;AAED,wEAAwE;AACxE,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,CAQtF"}
@@ -0,0 +1,56 @@
1
+ const SENSITIVE_CLASSIFICATIONS = new Set([
2
+ 'sensitive',
3
+ 'highly_sensitive',
4
+ 'personal',
5
+ ]);
6
+ /**
7
+ * Field names that should be masked in audit logs and structured log metadata,
8
+ * based on `maskedInLogs` or sensitive field classifications.
9
+ */
10
+ export function getMaskedFields(entity) {
11
+ const masked = [];
12
+ for (const [name, descriptor] of Object.entries(entity.fields)) {
13
+ const opts = descriptor.options;
14
+ if (opts.maskedInLogs) {
15
+ masked.push(name);
16
+ }
17
+ else if (opts.classification && SENSITIVE_CLASSIFICATIONS.has(opts.classification)) {
18
+ masked.push(name);
19
+ }
20
+ }
21
+ return masked;
22
+ }
23
+ /** Token substituted for redacted structured log metadata. */
24
+ export const LOG_MASK_TOKEN = '***MASKED***';
25
+ /** Token substituted for redacted audit-record field values (stored-data compat). */
26
+ export const AUDIT_MASK_TOKEN = '***';
27
+ /**
28
+ * Deep-mask values whose keys appear in `maskKeys` (top-level or nested objects).
29
+ */
30
+ export function maskSensitiveValues(value, maskKeys, token = LOG_MASK_TOKEN) {
31
+ if (!maskKeys.length)
32
+ return value;
33
+ const keySet = new Set(maskKeys);
34
+ if (value === null || typeof value !== 'object')
35
+ return value;
36
+ if (Array.isArray(value)) {
37
+ return value.map((entry) => maskSensitiveValues(entry, maskKeys, token));
38
+ }
39
+ const record = value;
40
+ const masked = {};
41
+ for (const [key, entry] of Object.entries(record)) {
42
+ masked[key] = keySet.has(key) ? token : maskSensitiveValues(entry, maskKeys, token);
43
+ }
44
+ return masked;
45
+ }
46
+ /** Collect unique masked field names across all registered entities. */
47
+ export function collectMaskedFieldsFromEntities(entities) {
48
+ const names = new Set();
49
+ for (const entity of entities) {
50
+ for (const field of getMaskedFields(entity)) {
51
+ names.add(field);
52
+ }
53
+ }
54
+ return Array.from(names);
55
+ }
56
+ //# sourceMappingURL=mask-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask-fields.js","sourceRoot":"","sources":["../../src/data/mask-fields.ts"],"names":[],"mappings":"AAGA,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAsB;IAC7D,WAAW;IACX,kBAAkB;IAClB,UAAU;CACX,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAwB;IACtD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;QAChC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,IAAI,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACrF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAE7C,qFAAqF;AACrF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAc,EACd,QAAkB,EAClB,QAAgB,cAAc;IAE9B,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,+BAA+B,CAAC,QAA4B;IAC1E,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
@@ -32,6 +32,8 @@ export declare class EntityRegistry {
32
32
  * Get all registered entity definitions.
33
33
  */
34
34
  getAllEntities(): EntityDefinition[];
35
+ /** Unique field names masked in logs across all registered entities. */
36
+ getMaskedFieldNames(): string[];
35
37
  /**
36
38
  * Get all Drizzle table schemas (for migration generation).
37
39
  */
@@ -46,6 +48,8 @@ export declare class EntityRegistry {
46
48
  audit?: AuditService;
47
49
  /** Bypass tenant-scope filtering for cross-tenant admin access */
48
50
  bypassTenantScope?: boolean;
51
+ /** AES-256-GCM key for encrypted string fields */
52
+ encryptionKey?: Buffer;
49
53
  }): DataService;
50
54
  }
51
55
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/data/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,MAAM,CAA8C;IAE5D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAQxC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAM/C;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIrD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,SAAS;IAI3D;;OAEG;IACH,cAAc,IAAI,gBAAgB,EAAE;IAIpC;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAIvD;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE;QACzB,EAAE,EAAE,kBAAkB,CAAC;QACvB,IAAI,EAAE,WAAW,CAAC;QAClB,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,kEAAkE;QAClE,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,WAAW;CAkBhB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/data/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAKxD;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,MAAM,CAA8C;IAE5D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAQxC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAM/C;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIrD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,SAAS;IAI3D;;OAEG;IACH,cAAc,IAAI,gBAAgB,EAAE;IAIpC,wEAAwE;IACxE,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAIvD;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE;QACzB,EAAE,EAAE,kBAAkB,CAAC;QACvB,IAAI,EAAE,WAAW,CAAC;QAClB,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,kEAAkE;QAClE,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,kDAAkD;QAClD,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,WAAW;CAmBhB"}
@@ -1,4 +1,5 @@
1
1
  import { createRepository } from './repository.js';
2
+ import { collectMaskedFieldsFromEntities } from './mask-fields.js';
2
3
  import { generateDrizzleSchema } from './schema-generator.js';
3
4
  /**
4
5
  * EntityRegistry holds all registered entities, their Drizzle schemas,
@@ -44,6 +45,10 @@ export class EntityRegistry {
44
45
  getAllEntities() {
45
46
  return Array.from(this.entities.values());
46
47
  }
48
+ /** Unique field names masked in logs across all registered entities. */
49
+ getMaskedFieldNames() {
50
+ return collectMaskedFieldsFromEntities(this.getAllEntities());
51
+ }
47
52
  /**
48
53
  * Get all Drizzle table schemas (for migration generation).
49
54
  */
@@ -67,6 +72,7 @@ export class EntityRegistry {
67
72
  auth: options.auth,
68
73
  audit: options.audit,
69
74
  bypassTenantScope: options.bypassTenantScope,
75
+ encryptionKey: options.encryptionKey,
70
76
  });
71
77
  }
72
78
  return dataService;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/data/registry.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;GAIG;AACH,MAAM,OAAO,cAAc;IACjB,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC/C,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAC;IAE5D;;OAEG;IACH,QAAQ,CAAC,MAAwB;QAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,yBAAyB,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAA4B;QACtC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,OAMjB;QACC,MAAM,WAAW,GAA+B,EAAE,CAAC;QAEnD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;gBACnC,MAAM;gBACN,KAAK;gBACL,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/data/registry.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;GAIG;AACH,MAAM,OAAO,cAAc;IACjB,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC/C,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAC;IAE5D;;OAEG;IACH,QAAQ,CAAC,MAAwB;QAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,yBAAyB,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAA4B;QACtC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,wEAAwE;IACxE,mBAAmB;QACjB,OAAO,+BAA+B,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,OAQjB;QACC,MAAM,WAAW,GAA+B,EAAE,CAAC;QAEnD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;gBACnC,MAAM;gBACN,KAAK;gBACL,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;gBAC5C,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}
@@ -14,6 +14,8 @@ export interface RepositoryOptions {
14
14
  softDelete?: boolean;
15
15
  /** Bypass tenant-scope filtering for cross-tenant admin access (default: false) */
16
16
  bypassTenantScope?: boolean;
17
+ /** AES-256-GCM key for `encrypted: true` string fields (from PLUMBUS_ENCRYPTION_KEY) */
18
+ encryptionKey?: Buffer;
17
19
  }
18
20
  /**
19
21
  * Creates a Repository<T> for an entity that automatically enforces
@@ -21,4 +23,5 @@ export interface RepositoryOptions {
21
23
  * sensitive fields in audit logs.
22
24
  */
23
25
  export declare function createRepository<T = Record<string, unknown>, TCreate extends Record<string, unknown> = Record<string, any>, TUpdate extends Record<string, unknown> = Record<string, any>>(options: RepositoryOptions): Repository<T, TCreate, TUpdate>;
26
+ export { getMaskedFields } from './mask-fields.js';
24
27
  //# sourceMappingURL=repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/data/repository.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC/B,EAAE,EAAE,kBAAkB,CAAC;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CA2Q7D"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/data/repository.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAO3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AASxD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC/B,EAAE,EAAE,kBAAkB,CAAC;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7D,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAkY7D;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,13 +1,17 @@
1
1
  import { and, asc, count, desc, eq, gte, ilike, inArray, isNull, lte, ne, or, } from 'drizzle-orm';
2
2
  import { ErrorHints } from '../errors/hints.js';
3
+ import { DataForbiddenError, DataInternalError, DataValidationError, } from '../errors/data-errors.js';
4
+ import { decryptFieldValue, encryptFieldValue, getEncryptedFields, isEncryptedValue, } from './field-encryption.js';
5
+ import { getMaskedFields, maskSensitiveValues, AUDIT_MASK_TOKEN } from './mask-fields.js';
3
6
  /**
4
7
  * Creates a Repository<T> for an entity that automatically enforces
5
8
  * tenant isolation, emits audit records on mutations, and masks
6
9
  * sensitive fields in audit logs.
7
10
  */
8
11
  export function createRepository(options) {
9
- const { entity, table, db, auth, audit, softDelete = false, bypassTenantScope = false } = options;
12
+ const { entity, table, db, auth, audit, softDelete = false, bypassTenantScope = false, encryptionKey, } = options;
10
13
  const maskedFields = getMaskedFields(entity);
14
+ const encryptedFields = getEncryptedFields(entity);
11
15
  const isTenantScoped = entity.tenantScoped === true;
12
16
  const hasDeletedAt = 'deletedAt' in table;
13
17
  async function assertTenantContext(operation) {
@@ -22,14 +26,14 @@ export function createRepository(options) {
22
26
  reason: 'missing_tenant_context',
23
27
  });
24
28
  }
25
- throw new Error(`${ErrorHints.tenantContextRequired} Tenant-scoped entity "${entity.name}" requires auth.tenantId`);
29
+ throw new DataForbiddenError(`${ErrorHints.tenantContextRequired} Tenant-scoped entity "${entity.name}" requires auth.tenantId`, { entity: entity.name, operation });
26
30
  }
27
31
  function tenantFilter() {
28
32
  if (!isTenantScoped || bypassTenantScope)
29
33
  return undefined;
30
34
  if (!auth.tenantId) {
31
35
  // assertTenantContext() should run before tenantFilter(); defensive only.
32
- throw new Error(`${ErrorHints.tenantContextRequired} Tenant-scoped entity "${entity.name}" requires auth.tenantId`);
36
+ throw new DataForbiddenError(`${ErrorHints.tenantContextRequired} Tenant-scoped entity "${entity.name}" requires auth.tenantId`, { entity: entity.name });
33
37
  }
34
38
  const tenantCol = table.tenantId;
35
39
  if (!tenantCol)
@@ -45,13 +49,87 @@ export function createRepository(options) {
45
49
  function maskData(data) {
46
50
  if (maskedFields.length === 0)
47
51
  return data;
48
- const masked = { ...data };
49
- for (const field of maskedFields) {
50
- if (field in masked) {
51
- masked[field] = '***';
52
+ return maskSensitiveValues(data, maskedFields, AUDIT_MASK_TOKEN);
53
+ }
54
+ function assertQueryableField(fieldName, operation) {
55
+ if (!encryptionKey || encryptedFields.length === 0)
56
+ return;
57
+ if (!encryptedFields.includes(fieldName))
58
+ return;
59
+ throw new DataValidationError(`Cannot query encrypted field "${fieldName}"`, {
60
+ entity: entity.name,
61
+ field: fieldName,
62
+ operation,
63
+ });
64
+ }
65
+ function collectQueryFieldNames(query, options) {
66
+ const names = [];
67
+ if (query) {
68
+ for (const key of Object.keys(query)) {
69
+ names.push(key);
70
+ }
71
+ }
72
+ if (options?.in) {
73
+ for (const key of Object.keys(options.in)) {
74
+ names.push(key);
75
+ }
76
+ }
77
+ if (options?.notEq) {
78
+ for (const key of Object.keys(options.notEq)) {
79
+ names.push(key);
80
+ }
81
+ }
82
+ if (options?.search?.columns) {
83
+ for (const col of options.search.columns) {
84
+ names.push(col);
85
+ }
86
+ }
87
+ if (options?.dateFilters) {
88
+ for (const key of Object.keys(options.dateFilters)) {
89
+ names.push(key);
90
+ }
91
+ }
92
+ if (options?.orderBy) {
93
+ const specs = typeof options.orderBy === 'string' ? [{ column: options.orderBy }] : options.orderBy;
94
+ for (const spec of specs) {
95
+ names.push(spec.column);
96
+ }
97
+ }
98
+ return names;
99
+ }
100
+ function assertQueryableFields(query, options, operation = 'findMany') {
101
+ for (const fieldName of collectQueryFieldNames(query, options)) {
102
+ assertQueryableField(fieldName, operation);
103
+ }
104
+ }
105
+ function encryptRecordFields(record) {
106
+ if (!encryptionKey || encryptedFields.length === 0)
107
+ return record;
108
+ const encrypted = { ...record };
109
+ for (const field of encryptedFields) {
110
+ const value = encrypted[field];
111
+ if (typeof value === 'string' && value.length > 0 && !isEncryptedValue(value)) {
112
+ encrypted[field] = encryptFieldValue(value, encryptionKey);
113
+ }
114
+ }
115
+ return encrypted;
116
+ }
117
+ function decryptRecordFields(record) {
118
+ if (encryptedFields.length === 0)
119
+ return record;
120
+ const decrypted = { ...record };
121
+ for (const field of encryptedFields) {
122
+ const value = decrypted[field];
123
+ if (typeof value === 'string' && isEncryptedValue(value)) {
124
+ decrypted[field] = encryptionKey ? decryptFieldValue(value, encryptionKey) : value;
52
125
  }
53
126
  }
54
- return masked;
127
+ return decrypted;
128
+ }
129
+ function decryptRow(row) {
130
+ if (!row)
131
+ return null;
132
+ return decryptRecordFields(row);
55
133
  }
56
134
  async function auditMutation(action, data) {
57
135
  if (!audit)
@@ -62,6 +140,7 @@ export function createRepository(options) {
62
140
  });
63
141
  }
64
142
  function buildConditions(query, options) {
143
+ assertQueryableFields(query, options);
65
144
  const conditions = [];
66
145
  const tf = tenantFilter();
67
146
  if (tf)
@@ -151,17 +230,22 @@ export function createRepository(options) {
151
230
  conditions.push(sdf);
152
231
  const where = conditions.length > 1 ? and(...conditions) : conditions[0];
153
232
  const rows = await db.select().from(table).where(where).limit(1);
154
- return rows[0] ?? null;
233
+ return decryptRow(rows[0]);
155
234
  },
156
235
  async create(data) {
157
236
  await assertTenantContext('create');
158
- const record = { ...data };
237
+ const record = encryptRecordFields({ ...data });
159
238
  // Inject tenantId for tenant-scoped entities
160
239
  if (isTenantScoped && !bypassTenantScope && auth.tenantId) {
161
240
  record.tenantId = auth.tenantId;
162
241
  }
163
242
  const rows = await db.insert(table).values(record).returning();
164
- const created = rows[0];
243
+ const created = decryptRow(rows[0]);
244
+ if (!created) {
245
+ throw new DataInternalError(`Failed to create "${entity.name}" record`, {
246
+ entity: entity.name,
247
+ });
248
+ }
165
249
  await auditMutation('create', record);
166
250
  return created;
167
251
  },
@@ -170,7 +254,7 @@ export function createRepository(options) {
170
254
  return [];
171
255
  await assertTenantContext('createMany');
172
256
  const prepared = records.map((data) => {
173
- const record = { ...data };
257
+ const record = encryptRecordFields({ ...data });
174
258
  if (isTenantScoped && !bypassTenantScope && auth.tenantId) {
175
259
  record.tenantId = auth.tenantId;
176
260
  }
@@ -182,7 +266,15 @@ export function createRepository(options) {
182
266
  count: prepared.length,
183
267
  sample: maskData(prepared[0] ?? {}),
184
268
  });
185
- return rows;
269
+ return rows.map((row) => {
270
+ const decrypted = decryptRow(row);
271
+ if (!decrypted) {
272
+ throw new DataInternalError(`Failed to create "${entity.name}" record in batch`, {
273
+ entity: entity.name,
274
+ });
275
+ }
276
+ return decrypted;
277
+ });
186
278
  },
187
279
  async update(id, updates) {
188
280
  await assertTenantContext('update');
@@ -196,14 +288,20 @@ export function createRepository(options) {
196
288
  conditions.push(tf);
197
289
  const where = conditions.length > 1 ? and(...conditions) : conditions[0];
198
290
  if (!where) {
199
- throw new Error(`Refusing to update "${entity.name}" without a WHERE predicate (no id and no tenant filter)`);
291
+ throw new DataInternalError(`Refusing to update "${entity.name}" without a WHERE predicate (no id and no tenant filter)`, { entity: entity.name, id });
200
292
  }
201
- const updateData = {
293
+ const updateData = encryptRecordFields({
202
294
  ...updates,
203
295
  updatedAt: new Date(),
204
- };
296
+ });
205
297
  const rows = await db.update(table).set(updateData).where(where).returning();
206
- const updated = rows[0];
298
+ const updated = decryptRow(rows[0]);
299
+ if (!updated) {
300
+ throw new DataInternalError(`Failed to update "${entity.name}" record ${id}`, {
301
+ entity: entity.name,
302
+ id,
303
+ });
304
+ }
207
305
  await auditMutation('update', { id, ...updateData });
208
306
  return updated;
209
307
  },
@@ -219,7 +317,7 @@ export function createRepository(options) {
219
317
  conditions.push(tf);
220
318
  const where = conditions.length > 1 ? and(...conditions) : conditions[0];
221
319
  if (!where) {
222
- throw new Error(`Refusing to delete "${entity.name}" without a WHERE predicate (no id and no tenant filter)`);
320
+ throw new DataInternalError(`Refusing to delete "${entity.name}" without a WHERE predicate (no id and no tenant filter)`, { entity: entity.name, id });
223
321
  }
224
322
  if (softDelete && hasDeletedAt) {
225
323
  await db
@@ -243,7 +341,12 @@ export function createRepository(options) {
243
341
  if (options?.offset != null) {
244
342
  qb = qb.offset(Math.max(0, options.offset));
245
343
  }
246
- return (await qb);
344
+ const result = await qb;
345
+ const rows = Array.isArray(result) ? result : [];
346
+ return rows.flatMap((row) => {
347
+ const decrypted = decryptRow(row);
348
+ return decrypted ? [decrypted] : [];
349
+ });
247
350
  },
248
351
  async count(query, options) {
249
352
  await assertTenantContext('count');
@@ -253,26 +356,5 @@ export function createRepository(options) {
253
356
  },
254
357
  };
255
358
  }
256
- /**
257
- * Extract field names that should be masked in audit logs
258
- * based on field classification or explicit maskedInLogs flag.
259
- */
260
- function getMaskedFields(entity) {
261
- const masked = [];
262
- const sensitiveClassifications = new Set([
263
- 'sensitive',
264
- 'highly_sensitive',
265
- 'personal',
266
- ]);
267
- for (const [name, descriptor] of Object.entries(entity.fields)) {
268
- const opts = descriptor.options;
269
- if (opts.maskedInLogs) {
270
- masked.push(name);
271
- }
272
- else if (opts.classification && sensitiveClassifications.has(opts.classification)) {
273
- masked.push(name);
274
- }
275
- }
276
- return masked;
277
- }
359
+ export { getMaskedFields } from './mask-fields.js';
278
360
  //# sourceMappingURL=repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/data/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/data/repository.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,8 @@ interface DefineCapabilityInput<TInput extends z.ZodTypeAny, TOutput extends z.Z
39
39
  event: string;
40
40
  versionConstraint?: string;
41
41
  };
42
+ /** When `false`, opts out of transactional outbox for this capability. */
43
+ transactional?: boolean;
42
44
  handler: (ctx: ExecutionContext, input: z.infer<TInput>) => Promise<z.infer<TOutput>>;
43
45
  }
44
46
  export declare function defineCapability<TInput extends z.ZodTypeAny, TOutput extends z.ZodTypeAny>(config: DefineCapabilityInput<TInput, TOutput>): CapabilityContract<TInput, TOutput>;
@@ -1 +1 @@
1
- {"version":3,"file":"defineCapability.d.ts","sourceRoot":"","sources":["../../src/define/defineCapability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAczD,UAAU,qBAAqB,CAAC,MAAM,SAAS,CAAC,CAAC,UAAU,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAEhB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,EAAE,EAAE,OAAO,CAAC;KACb,CAAC;IACF,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;IACtC,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAExD,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CACvF;AAyJD,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,CAAC,CAAC,UAAU,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,EACxF,MAAM,EAAE,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7C,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CA8CrC"}
1
+ {"version":3,"file":"defineCapability.d.ts","sourceRoot":"","sources":["../../src/define/defineCapability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAczD,UAAU,qBAAqB,CAAC,MAAM,SAAS,CAAC,CAAC,UAAU,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAEhB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,EAAE,EAAE,OAAO,CAAC;KACb,CAAC;IACF,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;IACtC,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CACvF;AAyJD,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,CAAC,CAAC,UAAU,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,EACxF,MAAM,EAAE,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7C,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CA8CrC"}