stated-protocol-parser 1.0.3 → 1.0.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 (82) hide show
  1. package/dist/constants.d.ts +1 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +1 -0
  4. package/dist/constants.js.map +1 -0
  5. package/dist/esm/constants.d.ts +47 -0
  6. package/dist/esm/constants.d.ts.map +1 -0
  7. package/dist/esm/constants.js +47 -0
  8. package/dist/esm/constants.js.map +1 -0
  9. package/dist/esm/hash.browser.d.ts +31 -0
  10. package/dist/esm/hash.browser.d.ts.map +1 -0
  11. package/dist/esm/hash.browser.js +58 -0
  12. package/dist/esm/hash.browser.js.map +1 -0
  13. package/dist/esm/hash.node.d.ts +31 -0
  14. package/dist/esm/hash.node.d.ts.map +1 -0
  15. package/dist/esm/hash.node.js +43 -0
  16. package/dist/esm/hash.node.js.map +1 -0
  17. package/dist/esm/hash.test.d.ts +2 -0
  18. package/dist/esm/hash.test.d.ts.map +1 -0
  19. package/dist/esm/hash.test.js +181 -0
  20. package/dist/esm/hash.test.js.map +1 -0
  21. package/dist/esm/index.d.ts +44 -0
  22. package/dist/esm/index.d.ts.map +1 -0
  23. package/dist/esm/index.js +643 -0
  24. package/dist/esm/index.js.map +1 -0
  25. package/dist/esm/index.test.d.ts +2 -0
  26. package/dist/esm/index.test.d.ts.map +1 -0
  27. package/dist/esm/index.test.js +293 -0
  28. package/dist/esm/index.test.js.map +1 -0
  29. package/dist/esm/types.d.ts +149 -0
  30. package/dist/esm/types.d.ts.map +1 -0
  31. package/dist/esm/types.js +2 -0
  32. package/dist/esm/types.js.map +1 -0
  33. package/dist/esm/utils.d.ts +4 -0
  34. package/dist/esm/utils.d.ts.map +1 -0
  35. package/dist/esm/utils.js +23 -0
  36. package/dist/esm/utils.js.map +1 -0
  37. package/dist/esm/v3.d.ts +5 -0
  38. package/dist/esm/v3.d.ts.map +1 -0
  39. package/dist/esm/v3.js +60 -0
  40. package/dist/esm/v3.js.map +1 -0
  41. package/dist/hash.browser.d.ts +1 -0
  42. package/dist/hash.browser.d.ts.map +1 -0
  43. package/dist/hash.browser.js +1 -0
  44. package/dist/hash.browser.js.map +1 -0
  45. package/dist/hash.node.d.ts +1 -0
  46. package/dist/hash.node.d.ts.map +1 -0
  47. package/dist/hash.node.js +1 -0
  48. package/dist/hash.node.js.map +1 -0
  49. package/dist/hash.test.d.ts +2 -0
  50. package/dist/hash.test.d.ts.map +1 -0
  51. package/dist/hash.test.js +183 -0
  52. package/dist/hash.test.js.map +1 -0
  53. package/dist/index.d.ts +1 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +1 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/index.test.d.ts +2 -0
  58. package/dist/index.test.d.ts.map +1 -0
  59. package/dist/index.test.js +295 -0
  60. package/dist/index.test.js.map +1 -0
  61. package/dist/types.d.ts +1 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +1 -0
  64. package/dist/types.js.map +1 -0
  65. package/dist/utils.d.ts +1 -0
  66. package/dist/utils.d.ts.map +1 -0
  67. package/dist/utils.js +1 -0
  68. package/dist/utils.js.map +1 -0
  69. package/dist/v3.d.ts +1 -0
  70. package/dist/v3.d.ts.map +1 -0
  71. package/dist/v3.js +1 -0
  72. package/dist/v3.js.map +1 -0
  73. package/package.json +7 -13
  74. package/src/constants.ts +61 -0
  75. package/src/hash.browser.ts +65 -0
  76. package/src/hash.node.ts +47 -0
  77. package/src/hash.test.ts +217 -0
  78. package/src/index.test.ts +378 -0
  79. package/src/index.ts +678 -0
  80. package/src/types.ts +186 -0
  81. package/src/utils.ts +18 -0
  82. package/src/v3.ts +62 -0
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("./index");
4
+ const randomUnicodeString = () => Array.from({ length: 20 }, () => String.fromCharCode(Math.floor(Math.random() * 65536)))
5
+ .join('')
6
+ .replace(/[\n;>=<"''\\]/g, '');
7
+ test('parse statement', () => {
8
+ const statement = `Publishing domain: localhost
9
+ Author: chris
10
+ Time: Tue, 18 Apr 2023 18:20:26 GMT
11
+ Tags: hashtag1, hashtag2
12
+ Format version: 4
13
+ Statement content: hi
14
+ `;
15
+ const parsedStatement = (0, index_1.parseStatement)({ statement });
16
+ expect(parsedStatement.content).toBe(`hi
17
+ `);
18
+ });
19
+ test('statement build & parse function compatibility: input=parse(build(input))', () => {
20
+ const [domain, author, representative, content, supersededStatement] = Array.from({ length: 5 }, randomUnicodeString);
21
+ const tags = Array.from({ length: 4 }, randomUnicodeString);
22
+ const contentWithTrailingNewline = content + (content.match(/\n$/) ? '' : '\n');
23
+ const time = new Date('Sun, 04 Sep 2022 14:48:50 GMT');
24
+ const statementContent = (0, index_1.buildStatement)({
25
+ domain,
26
+ author,
27
+ time,
28
+ content: contentWithTrailingNewline,
29
+ representative,
30
+ supersededStatement,
31
+ tags,
32
+ });
33
+ const parsedStatement = (0, index_1.parseStatement)({ statement: statementContent });
34
+ expect(parsedStatement.domain).toBe(domain);
35
+ expect(parsedStatement.author).toBe(author);
36
+ expect(parsedStatement.time?.toUTCString()).toBe(time.toUTCString());
37
+ expect(parsedStatement.content).toBe(contentWithTrailingNewline);
38
+ expect(parsedStatement.representative).toBe(representative);
39
+ expect(parsedStatement.supersededStatement).toBe(supersededStatement);
40
+ expect(parsedStatement.tags?.sort()).toStrictEqual(tags.sort());
41
+ });
42
+ test('parse quotation', () => {
43
+ let quotation = `Publishing domain: rixdata.net
44
+ Author: Example Inc.
45
+ Time: Sun, 04 Sep 2022 14:48:50 GMT
46
+ Format version: 4
47
+ Statement content:
48
+ Type: Quotation
49
+ Original author: XYZ Company Inc.
50
+ Author verification: eXoVsm2CdF5Ri-SEAr33RNkG3DBuehvFoDBQ_pO9CXE
51
+ Original publication time: Sun, 04 Sep 2022 14:48:50 GMT
52
+ Source: https://www.facebook.com/companyxzy/posts/XXXX
53
+ Picture proof: 5HKiyQXGV4xavq-Nn9RXi_ndUH-2BEux3ccFIjaSk_8
54
+ Confidence: 0.9
55
+ Quotation: we give example.com a 2/5 star rating
56
+ Paraphrased statement:
57
+ Type: Rating
58
+ Organisation name: example
59
+ Organisation domain: example.com
60
+ Our rating: 2/5 Stars
61
+ `;
62
+ const parsedStatement = (0, index_1.parseStatement)({ statement: quotation });
63
+ const parsedQuotation = (0, index_1.parseQuotation)(parsedStatement.content);
64
+ const type = parsedQuotation.type;
65
+ expect(type).toBe('rating');
66
+ });
67
+ test('quotation build & parse function compatibility: input=parse(build(input))', () => {
68
+ const [originalAuthor, source, picture, quotation, paraphrasedStatement] = Array.from({ length: 6 }, randomUnicodeString);
69
+ const authorVerification = 'yXoVsm2CdF5Ri-SEAr33RNkG3DBuehvFoDBQ_pO9CXE';
70
+ const originalTime = 'Sun, 04 Sep 2022 14:48:50 GMT';
71
+ const confidence = '' + Math.random();
72
+ const quotationContent = (0, index_1.buildQuotationContent)({
73
+ originalAuthor,
74
+ authorVerification,
75
+ originalTime,
76
+ source,
77
+ picture,
78
+ confidence,
79
+ quotation,
80
+ paraphrasedStatement,
81
+ });
82
+ const parsedQuotation = (0, index_1.parseQuotation)(quotationContent);
83
+ expect(parsedQuotation.originalAuthor).toBe(originalAuthor);
84
+ expect(parsedQuotation.originalTime).toBe(originalTime);
85
+ expect(parsedQuotation.source).toBe(source);
86
+ expect(parsedQuotation.picture).toBe(picture);
87
+ expect(parsedQuotation.confidence).toBe(confidence);
88
+ expect(parsedQuotation.quotation).toBe(quotation);
89
+ expect(parsedQuotation.paraphrasedStatement?.replace(/\n$/, '')).toBe(paraphrasedStatement);
90
+ expect(parsedQuotation.authorVerification).toBe(authorVerification);
91
+ });
92
+ test('parse organisation verification', () => {
93
+ let organisationVerification = `Publishing domain: rixdata.net
94
+ Author: Example Inc.
95
+ Time: Sun, 04 Sep 2022 14:48:50 GMT
96
+ Format version: 4
97
+ Statement content:
98
+ Type: Organisation verification
99
+ Description: We verified the following information about an organisation.
100
+ Name: Walmart Inc.
101
+ Country: United States of America
102
+ Legal entity: corporation
103
+ Owner of the domain: walmart.com
104
+ Province or state: Arkansas
105
+ City: Bentonville
106
+ `;
107
+ const parsedStatement = (0, index_1.parseStatement)({
108
+ statement: organisationVerification,
109
+ });
110
+ const parsedOVerification = (0, index_1.parseOrganisationVerification)(parsedStatement.content);
111
+ const name = parsedOVerification.name;
112
+ expect(name).toBe('Walmart Inc.');
113
+ });
114
+ test('organisation verification build & parse function compatibility: input=parse(build(input))', () => {
115
+ const [name, englishName, city, domain, foreignDomain, serialNumber, reliabilityPolicy, pictureHash,] = Array.from({ length: 8 }, randomUnicodeString);
116
+ const country = 'Germany';
117
+ const province = 'Bayern';
118
+ const legalForm = 'corporation';
119
+ const employeeCount = '100-1000';
120
+ const confidence = 0.8;
121
+ const verificationContent = (0, index_1.buildOrganisationVerificationContent)({
122
+ name,
123
+ englishName,
124
+ country,
125
+ city,
126
+ province,
127
+ legalForm,
128
+ domain,
129
+ pictureHash,
130
+ foreignDomain,
131
+ serialNumber,
132
+ confidence,
133
+ reliabilityPolicy,
134
+ employeeCount,
135
+ });
136
+ const parsedVerification = (0, index_1.parseOrganisationVerification)(verificationContent);
137
+ expect(parsedVerification.name).toBe(name);
138
+ expect(parsedVerification.englishName).toBe(englishName);
139
+ expect(parsedVerification.country).toBe(country);
140
+ expect(parsedVerification.city).toBe(city);
141
+ expect(parsedVerification.province).toBe(province);
142
+ expect(parsedVerification.legalForm).toBe(legalForm);
143
+ expect(parsedVerification.domain).toBe(domain);
144
+ expect(parsedVerification.foreignDomain).toBe(foreignDomain);
145
+ expect(parsedVerification.serialNumber).toBe(serialNumber);
146
+ expect(parsedVerification.confidence).toBe(confidence);
147
+ expect(parsedVerification.pictureHash).toBe(pictureHash);
148
+ expect(parsedVerification.reliabilityPolicy).toBe(reliabilityPolicy);
149
+ expect(parsedVerification.employeeCount).toBe(employeeCount);
150
+ });
151
+ test('parse person verification', () => {
152
+ let personVerification = `Publishing domain: rixdata.net
153
+ Author: Example Inc.
154
+ Time: Sun, 04 Sep 2022 14:48:50 GMT
155
+ Format version: 4
156
+ Statement content:
157
+ Type: Person verification
158
+ Description: We verified the following information about a person.
159
+ Name: Barack Hossein Obama II
160
+ Date of birth: 4 Aug 1961
161
+ City of birth: Honolulu
162
+ Country of birth: United States of America
163
+ Owner of the domain: barackobama.com
164
+ `;
165
+ const parsedStatement = (0, index_1.parseStatement)({ statement: personVerification });
166
+ const parsedPVerification = (0, index_1.parsePersonVerification)(parsedStatement.content);
167
+ const name = parsedPVerification.name;
168
+ expect(name).toBe('Barack Hossein Obama II');
169
+ });
170
+ test('person verification build & parse function compatibility: input=parse(build(input))', () => {
171
+ const [name, ownDomain, foreignDomain, jobTitle, employer, verificationMethod, picture, reliabilityPolicy,] = Array.from({ length: 12 }, randomUnicodeString);
172
+ const countryOfBirth = 'Germany';
173
+ const cityOfBirth = 'Berlin';
174
+ const confidence = Math.random();
175
+ const dateOfBirth = new Date(0);
176
+ const personVerificationContent = (0, index_1.buildPersonVerificationContent)({
177
+ name,
178
+ countryOfBirth,
179
+ cityOfBirth,
180
+ ownDomain,
181
+ foreignDomain,
182
+ dateOfBirth,
183
+ jobTitle,
184
+ employer,
185
+ verificationMethod,
186
+ confidence,
187
+ picture,
188
+ reliabilityPolicy,
189
+ });
190
+ const parsedVerification = (0, index_1.parsePersonVerification)(personVerificationContent);
191
+ expect(parsedVerification.name).toBe(name);
192
+ expect(parsedVerification.ownDomain).toBe(ownDomain);
193
+ expect(parsedVerification.foreignDomain).toBe(foreignDomain);
194
+ expect(parsedVerification.dateOfBirth.toUTCString()).toBe(dateOfBirth.toUTCString());
195
+ expect(parsedVerification.jobTitle).toBe(jobTitle);
196
+ expect(parsedVerification.employer).toBe(employer);
197
+ expect(parsedVerification.verificationMethod).toBe(verificationMethod);
198
+ expect(parsedVerification.confidence).toBe(confidence);
199
+ expect(parsedVerification.picture).toBe(picture);
200
+ expect(parsedVerification.reliabilityPolicy).toBe(reliabilityPolicy);
201
+ expect(parsedVerification.countryOfBirth).toBe(countryOfBirth);
202
+ expect(parsedVerification.cityOfBirth).toBe(cityOfBirth);
203
+ });
204
+ test('parse rating', () => {
205
+ let rating = `Publishing domain: localhost
206
+ Author: chris
207
+ Time: Tue, 18 Apr 2023 18:20:26 GMT
208
+ Format version: 4
209
+ Statement content:
210
+ Type: Rating
211
+ Subject name: AMBOSS GmbH
212
+ URL that identifies the subject: amboss.com
213
+ Rated quality: AI safety
214
+ Our rating: 5/5 Stars
215
+ `;
216
+ const parsedStatement = (0, index_1.parseStatement)({ statement: rating });
217
+ const parsedRating = (0, index_1.parseRating)(parsedStatement.content);
218
+ const ratingNumber = parsedRating.rating;
219
+ expect(ratingNumber).toBe(5);
220
+ const subjectName = parsedRating.subjectName;
221
+ expect(subjectName).toBe('AMBOSS GmbH');
222
+ const subjectReference = parsedRating.subjectReference;
223
+ expect(subjectReference).toBe('amboss.com');
224
+ const quality = parsedRating.quality;
225
+ expect(quality).toBe('AI safety');
226
+ });
227
+ test('rating build & parse function compatibility: input=parse(build(input))', () => {
228
+ const [subjectName, subjectReference, comment, quality] = Array.from({ length: 4 }, randomUnicodeString);
229
+ const rating = Math.ceil(Math.random() * 5);
230
+ const ratingContent = (0, index_1.buildRating)({ subjectName, subjectReference, rating, comment, quality });
231
+ const parsedRating = (0, index_1.parseRating)(ratingContent);
232
+ expect(parsedRating.subjectName).toBe(subjectName);
233
+ expect(parsedRating.subjectReference).toBe(subjectReference);
234
+ expect(parsedRating.quality).toBe(quality);
235
+ expect(parsedRating.rating).toBe(rating);
236
+ expect(parsedRating.comment).toBe(comment);
237
+ });
238
+ test('parse poll v4', () => {
239
+ let poll = `Publishing domain: rixdata.net
240
+ Author: Example Inc.
241
+ Time: Thu, 17 Nov 2022 13:38:20 GMT
242
+ Format version: 4
243
+ Statement content:
244
+ Type: Poll
245
+ The poll outcome is finalized when the following nodes agree: rixdata.net
246
+ Voting deadline: Thu, 01 Dec 2022 13:38:26 GMT
247
+ Poll: Should the UK join the EU
248
+ Option 1: Yes
249
+ Option 2: No
250
+ Who can vote:
251
+ Description: All universities with a ROR ID
252
+ Legal form scope: corporation
253
+ All entities with the following property: ROR ID
254
+ As observed by: Rix Data NL B.V.@rixdata.net
255
+ Link to query defining who can vote: https://stated.rixdata.net/?search_query=%09Observed%20property:%20ROR%20ID%0A%09&domain=rixdata.net&author=Rix%20Data%20NL%20B.V.
256
+ `;
257
+ const parsedStatement = (0, index_1.parseStatement)({ statement: poll });
258
+ const parsedPoll = (0, index_1.parsePoll)(parsedStatement.content);
259
+ const pollTitle = parsedPoll.poll;
260
+ expect(pollTitle).toBe('Should the UK join the EU');
261
+ expect(parsedPoll.options[0]).toBe('Yes');
262
+ expect(parsedPoll.options[1]).toBe('No');
263
+ expect(parsedPoll.deadline?.toUTCString()).toBe('Thu, 01 Dec 2022 13:38:26 GMT');
264
+ expect(parsedPoll.scopeDescription).toBe('All universities with a ROR ID');
265
+ expect(parsedPoll.legalEntity).toBe('corporation');
266
+ expect(parsedPoll.requiredProperty).toBe('ROR ID');
267
+ expect(parsedPoll.requiredPropertyObserver).toBe('Rix Data NL B.V.@rixdata.net');
268
+ expect(parsedPoll.scopeQueryLink).toBe('https://stated.rixdata.net/?search_query=%09Observed%20property:%20ROR%20ID%0A%09&domain=rixdata.net&author=Rix%20Data%20NL%20B.V.');
269
+ });
270
+ test('poll build & parse function compatibility: input=parse(build(input))', () => {
271
+ const [country, city, legalEntity, judges, poll, scopeDescription] = Array.from({ length: 6 }, randomUnicodeString);
272
+ const options = Array.from({ length: 2 }, randomUnicodeString);
273
+ const domainScope = ['rixdata.net'];
274
+ const deadline = new Date('Thu, 01 Dec 2022 13:38:26 GMT');
275
+ const pollContent = (0, index_1.buildPollContent)({
276
+ country,
277
+ city,
278
+ legalEntity,
279
+ domainScope,
280
+ judges,
281
+ deadline,
282
+ poll,
283
+ options,
284
+ scopeDescription,
285
+ });
286
+ const parsedPoll = (0, index_1.parsePoll)(pollContent);
287
+ expect(parsedPoll.poll).toBe(poll);
288
+ expect(parsedPoll.country).toBe(country);
289
+ expect(parsedPoll.legalEntity).toBe(legalEntity);
290
+ expect(parsedPoll.judges).toBe(judges);
291
+ expect(parsedPoll.deadline?.toUTCString()).toBe(deadline.toUTCString());
292
+ expect(parsedPoll.options[0]).toEqual(options[0]);
293
+ expect(parsedPoll.options[1]).toEqual(options[1]);
294
+ });
295
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -146,3 +146,4 @@ export type Boycott = {
146
146
  subject: string;
147
147
  subjectReference?: string;
148
148
  };
149
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/dist/utils.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export declare const minPeopleCountToRange: (n: number) => string | undefined;
2
2
  export declare const monthIndex: (month: string) => number;
3
3
  export declare const birthDateFormat: RegExp;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,GAAI,GAAG,MAAM,KAAG,MAAM,GAAG,SAS1D,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAEO,CAAA;AAElD,eAAO,MAAM,eAAe,EAAE,MAAgG,CAAA"}
package/dist/utils.js CHANGED
@@ -25,3 +25,4 @@ const monthIndex = (month) => ["jan", "feb", "mar", "apr", "may", "jun", "jul",
25
25
  .indexOf(month.toLowerCase().substr(0, 3));
26
26
  exports.monthIndex = monthIndex;
27
27
  exports.birthDateFormat = /(?<d>\d{1,2})\s(?<month>Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?<y>\d{4})/;
28
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,2CAAgD;AAEzC,MAAM,qBAAqB,GAAG,CAAC,CAAS,EAAsB,EAAE;IACnE,IAAI,CAAC,IAAI,QAAQ;QAAE,OAAO,8BAAkB,CAAC,UAAU,CAAC,CAAA;IACxD,IAAI,CAAC,IAAI,OAAO;QAAE,OAAO,8BAAkB,CAAC,SAAS,CAAC,CAAA;IACtD,IAAI,CAAC,IAAI,MAAM;QAAE,OAAO,8BAAkB,CAAC,QAAQ,CAAC,CAAA;IACpD,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,8BAAkB,CAAC,OAAO,CAAC,CAAA;IAClD,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,8BAAkB,CAAC,MAAM,CAAC,CAAA;IAChD,IAAI,CAAC,IAAI,GAAG;QAAE,OAAO,8BAAkB,CAAC,KAAK,CAAC,CAAA;IAC9C,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,8BAAkB,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,8BAAkB,CAAC,GAAG,CAAC,CAAA;AAC9C,CAAC,CAAA;AATY,QAAA,qBAAqB,yBASjC;AAEM,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAChD,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KAC/E,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAFrC,QAAA,UAAU,cAE2B;AAErC,QAAA,eAAe,GAAW,uFAAuF,CAAA"}
package/dist/v3.d.ts CHANGED
@@ -2,3 +2,4 @@ import { Poll } from './types';
2
2
  export declare const parsePollV3: (s: string, version?: string) => Poll & {
3
3
  pollType: string;
4
4
  };
5
+ //# sourceMappingURL=v3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3.d.ts","sourceRoot":"","sources":["../src/v3.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,EAAE,UAAU,MAAM,KAAG,IAAI,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CA0DlF,CAAA"}
package/dist/v3.js CHANGED
@@ -61,3 +61,4 @@ const parsePollV3 = (s, version) => {
61
61
  };
62
62
  };
63
63
  exports.parsePollV3 = parsePollV3;
64
+ //# sourceMappingURL=v3.js.map
package/dist/v3.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3.js","sourceRoot":"","sources":["../src/v3.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,28 +1,21 @@
1
1
  {
2
2
  "name": "stated-protocol-parser",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Parser and formatter for the Stated protocol - a decentralized statement verification system",
5
5
  "main": "dist/index.js",
6
+ "module": "dist/esm/index.js",
6
7
  "types": "dist/index.d.ts",
7
8
  "exports": {
8
9
  ".": {
9
- "import": "./dist/index.js",
10
+ "import": "./dist/esm/index.js",
10
11
  "require": "./dist/index.js",
11
12
  "types": "./dist/index.d.ts"
12
- },
13
- "./hash.node": {
14
- "import": "./dist/hash.node.js",
15
- "require": "./dist/hash.node.js",
16
- "types": "./dist/hash.node.d.ts"
17
- },
18
- "./hash.browser": {
19
- "import": "./dist/hash.browser.js",
20
- "require": "./dist/hash.browser.js",
21
- "types": "./dist/hash.browser.d.ts"
22
13
  }
23
14
  },
24
15
  "scripts": {
25
- "build": "tsc",
16
+ "build": "npm run build:cjs && npm run build:esm",
17
+ "build:cjs": "tsc",
18
+ "build:esm": "tsc -p tsconfig.esm.json",
26
19
  "test": "jest",
27
20
  "prepublishOnly": "npm run build"
28
21
  },
@@ -46,6 +39,7 @@
46
39
  },
47
40
  "files": [
48
41
  "dist",
42
+ "src",
49
43
  "README.md",
50
44
  "LICENSE"
51
45
  ],
@@ -0,0 +1,61 @@
1
+ export const legalForms = {
2
+ local_government: 'local government',
3
+ state_government: 'state government',
4
+ foreign_affairs_ministry: 'foreign affairs ministry',
5
+ corporation: 'corporation',
6
+ }
7
+
8
+ export const statementTypes = {
9
+ statement: 'statement',
10
+ quotation: 'quotation',
11
+ organisationVerification: 'organisation_verification',
12
+ personVerification: 'person_verification',
13
+ poll: 'poll',
14
+ vote: 'vote',
15
+ response: 'response',
16
+ disputeContent: 'dispute_statement_content',
17
+ disputeAuthenticity: 'dispute_statement_authenticity',
18
+ boycott: 'boycott',
19
+ observation: 'observation',
20
+ rating: 'rating',
21
+ signPdf: "sign_pdf",
22
+ bounty: "bounty",
23
+ unsupported: "unsupported",
24
+ }
25
+
26
+ export const peopleCountBuckets = {
27
+ "0": "0-10",
28
+ "10": "10-100",
29
+ "100": "100-1000",
30
+ "1000": "1000-10,000",
31
+ "10000": "10,000-100,000",
32
+ "100000": "100,000+",
33
+ "1000000": "1,000,000+",
34
+ "10000000": "10,000,000+",
35
+ }
36
+
37
+ export const UTCFormat: RegExp = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{2}\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT/
38
+
39
+ export const pollKeys = /(Type: |The poll outcome is finalized when the following nodes agree: |Voting deadline: |Poll: |Option 1: |Option 2: |Option 3: |Option 4: |Option 5: |Allow free text votes: |Who can vote: |Description: |Country scope: |City scope: |Legal form scope: |Domain scope: |All entities with the following property: |As observed by: |Link to query defining who can vote: )/g
40
+
41
+ export const organisationVerificationKeys = /(Type: |Description: |Name: |English name: |Country: |Legal entity: |Legal form: |Department using the domain: |Owner of the domain: |Foreign domain used for publishing statements: |Province or state: |Business register number: |City: |Longitude: |Latitude: |Population: |Logo: |Employee count: |Reliability policy: |Confidence: )/g
42
+
43
+ export const personVerificationKeys = /(Type: |Description: |Name: |Date of birth: |City of birth: |Country of birth: |Job title: |Employer: |Owner of the domain: |Foreign domain used for publishing statements: |Picture: |Verification method: |Confidence: |Reliability policy: )/g
44
+
45
+ export const voteKeys = /(Type: |Poll id: |Poll: |Option: )/g
46
+
47
+ export const disputeAuthenticityKeys = /(Type: |Description: |Hash of referenced statement: |Confidence: |Reliability policy: )/g
48
+
49
+ export const disputeContentKeys = /(Type: |Description: |Hash of referenced statement: |Confidence: |Reliability policy: )/g
50
+
51
+ export const responseKeys = /(Type: |Hash of referenced statement: |Response: )/
52
+
53
+ export const PDFSigningKeys = /(Type: |Description: |PDF file hash: )/
54
+
55
+ export const ratingKeys = /(Type: |Subject type: |Subject name: |URL that identifies the subject: |Document file hash: |Rated quality: |Our rating: |Comment: )/
56
+
57
+ export const BountyKeys = /(Type: |In order to: |We will reward any entity that: |The reward is: |In case of dispute, bounty claims are judged by: |The judge will be paid per investigated case with a maxium of: )/
58
+
59
+ export const ObservationKeys = /(Type: |Approach: |Confidence: |Reliability policy: |Subject: |Subject identity reference: |Observation reference: |Observed property: |Observed value: )/
60
+
61
+ export const BoycottKeys = /(Type: |Description: |Subject: |Subject identity reference: )/
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Browser-compatible hash utilities using Web Crypto API
3
+ * Async operations for client-side use
4
+ */
5
+
6
+ /**
7
+ * Compute SHA-256 hash of a string and return it as URL-safe base64
8
+ * Works in both browser and Node.js environments
9
+ * @param input - The string or buffer to hash
10
+ * @returns URL-safe base64 encoded hash
11
+ */
12
+ export const sha256 = async (input: string | Uint8Array): Promise<string> => {
13
+ let data: Uint8Array;
14
+
15
+ if (typeof input === 'string') {
16
+ const encoder = new TextEncoder();
17
+ data = encoder.encode(input);
18
+ } else {
19
+ data = input;
20
+ }
21
+
22
+ // Use Web Crypto API (available in both modern browsers and Node.js 15+)
23
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data);
24
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
25
+
26
+ // Convert to base64
27
+ const base64 = btoa(String.fromCharCode(...hashArray));
28
+
29
+ // Make URL-safe: remove padding and replace + with - and / with _
30
+ const urlSafe = base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
31
+
32
+ return urlSafe;
33
+ }
34
+
35
+ /**
36
+ * Verify that content matches a given hash
37
+ * @param content - The content to verify
38
+ * @param hash - The expected hash
39
+ * @returns True if the hash matches
40
+ */
41
+ export const verify = async (content: string | Uint8Array, hash: string): Promise<boolean> => {
42
+ const computed = await sha256(content);
43
+ return computed === hash;
44
+ }
45
+
46
+ /**
47
+ * Convert URL-safe base64 back to standard base64
48
+ * @param urlSafe - URL-safe base64 string
49
+ * @returns Standard base64 string with padding
50
+ */
51
+ export const fromUrlSafeBase64 = (urlSafe: string): string => {
52
+ const base64 = urlSafe.replace(/-/g, '+').replace(/_/g, '/');
53
+ // Add padding if needed
54
+ const padding = '='.repeat((4 - (base64.length % 4)) % 4);
55
+ return base64 + padding;
56
+ }
57
+
58
+ /**
59
+ * Convert standard base64 to URL-safe base64
60
+ * @param base64 - Standard base64 string
61
+ * @returns URL-safe base64 string without padding
62
+ */
63
+ export const toUrlSafeBase64 = (base64: string): string => {
64
+ return base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
65
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Node.js-specific hash utilities using native crypto module
3
+ * Synchronous operations for server-side use
4
+ */
5
+
6
+ import crypto from 'crypto'
7
+
8
+ /**
9
+ * Compute SHA-256 hash and return as URL-safe base64 (Node.js)
10
+ * @param input - String or buffer to hash
11
+ * @returns URL-safe base64 encoded hash
12
+ */
13
+ export const sha256 = (input: crypto.BinaryLike): string => {
14
+ const base64 = crypto.createHash('sha256').update(input).digest('base64')
15
+ const urlSafe = base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_')
16
+ return urlSafe
17
+ }
18
+
19
+ /**
20
+ * Verify that content matches a given hash
21
+ * @param content - Content to verify
22
+ * @param hash - Expected hash
23
+ * @returns True if hash matches
24
+ */
25
+ export const verify = (content: crypto.BinaryLike, hash: string): boolean => {
26
+ return hash === sha256(content)
27
+ }
28
+
29
+ /**
30
+ * Convert URL-safe base64 back to standard base64
31
+ * @param urlSafe - URL-safe base64 string
32
+ * @returns Standard base64 string with padding
33
+ */
34
+ export const fromUrlSafeBase64 = (urlSafe: string): string => {
35
+ const base64 = urlSafe.replace(/-/g, '+').replace(/_/g, '/');
36
+ const padding = '='.repeat((4 - (base64.length % 4)) % 4);
37
+ return base64 + padding;
38
+ }
39
+
40
+ /**
41
+ * Convert standard base64 to URL-safe base64
42
+ * @param base64 - Standard base64 string
43
+ * @returns URL-safe base64 string without padding
44
+ */
45
+ export const toUrlSafeBase64 = (base64: string): string => {
46
+ return base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
47
+ }