@fabricorg/platform 1.9.0 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +48 -2
  3. package/dist/actions/index.cjs +45 -26
  4. package/dist/actions/index.cjs.map +1 -1
  5. package/dist/actions/index.d.cts +225 -226
  6. package/dist/actions/index.d.ts +225 -226
  7. package/dist/actions/index.js +41 -2
  8. package/dist/actions/index.js.map +1 -1
  9. package/dist/adapters/index.cjs +696 -66
  10. package/dist/adapters/index.cjs.map +1 -1
  11. package/dist/adapters/index.d.cts +367 -365
  12. package/dist/adapters/index.d.ts +367 -365
  13. package/dist/adapters/index.js +682 -2
  14. package/dist/adapters/index.js.map +1 -1
  15. package/dist/agent-hitl/index.cjs +21 -10
  16. package/dist/agent-hitl/index.cjs.map +1 -1
  17. package/dist/agent-hitl/index.d.cts +30 -30
  18. package/dist/agent-hitl/index.d.ts +30 -30
  19. package/dist/agent-hitl/index.js +21 -2
  20. package/dist/agent-hitl/index.js.map +1 -1
  21. package/dist/certification/index.cjs +109 -24
  22. package/dist/certification/index.cjs.map +1 -1
  23. package/dist/certification/index.d.cts +33 -39
  24. package/dist/certification/index.d.ts +33 -39
  25. package/dist/certification/index.js +107 -8
  26. package/dist/certification/index.js.map +1 -1
  27. package/dist/discovery/index.cjs +12 -10
  28. package/dist/discovery/index.cjs.map +1 -1
  29. package/dist/discovery/index.d.cts +2 -10
  30. package/dist/discovery/index.d.ts +2 -10
  31. package/dist/discovery/index.js +12 -2
  32. package/dist/discovery/index.js.map +1 -1
  33. package/dist/engine-B4csEOEc.js +223 -0
  34. package/dist/engine-B4csEOEc.js.map +1 -0
  35. package/dist/engine-BqScuhrT.cjs +246 -0
  36. package/dist/engine-BqScuhrT.cjs.map +1 -0
  37. package/dist/events/index.cjs +39 -10
  38. package/dist/events/index.cjs.map +1 -1
  39. package/dist/events/index.d.cts +43 -43
  40. package/dist/events/index.d.ts +43 -43
  41. package/dist/events/index.js +39 -2
  42. package/dist/events/index.js.map +1 -1
  43. package/dist/evidence/index.cjs +12 -50
  44. package/dist/evidence/index.d.cts +2 -229
  45. package/dist/evidence/index.d.ts +2 -229
  46. package/dist/evidence/index.js +1 -5
  47. package/dist/evidence-BuCICb0c.js +516 -0
  48. package/dist/evidence-BuCICb0c.js.map +1 -0
  49. package/dist/evidence-Cq48eDvA.cjs +575 -0
  50. package/dist/evidence-Cq48eDvA.cjs.map +1 -0
  51. package/dist/governance/index.cjs +24 -18
  52. package/dist/governance/index.cjs.map +1 -1
  53. package/dist/governance/index.d.cts +80 -83
  54. package/dist/governance/index.d.ts +80 -83
  55. package/dist/governance/index.js +22 -2
  56. package/dist/governance/index.js.map +1 -1
  57. package/dist/ids/index.cjs +52 -22
  58. package/dist/ids/index.cjs.map +1 -1
  59. package/dist/ids/index.d.cts +17 -17
  60. package/dist/ids/index.d.ts +17 -17
  61. package/dist/ids/index.js +49 -2
  62. package/dist/ids/index.js.map +1 -1
  63. package/dist/index-9jasmw76.d.cts +124 -0
  64. package/dist/index-BXpeFdk2.d.cts +190 -0
  65. package/dist/index-BXpeFdk2.d.ts +190 -0
  66. package/dist/index-BnbsKZsT.d.cts +231 -0
  67. package/dist/index-CIl1rYRv.d.cts +11 -0
  68. package/dist/index-CIl1rYRv.d.ts +11 -0
  69. package/dist/index-CVHA1ypT.d.cts +262 -0
  70. package/dist/index-DZ4mnNb7.d.cts +78 -0
  71. package/dist/index-DZ4mnNb7.d.ts +78 -0
  72. package/dist/index-IqcDvl69.d.ts +124 -0
  73. package/dist/index-fmUiRBXu.d.cts +57 -0
  74. package/dist/index-fmUiRBXu.d.ts +57 -0
  75. package/dist/index-sPUPs8pr.d.ts +262 -0
  76. package/dist/index-z9-CYOIo.d.ts +231 -0
  77. package/dist/index.cjs +111 -385
  78. package/dist/index.d.cts +18 -17
  79. package/dist/index.d.ts +18 -17
  80. package/dist/index.js +19 -20
  81. package/dist/manifest/index.cjs +224 -35
  82. package/dist/manifest/index.cjs.map +1 -1
  83. package/dist/manifest/index.d.cts +130 -131
  84. package/dist/manifest/index.d.ts +130 -131
  85. package/dist/manifest/index.js +219 -7
  86. package/dist/manifest/index.js.map +1 -1
  87. package/dist/modules/index.cjs +281 -42
  88. package/dist/modules/index.cjs.map +1 -1
  89. package/dist/modules/index.d.cts +157 -159
  90. package/dist/modules/index.d.ts +157 -159
  91. package/dist/modules/index.js +274 -6
  92. package/dist/modules/index.js.map +1 -1
  93. package/dist/objects/index.cjs +355 -22
  94. package/dist/objects/index.cjs.map +1 -1
  95. package/dist/objects/index.d.cts +2 -77
  96. package/dist/objects/index.d.ts +2 -77
  97. package/dist/objects/index.js +352 -2
  98. package/dist/objects/index.js.map +1 -1
  99. package/dist/policies/index.cjs +14 -48
  100. package/dist/policies/index.d.cts +2 -247
  101. package/dist/policies/index.d.ts +2 -247
  102. package/dist/policies/index.js +1 -3
  103. package/dist/policies-DH_GCXQ-.js +627 -0
  104. package/dist/policies-DH_GCXQ-.js.map +1 -0
  105. package/dist/policies-Nxbp1CH8.cjs +698 -0
  106. package/dist/policies-Nxbp1CH8.cjs.map +1 -0
  107. package/dist/privacy/index.cjs +26 -43
  108. package/dist/privacy/index.cjs.map +1 -1
  109. package/dist/privacy/index.d.cts +2 -189
  110. package/dist/privacy/index.d.ts +2 -189
  111. package/dist/privacy/index.js +18 -3
  112. package/dist/privacy/index.js.map +1 -1
  113. package/dist/projections/index.cjs +241 -23
  114. package/dist/projections/index.cjs.map +1 -1
  115. package/dist/projections/index.d.cts +2 -125
  116. package/dist/projections/index.d.ts +2 -125
  117. package/dist/projections/index.js +238 -3
  118. package/dist/projections/index.js.map +1 -1
  119. package/dist/state-machines/index.cjs +76 -18
  120. package/dist/state-machines/index.cjs.map +1 -1
  121. package/dist/state-machines/index.d.cts +2 -55
  122. package/dist/state-machines/index.d.ts +2 -55
  123. package/dist/state-machines/index.js +74 -2
  124. package/dist/state-machines/index.js.map +1 -1
  125. package/dist/testing/index.cjs +27 -19
  126. package/dist/testing/index.cjs.map +1 -1
  127. package/dist/testing/index.d.cts +17 -19
  128. package/dist/testing/index.d.ts +17 -19
  129. package/dist/testing/index.js +25 -3
  130. package/dist/testing/index.js.map +1 -1
  131. package/package.json +6 -5
  132. package/dist/chunk-2AE6TMAX.cjs +0 -44
  133. package/dist/chunk-2AE6TMAX.cjs.map +0 -1
  134. package/dist/chunk-6HY35TKB.cjs +0 -491
  135. package/dist/chunk-6HY35TKB.cjs.map +0 -1
  136. package/dist/chunk-6UGEIDLC.cjs +0 -26
  137. package/dist/chunk-6UGEIDLC.cjs.map +0 -1
  138. package/dist/chunk-7GAWSUOG.js +0 -64
  139. package/dist/chunk-7GAWSUOG.js.map +0 -1
  140. package/dist/chunk-AFXFAEWA.js +0 -673
  141. package/dist/chunk-AFXFAEWA.js.map +0 -1
  142. package/dist/chunk-AFXKSIVI.cjs +0 -540
  143. package/dist/chunk-AFXKSIVI.cjs.map +0 -1
  144. package/dist/chunk-B5DOGDPG.js +0 -42
  145. package/dist/chunk-B5DOGDPG.js.map +0 -1
  146. package/dist/chunk-BJGZE3GE.js +0 -20
  147. package/dist/chunk-BJGZE3GE.js.map +0 -1
  148. package/dist/chunk-CRZXTZ36.cjs +0 -258
  149. package/dist/chunk-CRZXTZ36.cjs.map +0 -1
  150. package/dist/chunk-D4SWRBUH.cjs +0 -22
  151. package/dist/chunk-D4SWRBUH.cjs.map +0 -1
  152. package/dist/chunk-DBTAUI6C.cjs +0 -395
  153. package/dist/chunk-DBTAUI6C.cjs.map +0 -1
  154. package/dist/chunk-EMSAFNPX.js +0 -98
  155. package/dist/chunk-EMSAFNPX.js.map +0 -1
  156. package/dist/chunk-F3E5SXPN.cjs +0 -28
  157. package/dist/chunk-F3E5SXPN.cjs.map +0 -1
  158. package/dist/chunk-HEYMMVDP.js +0 -480
  159. package/dist/chunk-HEYMMVDP.js.map +0 -1
  160. package/dist/chunk-IFW43ELT.cjs +0 -331
  161. package/dist/chunk-IFW43ELT.cjs.map +0 -1
  162. package/dist/chunk-LFE74IJX.js +0 -20
  163. package/dist/chunk-LFE74IJX.js.map +0 -1
  164. package/dist/chunk-LZSE6QGQ.cjs +0 -60
  165. package/dist/chunk-LZSE6QGQ.cjs.map +0 -1
  166. package/dist/chunk-MCWSUGB3.cjs +0 -102
  167. package/dist/chunk-MCWSUGB3.cjs.map +0 -1
  168. package/dist/chunk-MLBALEUR.js +0 -290
  169. package/dist/chunk-MLBALEUR.js.map +0 -1
  170. package/dist/chunk-NNXQZPB3.cjs +0 -31
  171. package/dist/chunk-NNXQZPB3.cjs.map +0 -1
  172. package/dist/chunk-OFCCZ27Z.js +0 -26
  173. package/dist/chunk-OFCCZ27Z.js.map +0 -1
  174. package/dist/chunk-PDN5DOLQ.js +0 -242
  175. package/dist/chunk-PDN5DOLQ.js.map +0 -1
  176. package/dist/chunk-PIDZQAEL.js +0 -50
  177. package/dist/chunk-PIDZQAEL.js.map +0 -1
  178. package/dist/chunk-Q4Q4JPR3.js +0 -524
  179. package/dist/chunk-Q4Q4JPR3.js.map +0 -1
  180. package/dist/chunk-RALMUSOX.js +0 -55
  181. package/dist/chunk-RALMUSOX.js.map +0 -1
  182. package/dist/chunk-SNTV45LH.cjs +0 -295
  183. package/dist/chunk-SNTV45LH.cjs.map +0 -1
  184. package/dist/chunk-TBS2S5AX.cjs +0 -40
  185. package/dist/chunk-TBS2S5AX.cjs.map +0 -1
  186. package/dist/chunk-TYNIFC7J.js +0 -253
  187. package/dist/chunk-TYNIFC7J.js.map +0 -1
  188. package/dist/chunk-UGWGHTNC.cjs +0 -56
  189. package/dist/chunk-UGWGHTNC.cjs.map +0 -1
  190. package/dist/chunk-WI7CWNYI.cjs +0 -68
  191. package/dist/chunk-WI7CWNYI.cjs.map +0 -1
  192. package/dist/chunk-WNZP53GI.js +0 -386
  193. package/dist/chunk-WNZP53GI.js.map +0 -1
  194. package/dist/chunk-WQ3BYI7T.cjs +0 -249
  195. package/dist/chunk-WQ3BYI7T.cjs.map +0 -1
  196. package/dist/chunk-Y2PJLRIY.js +0 -36
  197. package/dist/chunk-Y2PJLRIY.js.map +0 -1
  198. package/dist/chunk-YGIPN3TU.cjs +0 -684
  199. package/dist/chunk-YGIPN3TU.cjs.map +0 -1
  200. package/dist/chunk-ZAEVQSB5.js +0 -326
  201. package/dist/chunk-ZAEVQSB5.js.map +0 -1
  202. package/dist/chunk-ZMQTV5OJ.js +0 -27
  203. package/dist/chunk-ZMQTV5OJ.js.map +0 -1
  204. package/dist/evidence/index.cjs.map +0 -1
  205. package/dist/evidence/index.js.map +0 -1
  206. package/dist/index.cjs.map +0 -1
  207. package/dist/index.js.map +0 -1
  208. package/dist/policies/index.cjs.map +0 -1
  209. package/dist/policies/index.js.map +0 -1
