@ibgib/ts-gib 0.4.9

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 (87) hide show
  1. package/.vscode/launch.json +24 -0
  2. package/.vscode/settings.json +34 -0
  3. package/.vscode/tasks.json +37 -0
  4. package/CHANGELOG.md +159 -0
  5. package/README.md +502 -0
  6. package/dist/V1/constants.d.mts +22 -0
  7. package/dist/V1/constants.d.mts.map +1 -0
  8. package/dist/V1/constants.mjs +21 -0
  9. package/dist/V1/constants.mjs.map +1 -0
  10. package/dist/V1/factory.d.mts +23 -0
  11. package/dist/V1/factory.d.mts.map +1 -0
  12. package/dist/V1/factory.mjs +78 -0
  13. package/dist/V1/factory.mjs.map +1 -0
  14. package/dist/V1/index.d.mts +6 -0
  15. package/dist/V1/index.d.mts.map +1 -0
  16. package/dist/V1/index.mjs +6 -0
  17. package/dist/V1/index.mjs.map +1 -0
  18. package/dist/V1/sha256v1.d.mts +19 -0
  19. package/dist/V1/sha256v1.d.mts.map +1 -0
  20. package/dist/V1/sha256v1.mjs +86 -0
  21. package/dist/V1/sha256v1.mjs.map +1 -0
  22. package/dist/V1/transforms/fork.d.mts +16 -0
  23. package/dist/V1/transforms/fork.d.mts.map +1 -0
  24. package/dist/V1/transforms/fork.mjs +111 -0
  25. package/dist/V1/transforms/fork.mjs.map +1 -0
  26. package/dist/V1/transforms/index.d.mts +5 -0
  27. package/dist/V1/transforms/index.d.mts.map +1 -0
  28. package/dist/V1/transforms/index.mjs +5 -0
  29. package/dist/V1/transforms/index.mjs.map +1 -0
  30. package/dist/V1/transforms/mut8.d.mts +50 -0
  31. package/dist/V1/transforms/mut8.d.mts.map +1 -0
  32. package/dist/V1/transforms/mut8.mjs +246 -0
  33. package/dist/V1/transforms/mut8.mjs.map +1 -0
  34. package/dist/V1/transforms/rel8.d.mts +14 -0
  35. package/dist/V1/transforms/rel8.d.mts.map +1 -0
  36. package/dist/V1/transforms/rel8.mjs +176 -0
  37. package/dist/V1/transforms/rel8.mjs.map +1 -0
  38. package/dist/V1/transforms/transform-helper.d.mts +92 -0
  39. package/dist/V1/transforms/transform-helper.d.mts.map +1 -0
  40. package/dist/V1/transforms/transform-helper.mjs +189 -0
  41. package/dist/V1/transforms/transform-helper.mjs.map +1 -0
  42. package/dist/V1/types.d.mts +79 -0
  43. package/dist/V1/types.d.mts.map +1 -0
  44. package/dist/V1/types.mjs +12 -0
  45. package/dist/V1/types.mjs.map +1 -0
  46. package/dist/helper.d.mts +77 -0
  47. package/dist/helper.d.mts.map +1 -0
  48. package/dist/helper.mjs +179 -0
  49. package/dist/helper.mjs.map +1 -0
  50. package/dist/index.cjs +4 -0
  51. package/dist/index.cjs.map +1 -0
  52. package/dist/index.d.cts +4 -0
  53. package/dist/index.d.cts.map +1 -0
  54. package/dist/index.d.mts +4 -0
  55. package/dist/index.d.mts.map +1 -0
  56. package/dist/index.mjs +4 -0
  57. package/dist/index.mjs.map +1 -0
  58. package/dist/types.d.mts +242 -0
  59. package/dist/types.d.mts.map +1 -0
  60. package/dist/types.mjs +2 -0
  61. package/dist/types.mjs.map +1 -0
  62. package/jasmine-browser.json +18 -0
  63. package/jasmine.json +6 -0
  64. package/package.json +61 -0
  65. package/src/V1/constants.mts +23 -0
  66. package/src/V1/factory.mts +110 -0
  67. package/src/V1/factory.spec.mts +162 -0
  68. package/src/V1/index.mts +5 -0
  69. package/src/V1/sha256v1.mts +85 -0
  70. package/src/V1/sha256v1.spec.mts +221 -0
  71. package/src/V1/transforms/fork.mts +100 -0
  72. package/src/V1/transforms/fork.spec.mts +410 -0
  73. package/src/V1/transforms/index.mts +4 -0
  74. package/src/V1/transforms/mut8.mts +239 -0
  75. package/src/V1/transforms/mut8.spec.mts +656 -0
  76. package/src/V1/transforms/rel8.mts +173 -0
  77. package/src/V1/transforms/rel8.spec.mts +556 -0
  78. package/src/V1/transforms/transform-helper.mts +263 -0
  79. package/src/V1/transforms/transform-helper.spec.mts +45 -0
  80. package/src/V1/types.mts +84 -0
  81. package/src/helper.mts +192 -0
  82. package/src/helper.spec.mts +127 -0
  83. package/src/index.cts +3 -0
  84. package/src/index.mts +3 -0
  85. package/src/types.mts +242 -0
  86. package/tsconfig.json +15 -0
  87. package/tsconfig.test.json +10 -0
@@ -0,0 +1,176 @@
1
+ import { getIbGibAddr, clone, getTimestamp } from '../../helper.mjs';
2
+ import { Rel8n } from '../types.mjs';
3
+ import { IBGIB_DELIMITER, FORBIDDEN_ADD_RENAME_REMOVE_REL8N_NAMES } from '../constants.mjs';
4
+ import { buildDna, getGib, isPrimitive } from './transform-helper.mjs';
5
+ /**
6
+ * Original-ish V1 transform behavior.
7
+ *
8
+ * NOTE:
9
+ * This is NOT going to do the plan^gib stuff ATM.
10
+ * Also this does NOT add any identity information ATM.
11
+ */
12
+ /**
13
+ * Relate (and/or unrelate) other ibGib(s), thus mutating it **extrinsically**.
14
+ */
15
+ export async function rel8(opts) {
16
+ const { noTimestamp, dna, linkedRel8ns, rel8nsToAddByAddr, rel8nsToRemoveByAddr, type = 'rel8' } = opts;
17
+ let src = opts.src;
18
+ const lc = '[rel8_v1]';
19
+ if (type !== 'rel8') {
20
+ throw new Error(`${lc} not a rel8 transform.`);
21
+ }
22
+ if (!opts.type) {
23
+ opts.type = 'rel8';
24
+ }
25
+ // #region validation
26
+ if (type !== 'rel8') {
27
+ throw new Error(`${lc} not a rel8 transform.`);
28
+ }
29
+ if (!opts.type) {
30
+ opts.type = 'rel8';
31
+ }
32
+ if (!src) {
33
+ throw new Error(`${lc} src required.`);
34
+ }
35
+ if (!src.ib) {
36
+ throw new Error(`${lc} src.ib required.`);
37
+ }
38
+ if (src.ib.includes(IBGIB_DELIMITER)) {
39
+ throw new Error(`${lc} ib can't contain hardcoded delimiter (${IBGIB_DELIMITER}) right now.`);
40
+ }
41
+ if (!src.gib) {
42
+ throw new Error(`${lc} src.gib required.`);
43
+ }
44
+ // if (!src.gib || src.gib === GIB) { throw new Error(`${lc} cannot relate to primitive ibGib.`); }
45
+ if (isPrimitive({ ibGib: src })) {
46
+ throw new Error(`${lc} cannot relate/unrelate primitive ibgib`);
47
+ }
48
+ // if neither add nor remove specified, what are we even doing?
49
+ const isAdding = rel8nsToAddByAddr && Object.keys(rel8nsToAddByAddr).length > 0;
50
+ const isRemoving = rel8nsToRemoveByAddr && Object.keys(rel8nsToRemoveByAddr).length > 0;
51
+ if (!(isAdding || isRemoving)) {
52
+ throw new Error(`${lc} gotta provide relations to either add or remove.`);
53
+ }
54
+ const srcAddr = getIbGibAddr({ ib: src.ib, gib: src.gib });
55
+ if (opts.srcAddr && srcAddr !== opts.srcAddr) {
56
+ throw new Error(`${lc} srcAddr from src does not equal opts.srcAddr`);
57
+ }
58
+ opts.srcAddr = srcAddr;
59
+ // validate all ibgib addresses to add/remove
60
+ const fnValidIbGibAddr = (s) => {
61
+ // for now, only requiring a single character and trailing delim.
62
+ // i.e. primitive with implied 'gib'
63
+ return s && typeof (s) === 'string' && s.length >= 2 &&
64
+ s.includes('^') && s.split('^')[0].length >= 1;
65
+ };
66
+ Object.keys(rel8nsToAddByAddr || {})
67
+ .map(x => (rel8nsToAddByAddr || {})[x])
68
+ .forEach(rel8ds => {
69
+ if (!(rel8ds && rel8ds.every(rel8d => fnValidIbGibAddr(rel8d)))) {
70
+ throw new Error(`${lc} Invalid rel8n attempt. Must be valid ibGibs. Did you include a delimiter (^)?`);
71
+ }
72
+ });
73
+ Object.keys(rel8nsToRemoveByAddr || {})
74
+ .map(x => (rel8nsToRemoveByAddr || {})[x])
75
+ .forEach(rel8ds => {
76
+ if (!(rel8ds && rel8ds.every(rel8d => fnValidIbGibAddr(rel8d)))) {
77
+ throw new Error(`${lc} Invalid remove rel8n attempt. Must be valid ibGibs. Did you include a delimiter (^)?`);
78
+ }
79
+ });
80
+ // #endregion validation
81
+ // we want to forget `src` proper very quickly because it may have other
82
+ // non-IbGib properties that are not relevant to our transform.
83
+ let dto = { ib: src.ib, gib: src.gib, };
84
+ if (src.data && Object.keys(src.data).length > 0) {
85
+ dto.data = src.data;
86
+ }
87
+ if (src.rel8ns && Object.keys(src.rel8ns).length > 0) {
88
+ dto.rel8ns = src.rel8ns;
89
+ }
90
+ src = dto;
91
+ const newIbGib = clone(src);
92
+ const data = clone(src.data || {});
93
+ if (opts.nCounter || Object.keys(data).includes('n')) {
94
+ if (Object.keys(data).includes('n')) {
95
+ if (Number.isInteger(data.n)) {
96
+ if (data.n >= 0) {
97
+ data.n = data.n + 1;
98
+ }
99
+ else {
100
+ console.warn(`${lc} data.n is less than 0, which is unexpected. Resetting data.n to 0.`);
101
+ data.n = 0;
102
+ }
103
+ }
104
+ else {
105
+ throw new Error('cannot increment nCounter because data.n is not a number.');
106
+ }
107
+ }
108
+ else {
109
+ data.n = 0;
110
+ }
111
+ }
112
+ if (!noTimestamp) {
113
+ data.timestamp = getTimestamp();
114
+ }
115
+ const rel8ns = clone(src.rel8ns || {});
116
+ Object.keys(rel8nsToAddByAddr || {}).forEach(rel8nName => {
117
+ if (FORBIDDEN_ADD_RENAME_REMOVE_REL8N_NAMES.includes(rel8nName)) {
118
+ throw new Error(`${lc} Cannot manually add relationship: ${rel8nName}.`);
119
+ }
120
+ const existingRel8d = rel8ns[rel8nName] || [];
121
+ const toAddRel8d = rel8nsToAddByAddr[rel8nName];
122
+ const newRel8d = toAddRel8d.filter(x => !existingRel8d.includes(x));
123
+ rel8ns[rel8nName] = existingRel8d.concat(newRel8d);
124
+ });
125
+ Object.keys(rel8nsToRemoveByAddr || {}).forEach(rel8nName => {
126
+ if (FORBIDDEN_ADD_RENAME_REMOVE_REL8N_NAMES.includes(rel8nName)) {
127
+ throw new Error(`${lc} Cannot manually remove relationship: ${rel8nName}.`);
128
+ }
129
+ const existingRel8d = rel8ns[rel8nName] || [];
130
+ const toRemoveRel8d = rel8nsToRemoveByAddr[rel8nName] || [];
131
+ const prunedRel8d = existingRel8d.filter((x) => !toRemoveRel8d.includes(x));
132
+ if (prunedRel8d.length > 0) {
133
+ rel8ns[rel8nName] = prunedRel8d;
134
+ }
135
+ else {
136
+ delete rel8ns[rel8nName];
137
+ }
138
+ });
139
+ rel8ns.past = (rel8ns.past || []).concat([srcAddr]);
140
+ (linkedRel8ns || [])
141
+ .filter(linkedRel8nName => Object.keys(rel8ns).includes(linkedRel8nName))
142
+ .filter(linkedRel8nName => (rel8ns[linkedRel8nName] || []).length > 1)
143
+ .forEach(linkedRel8nName => {
144
+ // take the last item only, and put it in an array
145
+ let initialLength = rel8ns[linkedRel8nName].length;
146
+ rel8ns[linkedRel8nName] = [rel8ns[linkedRel8nName][initialLength - 1]];
147
+ });
148
+ // rel8ns.past = linkedRel8ns?.includes(Rel8n.past) ?
149
+ // [srcAddr] :
150
+ // (rel8ns.past || []).concat([srcAddr]);
151
+ if (data.isTjp) {
152
+ let tjpRel8n = rel8ns['tjp'] || [];
153
+ tjpRel8n.push(srcAddr);
154
+ rel8ns.tjp = tjpRel8n;
155
+ delete data.isTjp;
156
+ }
157
+ newIbGib.data = data;
158
+ newIbGib.rel8ns = rel8ns;
159
+ // newIbGib.gib = await sha256v1(newIbGib, '');
160
+ const hasTjp = (rel8ns.tjp?.length ?? 0) > 0;
161
+ let transformDna = null;
162
+ if (dna) {
163
+ transformDna = await buildDna(opts);
164
+ const dnaAddr = getIbGibAddr({ ibGib: transformDna });
165
+ rel8ns.dna = linkedRel8ns?.includes(Rel8n.dna) ?
166
+ rel8ns.dna = [dnaAddr] :
167
+ rel8ns.dna = (rel8ns.dna || []).concat(dnaAddr);
168
+ }
169
+ newIbGib.gib = await getGib({ ibGib: newIbGib, hasTjp });
170
+ const result = { newIbGib };
171
+ if (transformDna) {
172
+ result.dnas = [transformDna];
173
+ }
174
+ return result;
175
+ }
176
+ //# sourceMappingURL=rel8.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rel8.mjs","sourceRoot":"","sources":["../../../src/V1/transforms/rel8.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import { TransformOpts, IbGib, Gib, IbGibAddr } from "../../types.mjs";
2
+ import { GibInfo, IbGib_V1 } from "../types.mjs";
3
+ export declare function buildDna<TSrc extends IbGib_V1, TOpts extends TransformOpts<TSrc>>(opts: TOpts): Promise<IbGib_V1>;
4
+ export declare function isDna({ ibGib }: {
5
+ ibGib: IbGib;
6
+ }): boolean;
7
+ export declare function isPrimitive({ ibGib, gib }: {
8
+ ibGib?: IbGib_V1;
9
+ gib?: Gib;
10
+ }): boolean;
11
+ /**
12
+ * Generates the gib of a given `ibGib` depending on
13
+ * @returns gib - either bare hash for those with no tjp; or tjp-scoped hash; or 'gib' for primitives
14
+ */
15
+ export declare function getGib({ ibGib, hasTjp, tjpAddr, gibDelimiter, isPrimitive, hashAlgorithm, }: {
16
+ /**
17
+ * We'll take the `ib`, `data`, and `rel8ns` from this
18
+ */
19
+ ibGib: IbGib_V1;
20
+ /**
21
+ * If true, then we'll treat this as having a tjp.
22
+ * If falsy, then we'll check the internals of the ibGib to see if it has a tjp.
23
+ */
24
+ hasTjp?: boolean;
25
+ /**
26
+ * @deprecated
27
+ *
28
+ * IGNORED
29
+ *
30
+ * This is now always searched for in the ibGib itself.
31
+ */
32
+ tjpAddr?: IbGibAddr;
33
+ /**
34
+ * What to use as the delimiter for the `gib`.
35
+ *
36
+ * @default GIB_DELIMITER
37
+ *
38
+ * ## notes
39
+ *
40
+ * This is not the same thing necessarily as the ib^gib delimiter.
41
+ * In fact the default gibDelimiter ATOW ('.') is different than the
42
+ * default ib^gib delimiter ('^').
43
+ */
44
+ gibDelimiter?: string;
45
+ /**
46
+ * If this is primitive, then the `gib` is always GIB ("gib" string literal).
47
+ */
48
+ isPrimitive?: boolean;
49
+ /**
50
+ * Hash algorithm to use when calculating the gib hash of the ibgib datum.
51
+ *
52
+ * ## notes
53
+ *
54
+ * * I'm just including this now to show where we will expand when working with
55
+ * multiple hash algorithms. For now though, in all of V1, we use 'SHA-256'
56
+ * when calculating the gib hashes. This is why I'm hard-coding the type
57
+ * here instead of using this lib's `HashAlgorithm` type.
58
+ * * This param is actually ignored ATOW.
59
+ * * In my current consuming use case (ionic-gib), though,
60
+ * I am indeed using SHA-512 when encrypting using encrypt-gib. I only note
61
+ * this in case someone sees "SHA-512" code somewhere and is confused.
62
+ */
63
+ hashAlgorithm?: 'SHA-256';
64
+ }): Promise<string>;
65
+ /**
66
+ * Parses gib (either via `gib` param or `ibGibAddr.gib`) and returns information
67
+ * about it.
68
+ *
69
+ * @returns Information about the given `gib` (or `gib` extracted from `ibGibAddr`)
70
+ */
71
+ export declare function getGibInfo({ ibGibAddr, gib, gibDelimiter, }: {
72
+ /**
73
+ * If given, will extract `gib` from this.
74
+ */
75
+ ibGibAddr?: IbGibAddr;
76
+ /**
77
+ * `gib` to analyze.
78
+ */
79
+ gib?: Gib;
80
+ /**
81
+ * Delimiter among pieces of gib, if applicable.
82
+ *
83
+ * @default GIB_DELIMITER (ATOW '.')
84
+ *
85
+ * ## notes
86
+ *
87
+ * Some `gib` values will include tjp information, while others
88
+ * are just the hash.
89
+ */
90
+ gibDelimiter?: string;
91
+ }): GibInfo;
92
+ //# sourceMappingURL=transform-helper.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-helper.d.mts","sourceRoot":"","sources":["../../../src/V1/transforms/transform-helper.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAM,SAAS,EAAG,MAAM,iBAAiB,CAAC;AAG5E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAG,MAAM,cAAc,CAAC;AAGlD,wBAAsB,QAAQ,CAAC,IAAI,SAAS,QAAQ,EAAE,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,EACnF,IAAI,EAAE,KAAK,GACZ,OAAO,CAAC,QAAQ,CAAC,CAgCnB;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAsB1D;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAA;CAAE,GAAG,OAAO,CASpF;AAED;;;GAGG;AACH,wBAAsB,MAAM,CAAC,EACzB,KAAK,EACL,MAAM,EACN,OAAO,EACP,YAAY,EACZ,WAAW,EACX,aAAa,GAChB,EAAE;IACC;;OAEG;IACH,KAAK,EAAE,QAAQ,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CA0DlB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACvB,SAAS,EACT,GAAG,EACH,YAAY,GACf,EAAE;IACC;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC;IACV;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAmCV"}
@@ -0,0 +1,189 @@
1
+ import { clone, getIbGibAddr, getIbAndGib, extractErrorMsg, } from "../../helper.mjs";
2
+ import { sha256v1, } from "../sha256v1.mjs";
3
+ import { IBGIB_DELIMITER, GIB, GIB_DELIMITER } from "../constants.mjs";
4
+ export async function buildDna(opts) {
5
+ const transformData = clone(opts);
6
+ let lc = `[${buildDna.name}]`;
7
+ // remove references to the srcAddr, as this will be captured
8
+ // by the ibGib's `past` rel8n. This way, we can reapply dna
9
+ // to different src's more easily, as well as have less unique dna
10
+ if (transformData.srcAddr) {
11
+ delete transformData.srcAddr;
12
+ }
13
+ // remove all references to actual objects in this, we just
14
+ // want the data. ATOW, src is a reference to the src object
15
+ // and we only want the srcAddr
16
+ delete transformData.src;
17
+ // dna is never timestamped or uniquely identified hmm...
18
+ // or rel8d to anything...hmmm
19
+ // so much dna, best to minimize though of course we dont
20
+ // want to prematurely optimize...but there's a looooot of dna.
21
+ // best to share/reuse as much as possible.
22
+ const result = {
23
+ ib: transformData.type,
24
+ data: transformData,
25
+ rel8ns: {
26
+ ancestor: [
27
+ `${transformData.type.toString()}${IBGIB_DELIMITER}${GIB}` // e.g. fork^gib
28
+ ]
29
+ }
30
+ };
31
+ result.gib = await sha256v1(result);
32
+ return result;
33
+ }
34
+ export function isDna({ ibGib }) {
35
+ const lc = `[${isDna.name}]`;
36
+ try {
37
+ if (!ibGib) {
38
+ throw new Error(`ibGib required.`);
39
+ }
40
+ // console.log(`${lc} ibGib: ${pretty(ibGib)}`);
41
+ // ancestor is known transform is the best way for v1 ATOW
42
+ const knownTransformPrimitiveAddrs = ['fork', 'mut8', 'rel8', 'plan'].map(x => `${x}^${GIB}`); // plan from prev versions
43
+ const hasTransformAncestor = (ibGib.rel8ns) &&
44
+ (ibGib.rel8ns.ancestor) &&
45
+ (Array.isArray(ibGib.rel8ns.ancestor)) &&
46
+ (ibGib.rel8ns.ancestor).
47
+ some((x) => knownTransformPrimitiveAddrs.includes(x));
48
+ return hasTransformAncestor || false;
49
+ }
50
+ catch (error) {
51
+ console.error(`${lc} ${extractErrorMsg(error)}`);
52
+ throw error;
53
+ }
54
+ }
55
+ export function isPrimitive({ ibGib, gib }) {
56
+ if (ibGib) {
57
+ return isPrimitive({ gib: ibGib.gib });
58
+ }
59
+ else if (gib) {
60
+ return gib === GIB;
61
+ }
62
+ else {
63
+ // falsy gib means it's primitive or a programming error...hmm
64
+ return true;
65
+ }
66
+ }
67
+ /**
68
+ * Generates the gib of a given `ibGib` depending on
69
+ * @returns gib - either bare hash for those with no tjp; or tjp-scoped hash; or 'gib' for primitives
70
+ */
71
+ export async function getGib({ ibGib, hasTjp, tjpAddr, gibDelimiter, isPrimitive, hashAlgorithm, }) {
72
+ const lc = `[${getGib.name}]`;
73
+ try {
74
+ if (!ibGib) {
75
+ throw new Error(`ibGib required. (E: 17d073226b9d42fd841e5a94b065ef21)`);
76
+ }
77
+ if (isPrimitive) {
78
+ return GIB;
79
+ }
80
+ const ibGibHash = await sha256v1(ibGib, '');
81
+ const rel8ns = ibGib.rel8ns ?? {};
82
+ const data = ibGib.data ?? {};
83
+ gibDelimiter = gibDelimiter || GIB_DELIMITER;
84
+ if (!hasTjp) {
85
+ hasTjp = (rel8ns.tjp?.length ?? []) > 0 || data.isTjp || false;
86
+ }
87
+ if (hasTjp) {
88
+ let tjpAddrGib;
89
+ if (rel8ns.tjp) {
90
+ if (rel8ns.tjp.length === 1) {
91
+ if (rel8ns.tjp[0]) { // checking for empty string
92
+ tjpAddr = rel8ns.tjp[0];
93
+ }
94
+ else {
95
+ throw new Error(`rel8ns.tjp[0] is falsy. (E: ed879d2b039543f8b1902e8b7b5a5a7b)`);
96
+ }
97
+ }
98
+ else if (rel8ns.tjp.length > 1) {
99
+ if (rel8ns.tjp[rel8ns.tjp.length - 1]) {
100
+ console.warn(`${lc} found more than one tjp addr...only expecting 1 ATOW. (W: 10ed43f716e743e0afd1954f1ab46789)`);
101
+ tjpAddr = rel8ns.tjp[rel8ns.tjp.length - 1];
102
+ }
103
+ else {
104
+ throw new Error(`multiple tjp addrs, and the last (most recent) one is falsy. (E: bc835dc89be24075bba8b2b6616ea069)`);
105
+ }
106
+ }
107
+ else {
108
+ // empty rel8ns.tjp array?
109
+ throw new Error(`hasTjp is true but rel8ns.tjp is empty array. (E: d08b2f9e86494814b5e7d7b4602b2ab7)`);
110
+ }
111
+ }
112
+ else if (data.isTjp) {
113
+ // the ibGib itself is the tjp
114
+ tjpAddr = getIbGibAddr({ ib: ibGib.ib, gib: ibGibHash });
115
+ }
116
+ else {
117
+ throw new Error(`hasTjp is true, but both ibGib.rel8ns.tjp and ibGib.data.isTjp are falsy. (E: 4e246897e52044789594d853bb5b66ee)`);
118
+ }
119
+ tjpAddrGib = tjpAddr ? getIbAndGib({ ibGibAddr: tjpAddr }).gib : undefined;
120
+ if (tjpAddrGib) {
121
+ // if the ibGib IS the tjp, then the gib is only the hash
122
+ // if the ibGib is NOT the tjp, then the gib is the hash plus
123
+ // tjpGib. note in the future, if multiple tjps are going, then
124
+ // tjpAddrGib itself may have another delim inside it, so we
125
+ // will end up with a gib with multiple delimiters.
126
+ return data.isTjp ? ibGibHash : `${ibGibHash}${GIB_DELIMITER}${tjpAddrGib}`;
127
+ }
128
+ else {
129
+ throw new Error(`hasTjp is true but could not find tjpAddrGib. (E: 1863df626b754744a1d431a683cb0ba0)`);
130
+ }
131
+ }
132
+ else {
133
+ // no tjp, so gib is just the hash
134
+ return ibGibHash;
135
+ }
136
+ }
137
+ catch (error) {
138
+ console.error(`${lc} ${extractErrorMsg(error)}`);
139
+ throw error;
140
+ }
141
+ }
142
+ /**
143
+ * Parses gib (either via `gib` param or `ibGibAddr.gib`) and returns information
144
+ * about it.
145
+ *
146
+ * @returns Information about the given `gib` (or `gib` extracted from `ibGibAddr`)
147
+ */
148
+ export function getGibInfo({ ibGibAddr, gib, gibDelimiter, }) {
149
+ const lc = `[${getGibInfo.name}]`;
150
+ try {
151
+ if (!ibGibAddr && !gib) {
152
+ throw new Error(`Either ibGibAddr or gib required. (E: 25e3dcbe63cd44909032df12af9df75e)`);
153
+ }
154
+ gib = gib || getIbAndGib({ ibGibAddr }).gib;
155
+ if (gib === GIB) {
156
+ return { isPrimitive: true };
157
+ }
158
+ gibDelimiter = gibDelimiter ?? GIB_DELIMITER;
159
+ if (gib.includes(gibDelimiter)) {
160
+ const pieces = gib.split(gibDelimiter);
161
+ if (pieces.some(p => p === '')) {
162
+ throw new Error(`unexpected gib that contains gibDelimiter (${gibDelimiter}) but has at least one piece with empty string. (E: 75a94280045541009ee68182d12d3449)`);
163
+ }
164
+ const piecesCount = pieces.length;
165
+ if (piecesCount > 2) {
166
+ console.warn(`${lc} gib only expected to have two pieces ATOW. re-examine please. (W: aa4283ac5a5747a386a69966ecdad39d)`);
167
+ }
168
+ const punctiliarHashPiece = pieces.splice(0, 1);
169
+ return {
170
+ punctiliarHash: punctiliarHashPiece[0],
171
+ tjpGib: pieces.join(gibDelimiter),
172
+ piecesCount,
173
+ delimiter: gibDelimiter,
174
+ };
175
+ }
176
+ else {
177
+ return {
178
+ punctiliarHash: gib,
179
+ piecesCount: 1,
180
+ delimiter: gibDelimiter,
181
+ };
182
+ }
183
+ }
184
+ catch (error) {
185
+ console.error(`${lc} ${extractErrorMsg(error)}`);
186
+ throw error;
187
+ }
188
+ }
189
+ //# sourceMappingURL=transform-helper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-helper.mjs","sourceRoot":"","sources":["../../../src/V1/transforms/transform-helper.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAiB,eAAe,GAAG,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAAE,QAAQ,GAAG,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC1B,IAAW;IAEX,MAAM,aAAa,GAAU,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;IAE9B,6DAA6D;IAC7D,4DAA4D;IAC5D,kEAAkE;IAClE,IAAI,aAAa,CAAC,OAAO,EAAE;QAAE,OAAO,aAAa,CAAC,OAAO,CAAC;KAAE;IAE5D,2DAA2D;IAC3D,4DAA4D;IAC5D,+BAA+B;IAC/B,OAAO,aAAa,CAAC,GAAG,CAAC;IAEzB,yDAAyD;IACzD,8BAA8B;IAC9B,yDAAyD;IACzD,+DAA+D;IAC/D,2CAA2C;IAC3C,MAAM,MAAM,GAAa;QACrB,EAAE,EAAE,aAAa,CAAC,IAAK;QACvB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE;YACJ,QAAQ,EAAE;gBACN,GAAG,aAAa,CAAC,IAAK,CAAC,QAAQ,EAAE,GAAG,eAAe,GAAG,GAAG,EAAE,CAAC,gBAAgB;aAC/E;SACJ;KACJ,CAAC;IAEF,MAAM,CAAC,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,EAAoB;IAC7C,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;IAC7B,IAAI;QACA,IAAI,CAAC,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;SAAE;QAEnD,gDAAgD;QAEhD,0DAA0D;QAC1D,MAAM,4BAA4B,GAC9B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,0BAA0B;QACxF,MAAM,oBAAoB,GACtB,CAAE,KAAa,CAAC,MAAM,CAAC;YACvB,CAAE,KAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChC,CAAC,KAAK,CAAC,OAAO,CAAE,KAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7C,CAAE,KAAa,CAAC,MAAM,CAAC,QAAQ,CAAiB;gBAC9C,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnE,OAAO,oBAAoB,IAAI,KAAK,CAAC;KACxC;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;KACf;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAmC;IACvE,IAAI,KAAK,EAAE;QACP,OAAO,WAAW,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;KAC1C;SAAM,IAAI,GAAG,EAAE;QACZ,OAAO,GAAG,KAAK,GAAG,CAAC;KACtB;SAAM;QACH,8DAA8D;QAC9D,OAAO,IAAI,CAAC;KACf;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EACzB,KAAK,EACL,MAAM,EACN,OAAO,EACP,YAAY,EACZ,WAAW,EACX,aAAa,GAkDhB;IACG,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC;IAC9B,IAAI;QACA,IAAI,CAAC,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;SAAE;QACzF,IAAI,WAAW,EAAE;YAAE,OAAO,GAAG,CAAC;SAAE;QAChC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9B,YAAY,GAAG,YAAY,IAAI,aAAa,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE;YAAE,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;SAAE;QAChF,IAAI,MAAM,EAAE;YACR,IAAI,UAA8B,CAAC;YACnC,IAAI,MAAM,CAAC,GAAG,EAAE;gBACZ,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzB,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,4BAA4B;wBAC7C,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBAC3B;yBAAM;wBACH,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;qBACpF;iBACJ;qBAAM,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;wBACnC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,8FAA8F,CAAC,CAAC;wBAClH,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qBAC/C;yBAAM;wBACH,MAAM,IAAI,KAAK,CAAC,oGAAoG,CAAC,CAAC;qBACzH;iBACJ;qBAAM;oBACH,0BAA0B;oBAC1B,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;iBAC1G;aACJ;iBAAM,IAAI,IAAI,CAAC,KAAK,EAAE;gBACnB,8BAA8B;gBAC9B,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;aAC5D;iBAAM;gBACH,MAAM,IAAI,KAAK,CAAC,iHAAiH,CAAC,CAAA;aACrI;YACD,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAE3E,IAAI,UAAU,EAAE;gBACZ,yDAAyD;gBAEzD,6DAA6D;gBAC7D,+DAA+D;gBAC/D,4DAA4D;gBAC5D,mDAAmD;gBACnD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,EAAE,CAAC;aAC/E;iBAAM;gBACH,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;aAC1G;SACJ;aAAM;YACH,kCAAkC;YAClC,OAAO,SAAS,CAAC;SACpB;KACJ;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;KACf;AAEL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,EACvB,SAAS,EACT,GAAG,EACH,YAAY,GAqBf;IACG,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC;IAClC,IAAI;QACA,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;SAAE;QACvH,GAAG,GAAG,GAAG,IAAI,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC;QAE5C,IAAI,GAAG,KAAK,GAAG,EAAE;YAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;SAAE;QAEjD,YAAY,GAAG,YAAY,IAAI,aAAa,CAAC;QAE7C,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;YAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,YAAY,uFAAuF,CAAC,CAAC;aAAE;YAEvM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;YAClC,IAAI,WAAW,GAAG,CAAC,EAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,sGAAsG,CAAC,CAAC;aAAE;YAEnJ,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,OAAO;gBACH,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAC;gBACtC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;gBACjC,WAAW;gBACX,SAAS,EAAE,YAAY;aAC1B,CAAA;SACJ;aAAM;YACH,OAAO;gBACH,cAAc,EAAE,GAAG;gBACnB,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,YAAY;aAC1B,CAAA;SACJ;KACJ;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC;KACf;AACL,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * The core of the simplicity of the ibGib protocol is that you are
3
+ * taking two (or more) ibGibs and producing other ibGibs.
4
+ *
5
+ * There are three primary functions: mut8, rel8, fork
6
+ *
7
+ * These are actually different aspects of the single function of
8
+ * relationship and time, either:
9
+ * 1) Creating a 'new' timeline, or...
10
+ * 2) Extending an existing one.
11
+ *
12
+ * Mut8 is intrinsic, rel8 is extrinsic, fork is a new timeline.
13
+ * Mut8 changes a timeline, rel8 changes a timeline's link(s),
14
+ * fork creates a new timeline.
15
+ */
16
+ import { IbGibRel8ns, IbGibAddr, IbGibWithDataAndRel8ns, Gib } from '../types.mjs';
17
+ /**
18
+ * Need to see if I can remove this...
19
+ */
20
+ export declare type IbGibData_V1 = {
21
+ [key: string]: any;
22
+ isTjp?: boolean;
23
+ n?: number;
24
+ timestamp?: string;
25
+ uuid?: string;
26
+ };
27
+ /**
28
+ * Convenience enum to avoid spelling mistakes. (optional)
29
+ */
30
+ export declare enum Rel8n {
31
+ past = "past",
32
+ ancestor = "ancestor",
33
+ dna = "dna",
34
+ identity = "identity",
35
+ tjp = "tjp"
36
+ }
37
+ export interface IbGibRel8ns_V1 extends IbGibRel8ns {
38
+ [Rel8n.past]?: IbGibAddr[];
39
+ [Rel8n.identity]?: IbGibAddr[];
40
+ [Rel8n.ancestor]?: IbGibAddr[];
41
+ [Rel8n.dna]?: IbGibAddr[];
42
+ [Rel8n.tjp]?: IbGibAddr[];
43
+ }
44
+ export interface IbGib_V1<TData = IbGibData_V1, TRel8ns extends IbGibRel8ns_V1 = IbGibRel8ns_V1> extends IbGibWithDataAndRel8ns<TData, TRel8ns> {
45
+ }
46
+ export interface GibInfo {
47
+ /**
48
+ * Hash for this ibgib frame in time.
49
+ */
50
+ punctiliarHash?: string;
51
+ /**
52
+ * The gib for this ibgib's most recent tjp.
53
+ *
54
+ * ## notes
55
+ *
56
+ * ATOW, only one tjp expected really, though I've been coding
57
+ * with the possibility of having multiple tjp's similar to
58
+ * checkpoints.
59
+ */
60
+ tjpGib?: Gib;
61
+ /**
62
+ * If
63
+ */
64
+ piecesCount?: number;
65
+ /**
66
+ * If a delimiter is used in this gib, this is the delimiter.
67
+ *
68
+ * ## notes
69
+ *
70
+ * ATOW, the caller already knows the delimiter. But I'm thinking that
71
+ * I may be persisting this at some point and it would be good to include.
72
+ */
73
+ delimiter?: string;
74
+ /**
75
+ * True the gib is just 'gib' (GIB constant), else falsy.
76
+ */
77
+ isPrimitive?: boolean;
78
+ }
79
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../../src/V1/types.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACH,WAAW,EAAE,SAAS,EAAE,sBAAsB,EAAE,GAAG,EACtD,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,MAAM,CAAC,OAAO,MAAM,YAAY,GAAG;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,oBAAY,KAAK;IACb,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,GAAG,QAAQ;CACd;AACD,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;CAC7B;AACD,MAAM,WAAW,QAAQ,CAAC,KAAK,GAAG,YAAY,EAAE,OAAO,SAAS,cAAc,GAAG,cAAc,CAC3F,SAAQ,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,OAAO;IACpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,GAAG,CAAC;IACb;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Convenience enum to avoid spelling mistakes. (optional)
3
+ */
4
+ export var Rel8n;
5
+ (function (Rel8n) {
6
+ Rel8n["past"] = "past";
7
+ Rel8n["ancestor"] = "ancestor";
8
+ Rel8n["dna"] = "dna";
9
+ Rel8n["identity"] = "identity";
10
+ Rel8n["tjp"] = "tjp";
11
+ })(Rel8n || (Rel8n = {}));
12
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../../src/V1/types.mts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,MAAM,CAAN,IAAY,KAMX;AAND,WAAY,KAAK;IACb,sBAAa,CAAA;IACb,8BAAqB,CAAA;IACrB,oBAAW,CAAA;IACX,8BAAqB,CAAA;IACrB,oBAAW,CAAA;AACf,CAAC,EANW,KAAK,KAAL,KAAK,QAMhB"}
@@ -0,0 +1,77 @@
1
+ import { Ib, Gib, IbGib, IbGibAddr, IbAndGib } from './types.mjs';
2
+ export type HashAlgorithm = 'SHA-256' | 'SHA-512';
3
+ export declare const HashAlgorithm: {
4
+ [key: string]: HashAlgorithm;
5
+ };
6
+ export declare function clone(obj: any): any;
7
+ export declare function getTimestamp(): string;
8
+ /**
9
+ * Gets the ib^gib address from the given ib and gib or
10
+ * from the ibGib object.
11
+ *
12
+ * Need to refactor to getIbGibAddr
13
+ */
14
+ export declare function getIbGibAddr({ ib, gib, ibGib, delimiter }: {
15
+ ib?: Ib;
16
+ gib?: Gib;
17
+ ibGib?: IbGib;
18
+ delimiter?: string;
19
+ }): string;
20
+ /**
21
+ * Get the ib and gib fields from an ibGib object or ibGibAddr
22
+ * with the given `delimiter`.
23
+ */
24
+ export declare function getIbAndGib({ ibGib, ibGibAddr, delimiter }: {
25
+ ibGibAddr?: IbGibAddr;
26
+ ibGib?: IbGib;
27
+ delimiter?: string;
28
+ }): IbAndGib;
29
+ /**
30
+ * Simple hash function.
31
+ *
32
+ * NOTE:
33
+ * This is not used for ibGib.gib values (ATOW)
34
+ * but rather as a helper function for generating random UUIDs.
35
+ *
36
+ * @param s string to hash
37
+ * @param algorithm to use, currently only 'SHA-256'
38
+ */
39
+ export declare function hash({ s, algorithm, }: {
40
+ s: string;
41
+ algorithm?: HashAlgorithm;
42
+ }): Promise<string>;
43
+ /**
44
+ * Simple func to generate UUID (sha-256 hash basically).
45
+ *
46
+ * @param seedSize size of seed for UUID generation
47
+ */
48
+ export declare function getUUID(seedSize?: number): Promise<string>;
49
+ /**
50
+ * Syntactic sugar for JSON.stringify(obj, null, 2);
51
+ *
52
+ * @param obj to pretty stringify
53
+ */
54
+ export declare function pretty(obj: any): string;
55
+ /**
56
+ * Just delays given number of ms.
57
+ *
58
+ * @param ms milliseconds to delay
59
+ */
60
+ export declare function delay(ms: number): Promise<void>;
61
+ /**
62
+ * extracts the error message from an error object/string/falsy arg.
63
+ *
64
+ * ## notes
65
+ *
66
+ * * some libs throw errors, some throw just strings.
67
+ * * who knows what else it could be.
68
+ *
69
+ * ## todo
70
+ *
71
+ * * extract inner errors/causes if we ever use this function extensively.
72
+ *
73
+ * @param error the error object in the catch area of the try..catch block.
74
+ * @returns error.message if it's a string, error itself if it's a string, or canned error messages if it's falsy or none of the above.
75
+ */
76
+ export declare function extractErrorMsg(error: any): string;
77
+ //# sourceMappingURL=helper.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.d.mts","sourceRoot":"","sources":["../src/helper.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIlE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;AAClD,eAAO,MAAM,aAAa,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;CAGzD,CAAA;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,OAE7B;AACD,wBAAgB,YAAY,WAE3B;AACD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EACzB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAe,EAClC,EAAE;IACC,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,UAIA;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,SAAS,EACT,SAAe,EAClB,EAAE;IACC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,QAAQ,CAyCX;AAED;;;;;;;;;GASG;AACH,wBAAsB,IAAI,CAAC,EACvB,CAAC,EACD,SAAqB,GACxB,EAAE;IACC,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,CAAC,EAAE,aAAa,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlB;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,QAAQ,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAW5D;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAEvC;AAED;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAYlD"}