@@ -1,24 +1,54 @@
1
- 'use strict';
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region ids/index.ts
3
+ const CROCKFORD_BASE32 = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
4
+ const FABRIC_ID_PREFIXES = {
5
+ assetEvent: "evt",
6
+ actionInvocation: "act",
7
+ policyEvaluation: "pol",
8
+ adapterInvocation: "adp",
9
+ adapterDeadLetterQueue: "dlq",
10
+ accessEvent: "acc",
11
+ projectionSnapshot: "psn",
12
+ complianceEvidencePacket: "cep"
13
+ };
14
+ const ID_REGEX = /^([a-z][a-z0-9]{1,7})_([0-9A-Z]{26})$/;
15
+ function randomBase32(length) {
16
+ let output = "";
17
+ const randomValues = new Uint8Array(length);
18
+ globalThis.crypto.getRandomValues(randomValues);
19
+ for (const value of randomValues) output += CROCKFORD_BASE32[value % 32];
20
+ return output;
21
+ }
22
+ function createSortableRandomId() {
23
+ let timestamp = Date.now();
24
+ let encodedTime = "";
25
+ for (let index = 0; index < 10; index++) {
26
+ encodedTime = CROCKFORD_BASE32[timestamp % 32] + encodedTime;
27
+ timestamp = Math.floor(timestamp / 32);
28
+ }
29
+ return `${encodedTime}${randomBase32(16)}`;
30
+ }
31
+ function createFabricId(prefix) {
32
+ if (!/^[a-z][a-z0-9]{1,7}$/.test(prefix)) throw new Error(`Invalid Fabric ID prefix: ${prefix}`);
33
+ return `${prefix}_${createSortableRandomId()}`;
34
+ }
35
+ function isFabricId(id, prefix) {
36
+ const match = ID_REGEX.exec(id);
37
+ if (!match) return false;
38
+ return prefix ? match[1] === prefix : true;
39
+ }
40
+ function parseFabricId(id) {
41
+ const match = ID_REGEX.exec(id);
42
+ if (!match) return null;
43
+ return {
44
+ prefix: match[1],
45
+ ulid: match[2]
46
+ };
47
+ }
48
+ //#endregion
49
+ exports.FABRIC_ID_PREFIXES = FABRIC_ID_PREFIXES;
50
+ exports.createFabricId = createFabricId;
51
+ exports.isFabricId = isFabricId;
52
+ exports.parseFabricId = parseFabricId;
2
53
 
3
- var chunkLZSE6QGQ_cjs = require('../chunk-LZSE6QGQ.cjs');
4
-
5
-
6
-
7
- Object.defineProperty(exports, "FABRIC_ID_PREFIXES", {
8
- enumerable: true,
9
- get: function () { return chunkLZSE6QGQ_cjs.FABRIC_ID_PREFIXES; }
10
- });
11
- Object.defineProperty(exports, "createFabricId", {
12
- enumerable: true,
13
- get: function () { return chunkLZSE6QGQ_cjs.createFabricId; }
14
- });
15
- Object.defineProperty(exports, "isFabricId", {
16
- enumerable: true,
17
- get: function () { return chunkLZSE6QGQ_cjs.isFabricId; }
18
- });
19
- Object.defineProperty(exports, "parseFabricId", {
20
- enumerable: true,
21
- get: function () { return chunkLZSE6QGQ_cjs.parseFabricId; }
22
- });
23
- //# sourceMappingURL=index.cjs.map
24
54
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../ids/index.ts"],"sourcesContent":["const CROCKFORD_BASE32 = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\n\nexport const FABRIC_ID_PREFIXES = {\n\tassetEvent: \"evt\",\n\tactionInvocation: \"act\",\n\tpolicyEvaluation: \"pol\",\n\tadapterInvocation: \"adp\",\n\tadapterDeadLetterQueue: \"dlq\",\n\taccessEvent: \"acc\",\n\tprojectionSnapshot: \"psn\",\n\tcomplianceEvidencePacket: \"cep\",\n} as const;\n\nexport type FabricIdPrefix = (typeof FABRIC_ID_PREFIXES)[keyof typeof FABRIC_ID_PREFIXES] | string;\n\nconst ID_REGEX = /^([a-z][a-z0-9]{1,7})_([0-9A-Z]{26})$/;\n\nfunction randomBase32(length: number): string {\n\tlet output = \"\";\n\tconst randomValues = new Uint8Array(length);\n\tglobalThis.crypto.getRandomValues(randomValues);\n\tfor (const value of randomValues) {\n\t\toutput += CROCKFORD_BASE32[value % CROCKFORD_BASE32.length];\n\t}\n\treturn output;\n}\n\nfunction createSortableRandomId(): string {\n\tlet timestamp = Date.now();\n\tlet encodedTime = \"\";\n\tfor (let index = 0; index < 10; index++) {\n\t\tencodedTime = CROCKFORD_BASE32[timestamp % 32] + encodedTime;\n\t\ttimestamp = Math.floor(timestamp / 32);\n\t}\n\treturn `${encodedTime}${randomBase32(16)}`;\n}\n\nexport function createFabricId(prefix: FabricIdPrefix): string {\n\tif (!/^[a-z][a-z0-9]{1,7}$/.test(prefix)) {\n\t\tthrow new Error(`Invalid Fabric ID prefix: ${prefix}`);\n\t}\n\treturn `${prefix}_${createSortableRandomId()}`;\n}\n\nexport function isFabricId(id: string, prefix?: FabricIdPrefix): boolean {\n\tconst match = ID_REGEX.exec(id);\n\tif (!match) {\n\t\treturn false;\n\t}\n\treturn prefix ? match[1] === prefix : true;\n}\n\nexport function parseFabricId(id: string): { prefix: string; ulid: string } | null {\n\tconst match = ID_REGEX.exec(id);\n\tif (!match) {\n\t\treturn null;\n\t}\n\treturn { prefix: match[1], ulid: match[2] };\n}\n"],"mappings":";;AAAA,MAAM,mBAAmB;AAEzB,MAAa,qBAAqB;CACjC,YAAY;CACZ,kBAAkB;CAClB,kBAAkB;CAClB,mBAAmB;CACnB,wBAAwB;CACxB,aAAa;CACb,oBAAoB;CACpB,0BAA0B;AAC3B;AAIA,MAAM,WAAW;AAEjB,SAAS,aAAa,QAAwB;CAC7C,IAAI,SAAS;CACb,MAAM,eAAe,IAAI,WAAW,MAAM;CAC1C,WAAW,OAAO,gBAAgB,YAAY;CAC9C,KAAK,MAAM,SAAS,cACnB,UAAU,iBAAiB,QAAQ;CAEpC,OAAO;AACR;AAEA,SAAS,yBAAiC;CACzC,IAAI,YAAY,KAAK,IAAI;CACzB,IAAI,cAAc;CAClB,KAAK,IAAI,QAAQ,GAAG,QAAQ,IAAI,SAAS;EACxC,cAAc,iBAAiB,YAAY,MAAM;EACjD,YAAY,KAAK,MAAM,YAAY,EAAE;CACtC;CACA,OAAO,GAAG,cAAc,aAAa,EAAE;AACxC;AAEA,SAAgB,eAAe,QAAgC;CAC9D,IAAI,CAAC,uBAAuB,KAAK,MAAM,GACtC,MAAM,IAAI,MAAM,6BAA6B,QAAQ;CAEtD,OAAO,GAAG,OAAO,GAAG,uBAAuB;AAC5C;AAEA,SAAgB,WAAW,IAAY,QAAkC;CACxE,MAAM,QAAQ,SAAS,KAAK,EAAE;CAC9B,IAAI,CAAC,OACJ,OAAO;CAER,OAAO,SAAS,MAAM,OAAO,SAAS;AACvC;AAEA,SAAgB,cAAc,IAAqD;CAClF,MAAM,QAAQ,SAAS,KAAK,EAAE;CAC9B,IAAI,CAAC,OACJ,OAAO;CAER,OAAO;EAAE,QAAQ,MAAM;EAAI,MAAM,MAAM;CAAG;AAC3C"}
@@ -1,19 +1,19 @@
1
- declare const FABRIC_ID_PREFIXES: {
2
- readonly assetEvent: "evt";
3
- readonly actionInvocation: "act";
4
- readonly policyEvaluation: "pol";
5
- readonly adapterInvocation: "adp";
6
- readonly adapterDeadLetterQueue: "dlq";
7
- readonly accessEvent: "acc";
8
- readonly projectionSnapshot: "psn";
9
- readonly complianceEvidencePacket: "cep";
1
+ //#region ids/index.d.ts
2
+ export declare const FABRIC_ID_PREFIXES: {
3
+ readonly assetEvent: "evt";
4
+ readonly actionInvocation: "act";
5
+ readonly policyEvaluation: "pol";
6
+ readonly adapterInvocation: "adp";
7
+ readonly adapterDeadLetterQueue: "dlq";
8
+ readonly accessEvent: "acc";
9
+ readonly projectionSnapshot: "psn";
10
+ readonly complianceEvidencePacket: "cep";
10
11
  };
11
- type FabricIdPrefix = (typeof FABRIC_ID_PREFIXES)[keyof typeof FABRIC_ID_PREFIXES] | string;
12
- declare function createFabricId(prefix: FabricIdPrefix): string;
13
- declare function isFabricId(id: string, prefix?: FabricIdPrefix): boolean;
14
- declare function parseFabricId(id: string): {
15
- prefix: string;
16
- ulid: string;
12
+ export type FabricIdPrefix = (typeof FABRIC_ID_PREFIXES)[keyof typeof FABRIC_ID_PREFIXES] | string;
13
+ export declare function createFabricId(prefix: FabricIdPrefix): string;
14
+ export declare function isFabricId(id: string, prefix?: FabricIdPrefix): boolean;
15
+ export declare function parseFabricId(id: string): {
16
+ prefix: string;
17
+ ulid: string;
17
18
  } | null;
18
-
19
- export { FABRIC_ID_PREFIXES, type FabricIdPrefix, createFabricId, isFabricId, parseFabricId };
19
+ //#endregion
@@ -1,19 +1,19 @@
1
- declare const FABRIC_ID_PREFIXES: {
2
- readonly assetEvent: "evt";
3
- readonly actionInvocation: "act";
4
- readonly policyEvaluation: "pol";
5
- readonly adapterInvocation: "adp";
6
- readonly adapterDeadLetterQueue: "dlq";
7
- readonly accessEvent: "acc";
8
- readonly projectionSnapshot: "psn";
9
- readonly complianceEvidencePacket: "cep";
1
+ //#region ids/index.d.ts
2
+ export declare const FABRIC_ID_PREFIXES: {
3
+ readonly assetEvent: "evt";
4
+ readonly actionInvocation: "act";
5
+ readonly policyEvaluation: "pol";
6
+ readonly adapterInvocation: "adp";
7
+ readonly adapterDeadLetterQueue: "dlq";
8
+ readonly accessEvent: "acc";
9
+ readonly projectionSnapshot: "psn";
10
+ readonly complianceEvidencePacket: "cep";
10
11
  };
11
- type FabricIdPrefix = (typeof FABRIC_ID_PREFIXES)[keyof typeof FABRIC_ID_PREFIXES] | string;
12
- declare function createFabricId(prefix: FabricIdPrefix): string;
13
- declare function isFabricId(id: string, prefix?: FabricIdPrefix): boolean;
14
- declare function parseFabricId(id: string): {
15
- prefix: string;
16
- ulid: string;
12
+ export type FabricIdPrefix = (typeof FABRIC_ID_PREFIXES)[keyof typeof FABRIC_ID_PREFIXES] | string;
13
+ export declare function createFabricId(prefix: FabricIdPrefix): string;
14
+ export declare function isFabricId(id: string, prefix?: FabricIdPrefix): boolean;
15
+ export declare function parseFabricId(id: string): {
16
+ prefix: string;
17
+ ulid: string;
17
18
  } | null;
18
-
19
- export { FABRIC_ID_PREFIXES, type FabricIdPrefix, createFabricId, isFabricId, parseFabricId };
19
+ //#endregion
package/dist/ids/index.js CHANGED
@@ -1,3 +1,50 @@
1
- export { FABRIC_ID_PREFIXES, createFabricId, isFabricId, parseFabricId } from '../chunk-RALMUSOX.js';
2
- //# sourceMappingURL=index.js.map
1
+ //#region ids/index.ts
2
+ const CROCKFORD_BASE32 = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
3
+ const FABRIC_ID_PREFIXES = {
4
+ assetEvent: "evt",
5
+ actionInvocation: "act",
6
+ policyEvaluation: "pol",
7
+ adapterInvocation: "adp",
8
+ adapterDeadLetterQueue: "dlq",
9
+ accessEvent: "acc",
10
+ projectionSnapshot: "psn",
11
+ complianceEvidencePacket: "cep"
12
+ };
13
+ const ID_REGEX = /^([a-z][a-z0-9]{1,7})_([0-9A-Z]{26})$/;
14
+ function randomBase32(length) {
15
+ let output = "";
16
+ const randomValues = new Uint8Array(length);
17
+ globalThis.crypto.getRandomValues(randomValues);
18
+ for (const value of randomValues) output += CROCKFORD_BASE32[value % 32];
19
+ return output;
20
+ }
21
+ function createSortableRandomId() {
22
+ let timestamp = Date.now();
23
+ let encodedTime = "";
24
+ for (let index = 0; index < 10; index++) {
25
+ encodedTime = CROCKFORD_BASE32[timestamp % 32] + encodedTime;
26
+ timestamp = Math.floor(timestamp / 32);
27
+ }
28
+ return `${encodedTime}${randomBase32(16)}`;
29
+ }
30
+ function createFabricId(prefix) {
31
+ if (!/^[a-z][a-z0-9]{1,7}$/.test(prefix)) throw new Error(`Invalid Fabric ID prefix: ${prefix}`);
32
+ return `${prefix}_${createSortableRandomId()}`;
33
+ }
34
+ function isFabricId(id, prefix) {
35
+ const match = ID_REGEX.exec(id);
36
+ if (!match) return false;
37
+ return prefix ? match[1] === prefix : true;
38
+ }
39
+ function parseFabricId(id) {
40
+ const match = ID_REGEX.exec(id);
41
+ if (!match) return null;
42
+ return {
43
+ prefix: match[1],
44
+ ulid: match[2]
45
+ };
46
+ }
47
+ //#endregion
48
+ export { FABRIC_ID_PREFIXES, createFabricId, isFabricId, parseFabricId };
49
+
3
50
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../ids/index.ts"],"sourcesContent":["const CROCKFORD_BASE32 = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\n\nexport const FABRIC_ID_PREFIXES = {\n\tassetEvent: \"evt\",\n\tactionInvocation: \"act\",\n\tpolicyEvaluation: \"pol\",\n\tadapterInvocation: \"adp\",\n\tadapterDeadLetterQueue: \"dlq\",\n\taccessEvent: \"acc\",\n\tprojectionSnapshot: \"psn\",\n\tcomplianceEvidencePacket: \"cep\",\n} as const;\n\nexport type FabricIdPrefix = (typeof FABRIC_ID_PREFIXES)[keyof typeof FABRIC_ID_PREFIXES] | string;\n\nconst ID_REGEX = /^([a-z][a-z0-9]{1,7})_([0-9A-Z]{26})$/;\n\nfunction randomBase32(length: number): string {\n\tlet output = \"\";\n\tconst randomValues = new Uint8Array(length);\n\tglobalThis.crypto.getRandomValues(randomValues);\n\tfor (const value of randomValues) {\n\t\toutput += CROCKFORD_BASE32[value % CROCKFORD_BASE32.length];\n\t}\n\treturn output;\n}\n\nfunction createSortableRandomId(): string {\n\tlet timestamp = Date.now();\n\tlet encodedTime = \"\";\n\tfor (let index = 0; index < 10; index++) {\n\t\tencodedTime = CROCKFORD_BASE32[timestamp % 32] + encodedTime;\n\t\ttimestamp = Math.floor(timestamp / 32);\n\t}\n\treturn `${encodedTime}${randomBase32(16)}`;\n}\n\nexport function createFabricId(prefix: FabricIdPrefix): string {\n\tif (!/^[a-z][a-z0-9]{1,7}$/.test(prefix)) {\n\t\tthrow new Error(`Invalid Fabric ID prefix: ${prefix}`);\n\t}\n\treturn `${prefix}_${createSortableRandomId()}`;\n}\n\nexport function isFabricId(id: string, prefix?: FabricIdPrefix): boolean {\n\tconst match = ID_REGEX.exec(id);\n\tif (!match) {\n\t\treturn false;\n\t}\n\treturn prefix ? match[1] === prefix : true;\n}\n\nexport function parseFabricId(id: string): { prefix: string; ulid: string } | null {\n\tconst match = ID_REGEX.exec(id);\n\tif (!match) {\n\t\treturn null;\n\t}\n\treturn { prefix: match[1], ulid: match[2] };\n}\n"],"mappings":";AAAA,MAAM,mBAAmB;AAEzB,MAAa,qBAAqB;CACjC,YAAY;CACZ,kBAAkB;CAClB,kBAAkB;CAClB,mBAAmB;CACnB,wBAAwB;CACxB,aAAa;CACb,oBAAoB;CACpB,0BAA0B;AAC3B;AAIA,MAAM,WAAW;AAEjB,SAAS,aAAa,QAAwB;CAC7C,IAAI,SAAS;CACb,MAAM,eAAe,IAAI,WAAW,MAAM;CAC1C,WAAW,OAAO,gBAAgB,YAAY;CAC9C,KAAK,MAAM,SAAS,cACnB,UAAU,iBAAiB,QAAQ;CAEpC,OAAO;AACR;AAEA,SAAS,yBAAiC;CACzC,IAAI,YAAY,KAAK,IAAI;CACzB,IAAI,cAAc;CAClB,KAAK,IAAI,QAAQ,GAAG,QAAQ,IAAI,SAAS;EACxC,cAAc,iBAAiB,YAAY,MAAM;EACjD,YAAY,KAAK,MAAM,YAAY,EAAE;CACtC;CACA,OAAO,GAAG,cAAc,aAAa,EAAE;AACxC;AAEA,SAAgB,eAAe,QAAgC;CAC9D,IAAI,CAAC,uBAAuB,KAAK,MAAM,GACtC,MAAM,IAAI,MAAM,6BAA6B,QAAQ;CAEtD,OAAO,GAAG,OAAO,GAAG,uBAAuB;AAC5C;AAEA,SAAgB,WAAW,IAAY,QAAkC;CACxE,MAAM,QAAQ,SAAS,KAAK,EAAE;CAC9B,IAAI,CAAC,OACJ,OAAO;CAER,OAAO,SAAS,MAAM,OAAO,SAAS;AACvC;AAEA,SAAgB,cAAc,IAAqD;CAClF,MAAM,QAAQ,SAAS,KAAK,EAAE;CAC9B,IAAI,CAAC,OACJ,OAAO;CAER,OAAO;EAAE,QAAQ,MAAM;EAAI,MAAM,MAAM;CAAG;AAC3C"}
@@ -0,0 +1,124 @@
1
+ import { t as SurfaceDeclaration } from "./index-CIl1rYRv.cjs";
2
+ import { o as PortableJsonSchema } from "./index-DZ4mnNb7.cjs";
3
+ //#region projections/index.d.ts
4
+ interface ReplayableAssetEvent<Payload = unknown> {
5
+ id: string;
6
+ tenantId: string;
7
+ spaceId: string;
8
+ eventType: string;
9
+ eventSchemaVersion?: number;
10
+ subjectType: string;
11
+ subjectId: string;
12
+ payload: Payload;
13
+ /**
14
+ * Monotonic ordering cursor for the tenant/space event ledger. It is not
15
+ * contiguous after a view filters event types or narrows to one subject.
16
+ */
17
+ sequence: number;
18
+ /** Optional contiguous sequence local to this subject. */
19
+ subjectSequence?: number;
20
+ occurredAt: Date | string;
21
+ recordedAt: Date | string;
22
+ actionInvocationId: string;
23
+ correlationId: string;
24
+ }
25
+ interface ViewEventConsumption {
26
+ eventType: string;
27
+ schemaVersions: number[];
28
+ }
29
+ interface ViewContract<State = unknown, Event extends ReplayableAssetEvent = ReplayableAssetEvent> extends SurfaceDeclaration {
30
+ /** Stable module-qualified logical identity, for example `orders/summary`. */
31
+ name: `${string}/${string}`;
32
+ version: string;
33
+ shape: PortableJsonSchema;
34
+ /** Optional JSON Schema for query parameters. Parameterized variants get isolated snapshots. */
35
+ parameterSchema?: PortableJsonSchema;
36
+ consumes: ViewEventConsumption[];
37
+ scope: "tenant-space";
38
+ snapshotVersion: number;
39
+ compatibleSnapshotVersions?: number[];
40
+ usage?: ViewUsageMetadata;
41
+ /** Required to transform any older compatible snapshot into the current state shape. */
42
+ upgradeSnapshot?: (data: unknown, fromVersion: number) => State | Promise<State>;
43
+ initialState: State;
44
+ applyEvent: (state: State, event: Event) => State | Promise<State>;
45
+ }
46
+ interface ViewUsageMetadata {
47
+ semanticRole?: string;
48
+ collection?: {
49
+ pagination: "cursor" | "offset" | "none";
50
+ filterSchema?: PortableJsonSchema;
51
+ sortFields?: string[];
52
+ };
53
+ freshness?: {
54
+ maximumAgeSeconds?: number;
55
+ offlineUsable?: boolean;
56
+ };
57
+ classification?: "public" | "internal" | "confidential" | "restricted";
58
+ }
59
+ declare function viewContractKey(view: Pick<ViewContract, "name" | "version">): string;
60
+ interface ViewRegistry {
61
+ register(view: ViewContract): void;
62
+ registerIfMissing(view: ViewContract): void;
63
+ resolve(name: string, version: string): ViewContract | undefined;
64
+ keys(): string[];
65
+ }
66
+ declare function createViewRegistry(views?: readonly ViewContract[]): ViewRegistry;
67
+ interface ReplayViewOptions<State, Event extends ReplayableAssetEvent = ReplayableAssetEvent> {
68
+ view: ViewContract<State, Event>;
69
+ events: Iterable<Event> | AsyncIterable<Event>;
70
+ scope: ReplayScope;
71
+ snapshot?: (ReplaySnapshot<State> & {
72
+ snapshotVersion: number;
73
+ }) | null;
74
+ /**
75
+ * Set when the event source already applied the snapshot cursor and returns
76
+ * only later events. The snapshot still seeds state, but replay must not try
77
+ * to find its cursor in the supplied incremental stream.
78
+ */
79
+ eventsStartAfterSnapshot?: boolean;
80
+ }
81
+ declare function replayView<State, Event extends ReplayableAssetEvent = ReplayableAssetEvent>({ view, events, scope, snapshot, eventsStartAfterSnapshot }: ReplayViewOptions<State, Event>): Promise<ReplayEventsResult<State, Event>>;
82
+ interface ReplayScope {
83
+ tenantId: string;
84
+ spaceId: string;
85
+ subjectType?: string;
86
+ subjectId?: string;
87
+ }
88
+ interface ReplaySnapshot<State = unknown> {
89
+ snapshotData: State;
90
+ eventCursor?: string | null;
91
+ eventSequence?: number | null;
92
+ /** Per-subject high-water marks. Values prefer subjectSequence when supplied. */
93
+ subjectSequences?: Record<string, number>;
94
+ }
95
+ type ReplayWarningCode = "cursor_not_found" | "duplicate_event" | "missing_sequence" | "subject_scope_incomplete" | "unsupported_event_version";
96
+ interface ReplayWarning {
97
+ code: ReplayWarningCode;
98
+ message: string;
99
+ eventId?: string;
100
+ subjectType?: string;
101
+ subjectId?: string;
102
+ expectedSequence?: number;
103
+ actualSequence?: number;
104
+ }
105
+ interface ReplayEventsOptions<State, Event extends ReplayableAssetEvent = ReplayableAssetEvent> {
106
+ events: Iterable<Event> | AsyncIterable<Event>;
107
+ scope: ReplayScope;
108
+ initialState: State;
109
+ snapshot?: ReplaySnapshot<State> | null;
110
+ applyEvent: (state: State, event: Event) => State | Promise<State>;
111
+ /** The supplied stream begins after the snapshot checkpoint. */
112
+ eventsStartAfterSnapshot?: boolean;
113
+ }
114
+ interface ReplayEventsResult<State, Event extends ReplayableAssetEvent = ReplayableAssetEvent> {
115
+ state: State;
116
+ appliedEvents: Event[];
117
+ warnings: ReplayWarning[];
118
+ eventCursor: string | null;
119
+ eventSequence: number;
120
+ subjectSequences: Record<string, number>;
121
+ }
122
+ declare function replayEvents<State, Event extends ReplayableAssetEvent = ReplayableAssetEvent>({ events, scope, initialState, snapshot, applyEvent, eventsStartAfterSnapshot }: ReplayEventsOptions<State, Event>): Promise<ReplayEventsResult<State, Event>>;
123
+ //#endregion
124
+ export { ReplayViewOptions as a, ReplayableAssetEvent as c, ViewRegistry as d, ViewUsageMetadata as f, viewContractKey as g, replayView as h, ReplaySnapshot as i, ViewContract as l, replayEvents as m, ReplayEventsResult as n, ReplayWarning as o, createViewRegistry as p, ReplayScope as r, ReplayWarningCode as s, ReplayEventsOptions as t, ViewEventConsumption as u };
@@ -0,0 +1,190 @@
1
+ //#region privacy/engine.d.ts
2
+ declare const ANONYMIZATION_POLICY_VERSION = "adr-026-platform-anonymization-v1";
3
+ type JsonObject = Record<string, unknown>;
4
+ interface AnonymizationFieldPolicy {
5
+ method: RedactionMethod;
6
+ match: "key" | "path";
7
+ value: string;
8
+ }
9
+ interface AnonymizationPolicy {
10
+ fields: readonly AnonymizationFieldPolicy[];
11
+ preservedSemantics?: readonly string[];
12
+ }
13
+ interface AssetEventLike {
14
+ id: string;
15
+ tenantId: string;
16
+ spaceId: string;
17
+ eventType: string;
18
+ subjectType: string;
19
+ subjectId: string;
20
+ actionInvocationId: string;
21
+ payload: unknown;
22
+ sequence: number;
23
+ occurredAt: Date;
24
+ recordedAt: Date;
25
+ correlationId: string;
26
+ causationId?: string | null;
27
+ }
28
+ interface EvidencePacketLike {
29
+ id: string;
30
+ packet: unknown;
31
+ redactionMetadata: unknown;
32
+ checksum: string;
33
+ }
34
+ interface AnonymizationLifecycleEvidence {
35
+ eventType: "AnonymizationApplied";
36
+ policyVersion: string;
37
+ jobId: string;
38
+ reason: string;
39
+ appliedAt: string;
40
+ tenantId: string;
41
+ spaceId: string | null;
42
+ counts: {
43
+ assetEvents: number;
44
+ readModels: number;
45
+ evidencePackets: number;
46
+ redactedFields: number;
47
+ };
48
+ records: Array<{
49
+ recordClass: PlatformDataClass;
50
+ recordId: string;
51
+ subjectType?: string;
52
+ subjectId?: string;
53
+ fieldManifest: Array<Pick<AnonymizationFieldMetadata, "fieldPath" | "method" | "beforeChecksum">>;
54
+ }>;
55
+ preservedSemantics: string[];
56
+ }
57
+ declare function stableChecksum(value: unknown): string;
58
+ declare class FieldRedactor {
59
+ redactField(value: unknown, method: RedactionMethod, context: AnonymizationContext, path: string): unknown;
60
+ mask(value: unknown): string | null;
61
+ hash(value: unknown): string;
62
+ tokenize(value: unknown, context: AnonymizationContext, path: string): string;
63
+ generalize(value: unknown): unknown;
64
+ }
65
+ declare class AnonymizationEngine {
66
+ #private;
67
+ constructor(policy: AnonymizationPolicy);
68
+ anonymizeJsonValue<TValue>(value: TValue, context: AnonymizationContext, dataClass: PlatformDataClass): AnonymizationResult<TValue>;
69
+ anonymizeJsonValueAtPath<TValue>(value: TValue, context: AnonymizationContext, dataClass: PlatformDataClass, basePath: string): AnonymizationResult<TValue>;
70
+ anonymizeAssetEventPayload(event: AssetEventLike, context: AnonymizationContext): AnonymizationResult<unknown>;
71
+ anonymizeEvidencePacket(packet: EvidencePacketLike, context: AnonymizationContext): AnonymizationResult<Pick<EvidencePacketLike, "packet" | "redactionMetadata" | "checksum">>;
72
+ buildAnonymizationLifecycleEvidence(input: {
73
+ context: AnonymizationContext;
74
+ assetEvents?: Array<{
75
+ event: AssetEventLike;
76
+ metadata: AnonymizationMetadata;
77
+ }>;
78
+ readModels?: Array<{
79
+ modelKind: string;
80
+ record: JsonObject & {
81
+ id: string;
82
+ };
83
+ metadata: AnonymizationMetadata;
84
+ }>;
85
+ evidencePackets?: Array<{
86
+ packet: EvidencePacketLike;
87
+ metadata: AnonymizationMetadata;
88
+ }>;
89
+ }): AnonymizationLifecycleEvidence;
90
+ }
91
+ //#endregion
92
+ //#region privacy/index.d.ts
93
+ declare const PLATFORM_PRIVACY_POLICY_VERSION = "fabric-platform-privacy-v1";
94
+ type RedactionMethod = "nullify" | "mask" | "hash" | "tokenize" | "generalize" | "drop";
95
+ declare function anonymizeJsonValue<TValue>(value: TValue, context: AnonymizationContext, dataClass: PlatformDataClass, policy: AnonymizationPolicy): AnonymizationResult<TValue>;
96
+ declare function anonymizeAssetEventPayload(event: AssetEventLike, context: AnonymizationContext, policy: AnonymizationPolicy): AnonymizationResult<unknown>;
97
+ declare function anonymizeEvidencePacket(packet: EvidencePacketLike, context: AnonymizationContext, policy: AnonymizationPolicy): AnonymizationResult<Pick<EvidencePacketLike, "packet" | "redactionMetadata" | "checksum">>;
98
+ declare function buildAnonymizationLifecycleEvidence(input: {
99
+ context: AnonymizationContext;
100
+ assetEvents?: Array<{
101
+ event: AssetEventLike;
102
+ metadata: AnonymizationMetadata;
103
+ }>;
104
+ readModels?: Array<{
105
+ modelKind: string;
106
+ record: Record<string, unknown> & {
107
+ id: string;
108
+ };
109
+ metadata: AnonymizationMetadata;
110
+ }>;
111
+ evidencePackets?: Array<{
112
+ packet: EvidencePacketLike;
113
+ metadata: AnonymizationMetadata;
114
+ }>;
115
+ }, policy: AnonymizationPolicy): AnonymizationLifecycleEvidence;
116
+ type PlatformDataClass = "asset_event" | "read_model" | "raw_payload" | "evidence_packet" | "action_evidence" | "access_event";
117
+ interface RedactionRule {
118
+ fieldPath: string;
119
+ method: RedactionMethod;
120
+ reason: string;
121
+ dataClass?: PlatformDataClass;
122
+ }
123
+ interface DataClassificationRule {
124
+ fieldPath: string;
125
+ classification: string;
126
+ containsDirectIdentifier?: boolean;
127
+ containsSensitiveData?: boolean;
128
+ }
129
+ interface AnonymizationContext {
130
+ tenantId: string;
131
+ spaceId?: string | null;
132
+ jobId: string;
133
+ reason: string;
134
+ redactedAt?: Date;
135
+ policyVersion?: string;
136
+ }
137
+ interface AnonymizationFieldMetadata {
138
+ fieldPath: string;
139
+ method: RedactionMethod;
140
+ policyVersion: string;
141
+ jobId: string;
142
+ redactedAt: string;
143
+ reason: string;
144
+ dataClass: PlatformDataClass;
145
+ beforeChecksum: string;
146
+ }
147
+ interface AnonymizationMetadata {
148
+ redactionState: "anonymized";
149
+ policyVersion: string;
150
+ jobId: string;
151
+ redactedAt: string;
152
+ reason: string;
153
+ dataClass: PlatformDataClass;
154
+ redactedFields: AnonymizationFieldMetadata[];
155
+ preservedSemantics: string[];
156
+ }
157
+ interface AnonymizationResult<TValue> {
158
+ value: TValue;
159
+ metadata: AnonymizationMetadata;
160
+ }
161
+ interface AnalyticsDataContractSource {
162
+ name: string;
163
+ privacyClass: "raw" | "operational_pii" | "tenant_scoped_tokenized" | "anonymized" | "aggregated" | "differentially_minimized";
164
+ containsDirectIdentifiers?: boolean;
165
+ containsGloballyStablePersonTokens?: boolean;
166
+ anonymizationPolicyVersion?: string;
167
+ minimumGroupSize?: number;
168
+ }
169
+ interface AnalyticsDataContract {
170
+ contractId: string;
171
+ status: "draft" | "accepted" | "deprecated";
172
+ crossTenant: boolean;
173
+ acceptedBy?: string;
174
+ acceptedAt?: string;
175
+ adrReference?: string;
176
+ sources: AnalyticsDataContractSource[];
177
+ }
178
+ interface AnalyticsEligibilityDecision {
179
+ eligible: boolean;
180
+ policyVersion: string;
181
+ reasons: string[];
182
+ }
183
+ interface RetentionRule {
184
+ dataClass: PlatformDataClass;
185
+ retainForDays: number;
186
+ afterRetention: "delete" | "anonymize" | "archive";
187
+ legalHoldExempt?: boolean;
188
+ }
189
+ //#endregion
190
+ export { AssetEventLike as C, stableChecksum as E, AnonymizationPolicy as S, FieldRedactor as T, buildAnonymizationLifecycleEvidence as _, AnonymizationFieldMetadata as a, AnonymizationFieldPolicy as b, DataClassificationRule as c, RedactionMethod as d, RedactionRule as f, anonymizeJsonValue as g, anonymizeEvidencePacket as h, AnonymizationContext as i, PLATFORM_PRIVACY_POLICY_VERSION as l, anonymizeAssetEventPayload as m, AnalyticsDataContractSource as n, AnonymizationMetadata as o, RetentionRule as p, AnalyticsEligibilityDecision as r, AnonymizationResult as s, AnalyticsDataContract as t, PlatformDataClass as u, ANONYMIZATION_POLICY_VERSION as v, EvidencePacketLike as w, AnonymizationLifecycleEvidence as x, AnonymizationEngine as y };