@prosopo/provider 2.9.8 → 3.0.6

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 (157) hide show
  1. package/CHANGELOG.md +186 -0
  2. package/dist/api/admin/apiRegisterSiteKeyEndpoint.d.ts.map +1 -1
  3. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js +4 -4
  4. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js.map +1 -1
  5. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +1 -1
  6. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js +5 -5
  7. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js.map +1 -1
  8. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.d.ts.map +1 -1
  9. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js +5 -5
  10. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js.map +1 -1
  11. package/dist/api/blacklistRequestInspector.d.ts +6 -8
  12. package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
  13. package/dist/api/blacklistRequestInspector.js +38 -20
  14. package/dist/api/blacklistRequestInspector.js.map +1 -1
  15. package/dist/api/block.d.ts.map +1 -1
  16. package/dist/api/block.js +5 -5
  17. package/dist/api/block.js.map +1 -1
  18. package/dist/api/captcha.d.ts.map +1 -1
  19. package/dist/api/captcha.js +114 -24
  20. package/dist/api/captcha.js.map +1 -1
  21. package/dist/api/domainMiddleware.d.ts.map +1 -1
  22. package/dist/api/domainMiddleware.js +3 -3
  23. package/dist/api/domainMiddleware.js.map +1 -1
  24. package/dist/api/headerCheckMiddleware.js +2 -2
  25. package/dist/api/headerCheckMiddleware.js.map +1 -1
  26. package/dist/api/ja4Middleware.d.ts.map +1 -1
  27. package/dist/api/ja4Middleware.js +18 -6
  28. package/dist/api/ja4Middleware.js.map +1 -1
  29. package/dist/api/public.d.ts +1 -2
  30. package/dist/api/public.d.ts.map +1 -1
  31. package/dist/api/public.js +9 -4
  32. package/dist/api/public.js.map +1 -1
  33. package/dist/api/validateAddress.d.ts +2 -2
  34. package/dist/api/validateAddress.d.ts.map +1 -1
  35. package/dist/api/validateAddress.js +10 -4
  36. package/dist/api/validateAddress.js.map +1 -1
  37. package/dist/api/verify.d.ts.map +1 -1
  38. package/dist/api/verify.js +8 -7
  39. package/dist/api/verify.js.map +1 -1
  40. package/dist/cjs/api/admin/apiRegisterSiteKeyEndpoint.cjs +3 -3
  41. package/dist/cjs/api/admin/apiRemoveDetectorKeyEndpoint.cjs +4 -4
  42. package/dist/cjs/api/admin/apiUpdateDetectorKeyEndpoint.cjs +4 -4
  43. package/dist/cjs/api/blacklistRequestInspector.cjs +36 -21
  44. package/dist/cjs/api/block.cjs +4 -5
  45. package/dist/cjs/api/captcha.cjs +116 -39
  46. package/dist/cjs/api/domainMiddleware.cjs +3 -3
  47. package/dist/cjs/api/headerCheckMiddleware.cjs +1 -1
  48. package/dist/cjs/api/ja4Middleware.cjs +17 -8
  49. package/dist/cjs/api/public.cjs +9 -4
  50. package/dist/cjs/api/validateAddress.cjs +12 -6
  51. package/dist/cjs/api/verify.cjs +13 -12
  52. package/dist/cjs/index.cjs +1 -5
  53. package/dist/cjs/schedulers/captchaScheduler.cjs +11 -7
  54. package/dist/cjs/schedulers/getClientList.cjs +12 -5
  55. package/dist/cjs/tasks/captchaManager.cjs +76 -23
  56. package/dist/cjs/tasks/client/clientTasks.cjs +25 -19
  57. package/dist/cjs/tasks/detection/decodePayload.cjs +284 -362
  58. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +32 -25
  59. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +37 -26
  60. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +19 -18
  61. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +5 -3
  62. package/dist/cjs/tasks/tasks.cjs +11 -2
  63. package/dist/cjs/util.cjs +58 -8
  64. package/dist/index.d.ts +0 -2
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +0 -2
  67. package/dist/index.js.map +1 -1
  68. package/dist/schedulers/captchaScheduler.d.ts +1 -1
  69. package/dist/schedulers/captchaScheduler.d.ts.map +1 -1
  70. package/dist/schedulers/captchaScheduler.js +11 -3
  71. package/dist/schedulers/captchaScheduler.js.map +1 -1
  72. package/dist/schedulers/getClientList.d.ts +1 -1
  73. package/dist/schedulers/getClientList.d.ts.map +1 -1
  74. package/dist/schedulers/getClientList.js +12 -3
  75. package/dist/schedulers/getClientList.js.map +1 -1
  76. package/dist/tasks/captchaManager.d.ts +14 -1
  77. package/dist/tasks/captchaManager.d.ts.map +1 -1
  78. package/dist/tasks/captchaManager.js +67 -24
  79. package/dist/tasks/captchaManager.js.map +1 -1
  80. package/dist/tasks/client/clientTasks.d.ts.map +1 -1
  81. package/dist/tasks/client/clientTasks.js +26 -18
  82. package/dist/tasks/client/clientTasks.js.map +1 -1
  83. package/dist/tasks/detection/decodePayload.d.ts +2 -2
  84. package/dist/tasks/detection/decodePayload.d.ts.map +1 -1
  85. package/dist/tasks/detection/decodePayload.js +184 -230
  86. package/dist/tasks/detection/decodePayload.js.map +1 -1
  87. package/dist/tasks/frictionless/frictionlessTasks.d.ts +4 -5
  88. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  89. package/dist/tasks/frictionless/frictionlessTasks.js +32 -24
  90. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  91. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts +1 -1
  92. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  93. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +38 -25
  94. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  95. package/dist/tasks/powCaptcha/powTasks.d.ts +1 -1
  96. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  97. package/dist/tasks/powCaptcha/powTasks.js +17 -18
  98. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  99. package/dist/tasks/powCaptcha/powTasksUtils.d.ts +1 -1
  100. package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -1
  101. package/dist/tasks/powCaptcha/powTasksUtils.js +5 -3
  102. package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -1
  103. package/dist/tasks/tasks.d.ts +3 -2
  104. package/dist/tasks/tasks.d.ts.map +1 -1
  105. package/dist/tasks/tasks.js +13 -3
  106. package/dist/tasks/tasks.js.map +1 -1
  107. package/dist/tests/integration/imgCaptcha.integration.test.js +3 -2
  108. package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -1
  109. package/dist/tests/integration/powCaptcha.integration.test.js +9 -9
  110. package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
  111. package/dist/tests/integration/registerSitekey.d.ts.map +1 -1
  112. package/dist/tests/integration/registerSitekey.js +13 -2
  113. package/dist/tests/integration/registerSitekey.js.map +1 -1
  114. package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts +2 -0
  115. package/dist/tests/unit/api/ignoreMiddleware.unit.test.d.ts.map +1 -0
  116. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js +43 -0
  117. package/dist/tests/unit/api/ignoreMiddleware.unit.test.js.map +1 -0
  118. package/dist/tests/unit/api/ja4Middleware.unit.test.js +18 -4
  119. package/dist/tests/unit/api/ja4Middleware.unit.test.js.map +1 -1
  120. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +30 -18
  121. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -1
  122. package/dist/tests/unit/tasks/captchaManager.unit.test.js +11 -5
  123. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  124. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +43 -19
  125. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
  126. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js +11 -4
  127. package/dist/tests/unit/tasks/dataset/datasetTasks.unit.test.js.map +1 -1
  128. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js +9 -8
  129. package/dist/tests/unit/tasks/frictionless/frictionlessTasks.unit.test.js.map +1 -1
  130. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +29 -10
  131. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
  132. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +2 -3
  133. package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
  134. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +4 -2
  135. package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -1
  136. package/dist/tests/unit/util.unit.test.js +110 -2
  137. package/dist/tests/unit/util.unit.test.js.map +1 -1
  138. package/dist/util.d.ts +5 -0
  139. package/dist/util.d.ts.map +1 -1
  140. package/dist/util.js +57 -5
  141. package/dist/util.js.map +1 -1
  142. package/package.json +24 -20
  143. package/vite.test.config.ts +1 -1
  144. package/dist/api/authMiddleware.d.ts +0 -6
  145. package/dist/api/authMiddleware.d.ts.map +0 -1
  146. package/dist/api/authMiddleware.js +0 -82
  147. package/dist/api/authMiddleware.js.map +0 -1
  148. package/dist/api/requestLoggerMiddleware.d.ts +0 -4
  149. package/dist/api/requestLoggerMiddleware.d.ts.map +0 -1
  150. package/dist/api/requestLoggerMiddleware.js +0 -12
  151. package/dist/api/requestLoggerMiddleware.js.map +0 -1
  152. package/dist/cjs/api/authMiddleware.cjs +0 -81
  153. package/dist/cjs/api/requestLoggerMiddleware.cjs +0 -14
  154. package/dist/tests/unit/api/authMiddleware.unit.test.d.ts +0 -2
  155. package/dist/tests/unit/api/authMiddleware.unit.test.d.ts.map +0 -1
  156. package/dist/tests/unit/api/authMiddleware.unit.test.js +0 -125
  157. package/dist/tests/unit/api/authMiddleware.unit.test.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import { ScheduledTaskNames } from "@prosopo/types";
2
- import { describe, expect, it, vi } from "vitest";
3
- import { checkIfTaskIsRunning } from "../../util.js";
2
+ import { at } from "@prosopo/util";
3
+ import { beforeEach, describe, expect, it, vi } from "vitest";
4
+ import { checkIfTaskIsRunning, getIPAddress, validateIpAddress, } from "../../util.js";
4
5
  describe("checkIfTaskIsRunning", () => {
5
6
  it("should return false if the task is not running", async () => {
6
7
  const taskName = ScheduledTaskNames.StoreCommitmentsExternal;
@@ -37,4 +38,111 @@ describe("checkIfTaskIsRunning", () => {
37
38
  expect(result).toBe(true);
38
39
  });
39
40
  });
41
+ describe("validateIpAddress", () => {
42
+ let mockLogger;
43
+ beforeEach(() => {
44
+ mockLogger = {
45
+ info: vi.fn().mockImplementation(console.info),
46
+ debug: vi.fn().mockImplementation(console.debug),
47
+ error: vi.fn().mockImplementation(console.error),
48
+ log: vi.fn().mockImplementation(console.log),
49
+ warn: vi.fn().mockImplementation(console.warn),
50
+ };
51
+ vi.clearAllMocks();
52
+ });
53
+ it("should return valid when IP is undefined", () => {
54
+ const result = validateIpAddress(undefined, BigInt(123456789), mockLogger);
55
+ expect(result.isValid).toBe(true);
56
+ expect(result.errorMessage).toBeUndefined();
57
+ });
58
+ it("should return valid when IP addresses match", () => {
59
+ const testIp = "212.132.203.186";
60
+ const ipBigInt = BigInt(3565472698);
61
+ const result = validateIpAddress(testIp, ipBigInt, mockLogger);
62
+ expect(result.isValid).toBe(true);
63
+ expect(result.errorMessage).toBeUndefined();
64
+ const logFn = mockLogger.info.mock.calls[0][0];
65
+ const logObj = logFn();
66
+ expect(logObj).toHaveProperty("data");
67
+ expect(logObj.data).toHaveProperty("ipV4orV6Address");
68
+ expect(logObj.data.ipV4orV6Address).toHaveProperty("address", testIp);
69
+ });
70
+ it("should return valid when when an IPV4 big int is returned from the DB and an IPV4 string is sent in the payload", () => {
71
+ const testIp = "82.43.214.180";
72
+ const ipBigInt = BigInt(1378604724);
73
+ const result = validateIpAddress(testIp, ipBigInt, mockLogger);
74
+ expect(result.isValid).toBe(true);
75
+ expect(result.errorMessage).toBeUndefined();
76
+ const logFn = mockLogger.info.mock.calls[0][0];
77
+ const logObj = logFn();
78
+ expect(logObj).toHaveProperty("data");
79
+ expect(logObj.data).toHaveProperty("ipV4orV6Address");
80
+ expect(logObj.data.ipV4orV6Address).toHaveProperty("address", testIp);
81
+ });
82
+ it("should return valid when when an IPV4 big int is returned from the DB and an IPV6 string is sent in the payload", () => {
83
+ const testIp = "::ffff:82.43.214.180";
84
+ const ipBigInt = BigInt(1378604724);
85
+ const result = validateIpAddress(testIp, ipBigInt, mockLogger);
86
+ expect(result.isValid).toBe(true);
87
+ expect(result.errorMessage).toBeUndefined();
88
+ const logFn = mockLogger.info.mock.calls[0][0];
89
+ const logObj = logFn();
90
+ expect(logObj).toHaveProperty("data");
91
+ expect(logObj.data).toHaveProperty("ipV4orV6Address");
92
+ expect(logObj.data.ipV4orV6Address).toHaveProperty("address", at(testIp.split(":"), 3));
93
+ });
94
+ it("should return valid when when an IPV6 big int is returned from the DB and an IPV4 string is sent in the payload", () => {
95
+ const testIp = "82.43.214.180";
96
+ const ipBigInt = 281472060348084n;
97
+ const result = validateIpAddress(testIp, ipBigInt, mockLogger);
98
+ expect(result.isValid).toBe(true);
99
+ expect(result.errorMessage).toBeUndefined();
100
+ const logFn = mockLogger.info.mock.calls[0][0];
101
+ const logObj = logFn();
102
+ expect(logObj).toHaveProperty("data");
103
+ expect(logObj.data).toHaveProperty("ipV4orV6Address");
104
+ expect(logObj.data.ipV4orV6Address).toHaveProperty("address", testIp);
105
+ });
106
+ it("should return valid when when an IPV6 big int is returned from the DB and an IPV6 string is sent in the payload", () => {
107
+ const testIp = "::ffff:82.43.214.180";
108
+ const ipBigInt = 281472060348084n;
109
+ const result = validateIpAddress(testIp, ipBigInt, mockLogger);
110
+ expect(result.isValid).toBe(true);
111
+ expect(result.errorMessage).toBeUndefined();
112
+ const logFn = mockLogger.info.mock.calls[0][0];
113
+ const logObj = logFn();
114
+ expect(logObj).toHaveProperty("data");
115
+ expect(logObj.data).toHaveProperty("ipV4orV6Address");
116
+ expect(logObj.data.ipV4orV6Address).toHaveProperty("address", at(testIp.split(":"), 3));
117
+ });
118
+ it("should return invalid when IP address is malformed", () => {
119
+ const invalidIp = "invalid.ip.address";
120
+ const challengeRecordIp = BigInt(3232235777);
121
+ const result = validateIpAddress(invalidIp, challengeRecordIp, mockLogger);
122
+ expect(result.isValid).toBe(false);
123
+ expect(result.errorMessage).toBe(`Invalid IP address: ${invalidIp}`);
124
+ const logFn = mockLogger.info.mock.calls[0][0];
125
+ const logObj = logFn();
126
+ expect(logObj).toHaveProperty("msg");
127
+ expect(logObj.msg).toEqual(`Invalid IP address: ${invalidIp}`);
128
+ });
129
+ it("should return invalid when IP addresses don't match", () => {
130
+ const providedIp = "192.168.1.1";
131
+ const storedIpBigInt = BigInt(3232235778);
132
+ const result = validateIpAddress(providedIp, storedIpBigInt, mockLogger);
133
+ expect(result.isValid).toBe(false);
134
+ expect(result.errorMessage).toContain("IP address mismatch:");
135
+ const logFn = mockLogger.info.mock.calls[1][0];
136
+ const logObj = logFn();
137
+ expect(logObj).toHaveProperty("msg");
138
+ expect(logObj.msg).toEqual("IP address mismatch: 192.168.1.2 !== 192.168.1.1");
139
+ });
140
+ it("should verify logger is called when IP validation occurs", () => {
141
+ const testIp = "127.0.0.1";
142
+ const ipAddress = getIPAddress(testIp);
143
+ const ipBigInt = ipAddress.bigInt();
144
+ validateIpAddress(testIp, ipBigInt, mockLogger);
145
+ expect(mockLogger.info).toHaveBeenCalledTimes(1);
146
+ });
147
+ });
40
148
  //# sourceMappingURL=util.unit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.unit.test.js","sourceRoot":"","sources":["../../../src/tests/unit/util.unit.test.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAKpD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,wBAAwB,CAAC;QAC7D,MAAM,EAAE,GAAG;YACV,0BAA0B,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;SAC3B,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,wBAAwB,CAAC;QAC7D,MAAM,EAAE,GAAG;YACV,0BAA0B,EAAE,EAAE;iBAC5B,EAAE,EAAE;iBACJ,iBAAiB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAsC,CAAC;YACvE,sBAAsB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBACjD,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE,WAAW;aAC4B,CAAC;SACjB,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,QAAQ,GAAG,kBAAkB,CAAC,wBAAwB,CAAC;QAC7D,MAAM,EAAE,GAAG;YACV,0BAA0B,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBACrD,GAAG,EAAE,KAAK;gBACV,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;aACM,CAAC;YACtC,sBAAsB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;SACvB,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"util.unit.test.js","sourceRoot":"","sources":["../../../src/tests/unit/util.unit.test.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type Logger } from "@prosopo/common";
1
2
  import { type IPAddress, type ScheduledTaskNames } from "@prosopo/types";
2
3
  import type { IProviderDatabase } from "@prosopo/types-database";
3
4
  export declare function encodeStringAddress(address: string): string;
@@ -5,4 +6,8 @@ export declare function shuffleArray<T>(array: T[]): T[];
5
6
  export declare function checkIfTaskIsRunning(taskName: ScheduledTaskNames, db: IProviderDatabase): Promise<boolean>;
6
7
  export declare const getIPAddress: (ipAddressString: string) => IPAddress;
7
8
  export declare const getIPAddressFromBigInt: (ipAddressBigInt: bigint) => IPAddress;
9
+ export declare const validateIpAddress: (ip: string | undefined, challengeRecordIpAddress: bigint, logger: Logger) => {
10
+ isValid: boolean;
11
+ errorMessage?: string;
12
+ };
8
13
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAkBA,OAAO,EACN,KAAK,SAAS,EACd,KAAK,kBAAkB,EAEvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAa,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAK5E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,UAUlD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAQ/C;AAQD,wBAAsB,oBAAoB,CACzC,QAAQ,EAAE,kBAAkB,EAC5B,EAAE,EAAE,iBAAiB,GACnB,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED,eAAO,MAAM,YAAY,oBAAqB,MAAM,KAAG,SAStD,CAAC;AAEF,eAAO,MAAM,sBAAsB,oBAAqB,MAAM,KAAG,SAEhE,CAAC"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAgBA,OAAO,EACN,KAAK,MAAM,EAGX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,KAAK,SAAS,EACd,KAAK,kBAAkB,EAEvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAMjE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,UAUlD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAQ/C;AAQD,wBAAsB,oBAAoB,CACzC,QAAQ,EAAE,kBAAkB,EAC5B,EAAE,EAAE,iBAAiB,GACnB,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED,eAAO,MAAM,YAAY,oBAAqB,MAAM,KAAG,SAUtD,CAAC;AAEF,eAAO,MAAM,sBAAsB,oBAAqB,MAAM,KAAG,SAShE,CAAC;AASF,eAAO,MAAM,iBAAiB,OACzB,MAAM,GAAG,SAAS,4BACI,MAAM,UACxB,MAAM,KACZ;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAsD3C,CAAC"}
package/dist/util.js CHANGED
@@ -1,9 +1,9 @@
1
- import { decodeAddress, encodeAddress } from "@polkadot/util-crypto/address";
2
1
  import { hexToU8a } from "@polkadot/util/hex";
3
2
  import { isHex } from "@polkadot/util/is";
4
- import { ProsopoContractError, ProsopoEnvError } from "@prosopo/common";
3
+ import { ProsopoContractError, ProsopoEnvError, } from "@prosopo/common";
5
4
  import { ScheduledTaskStatus, } from "@prosopo/types";
6
5
  import { at } from "@prosopo/util";
6
+ import { decodeAddress, encodeAddress } from "@prosopo/util-crypto";
7
7
  import { Address4, Address6 } from "ip-address";
8
8
  export function encodeStringAddress(address) {
9
9
  try {
@@ -35,16 +35,68 @@ export async function checkIfTaskIsRunning(taskName, db) {
35
35
  }
36
36
  export const getIPAddress = (ipAddressString) => {
37
37
  try {
38
- if (ipAddressString.match(/^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/)) {
38
+ try {
39
39
  return new Address4(ipAddressString);
40
40
  }
41
- return new Address6(ipAddressString);
41
+ catch (e) {
42
+ return new Address6(ipAddressString);
43
+ }
42
44
  }
43
45
  catch (e) {
44
46
  throw new ProsopoEnvError("API.INVALID_IP");
45
47
  }
46
48
  };
47
49
  export const getIPAddressFromBigInt = (ipAddressBigInt) => {
48
- return Address4.fromBigInt(ipAddressBigInt);
50
+ try {
51
+ if (ipAddressBigInt > 4228250626n) {
52
+ return Address6.fromBigInt(BigInt(ipAddressBigInt));
53
+ }
54
+ return Address4.fromBigInt(BigInt(ipAddressBigInt));
55
+ }
56
+ catch (e) {
57
+ throw new ProsopoEnvError("API.INVALID_IP");
58
+ }
59
+ };
60
+ export const validateIpAddress = (ip, challengeRecordIpAddress, logger) => {
61
+ if (!ip) {
62
+ return { isValid: true };
63
+ }
64
+ let ipV4orV6Address;
65
+ try {
66
+ ipV4orV6Address = getIPAddress(ip);
67
+ logger.info(() => ({ data: { ipV4orV6Address } }));
68
+ }
69
+ catch (e) {
70
+ const errorMessage = `Invalid IP address: ${ip}`;
71
+ logger.info(() => ({ msg: errorMessage }));
72
+ return { isValid: false, errorMessage };
73
+ }
74
+ let challengeIpV4orV6Address = getIPAddressFromBigInt(challengeRecordIpAddress);
75
+ ipV4orV6Address =
76
+ "address4" in ipV4orV6Address && ipV4orV6Address.address4
77
+ ? ipV4orV6Address.address4
78
+ : ipV4orV6Address;
79
+ challengeIpV4orV6Address =
80
+ "address4" in challengeIpV4orV6Address && challengeIpV4orV6Address.address4
81
+ ? challengeIpV4orV6Address.address4
82
+ : challengeIpV4orV6Address;
83
+ if (ipV4orV6Address.v4 && !challengeIpV4orV6Address.v4) {
84
+ challengeIpV4orV6Address = new Address4(challengeIpV4orV6Address.to4().correctForm());
85
+ }
86
+ if (!ipV4orV6Address.v4 && challengeIpV4orV6Address.v4) {
87
+ ipV4orV6Address = new Address6(ipV4orV6Address.to4().correctForm());
88
+ }
89
+ if (challengeIpV4orV6Address.bigInt() - ipV4orV6Address.bigInt() !== 0n) {
90
+ const errorMessage = `IP address mismatch: ${challengeIpV4orV6Address.address} !== ${ipV4orV6Address.address}`;
91
+ logger.info(() => ({
92
+ msg: errorMessage,
93
+ data: {
94
+ challengeIp: challengeIpV4orV6Address.address,
95
+ providedIp: ipV4orV6Address.address,
96
+ },
97
+ }));
98
+ return { isValid: false, errorMessage };
99
+ }
100
+ return { isValid: true };
49
101
  };
50
102
  //# sourceMappingURL=util.js.map
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAGN,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,UAAU,mBAAmB,CAAC,OAAe;IAClD,IAAI,CAAC;QACJ,OAAO,aAAa,CACnB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAC3D,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,oBAAoB,CAAC,0BAA0B,EAAE;YAC1D,OAAO,EAAE,EAAE,OAAO,EAAE;SACpB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,KAAU;IACzC,KAAK,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;QACtE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACjC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACzC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,QAA4B,EAC5B,EAAqB;IAErB,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,0BAA0B,CACtD,QAAQ,EACR,mBAAmB,CAAC,OAAO,CAC3B,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IAG3D,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,GAAG,aAAa,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,sBAAsB,CACpD,WAAW,CAAC,GAAe,EAC3B,mBAAmB,CAAC,SAAS,CAC7B,CAAC;QACF,OAAO,CAAC,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,eAAuB,EAAa,EAAE;IAClE,IAAI,CAAC;QACJ,IAAI,eAAe,CAAC,KAAK,CAAC,6CAA6C,CAAC,EAAE,CAAC;YAC1E,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,eAAuB,EAAa,EAAE;IAC5E,OAAO,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAC7C,CAAC,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/provider",
3
- "version": "2.9.8",
3
+ "version": "3.0.6",
4
4
  "author": "PROSOPO LIMITED <info@prosopo.io>",
5
5
  "license": "Apache-2.0",
6
6
  "main": "./dist/index.js",
@@ -24,28 +24,32 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@noble/hashes": "1.5.0",
27
- "@polkadot/keyring": "12.6.2",
28
27
  "@polkadot/util": "12.6.2",
29
- "@polkadot/util-crypto": "12.6.2",
30
- "@prosopo/api-express-router": "2.6.1",
31
- "@prosopo/api-route": "2.6.1",
32
- "@prosopo/common": "2.6.1",
33
- "@prosopo/config": "2.6.0",
34
- "@prosopo/database": "2.6.5",
35
- "@prosopo/datasets": "2.6.12",
36
- "@prosopo/env": "2.6.5",
37
- "@prosopo/keyring": "2.6.4",
38
- "@prosopo/types": "2.7.1",
39
- "@prosopo/types-database": "2.7.2",
40
- "@prosopo/types-env": "2.6.5",
41
- "@prosopo/user-access-policy": "2.6.4",
42
- "@prosopo/util": "2.6.0",
28
+ "@prosopo/api-express-router": "3.0.3",
29
+ "@prosopo/api-route": "2.6.7",
30
+ "@prosopo/common": "3.0.2",
31
+ "@prosopo/config": "3.1.0",
32
+ "@prosopo/database": "3.0.5",
33
+ "@prosopo/datasets": "3.0.5",
34
+ "@prosopo/env": "3.0.5",
35
+ "@prosopo/keyring": "2.8.5",
36
+ "@prosopo/types": "3.0.2",
37
+ "@prosopo/types-database": "3.0.5",
38
+ "@prosopo/types-env": "2.7.9",
39
+ "@prosopo/user-access-policy": "3.1.4",
40
+ "@prosopo/util": "3.0.2",
41
+ "@prosopo/util-crypto": "13.5.1",
42
+ "@typegoose/auto-increment": "4.13.0",
43
+ "axios": "1.10.0",
43
44
  "cron": "3.1.7",
45
+ "esbuild": "0.25.6",
44
46
  "express": "4.21.2",
45
47
  "ip-address": "10.0.1",
46
48
  "node-fetch": "3.3.2",
49
+ "openpgp": "5.11.3",
47
50
  "read-tls-client-hello": "1.1.0",
48
- "uuid": "10.0.0",
51
+ "uuid": "11.1.0",
52
+ "webpack-dev-server": "5.2.2",
49
53
  "zod": "3.23.8"
50
54
  },
51
55
  "devDependencies": {
@@ -55,11 +59,11 @@
55
59
  "concurrently": "9.0.1",
56
60
  "del-cli": "6.0.0",
57
61
  "dotenv": "16.4.5",
58
- "npm-run-all": "2.1.0",
62
+ "npm-run-all": "4.1.5",
59
63
  "tslib": "2.7.0",
60
- "tsx": "4.19.1",
64
+ "tsx": "4.20.3",
61
65
  "typescript": "5.6.2",
62
- "vite": "6.2.3",
66
+ "vite": "6.3.5",
63
67
  "vitest": "3.0.9"
64
68
  },
65
69
  "repository": {
@@ -17,4 +17,4 @@ import { loadEnv } from "@prosopo/dotenv";
17
17
 
18
18
  loadEnv();
19
19
 
20
- export default ViteTestConfig;
20
+ export default ViteTestConfig();
@@ -1,6 +0,0 @@
1
- import type { KeyringPair } from "@polkadot/keyring/types";
2
- import type { ProviderEnvironment } from "@prosopo/types-env";
3
- import type { NextFunction, Request, Response } from "express";
4
- export declare const authMiddleware: (env: ProviderEnvironment) => (req: Request, res: Response, next: NextFunction) => Promise<void>;
5
- export declare const verifySignature: (signature: string, timestamp: string, pair: KeyringPair) => void;
6
- //# sourceMappingURL=authMiddleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authMiddleware.d.ts","sourceRoot":"","sources":["../../src/api/authMiddleware.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAI3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,eAAO,MAAM,cAAc,QAAS,mBAAmB,WACnC,OAAO,OAAO,QAAQ,QAAQ,YAAY,kBAuC7D,CAAC;AAyCF,eAAO,MAAM,eAAe,cAChB,MAAM,aACN,MAAM,QACX,WAAW,SAajB,CAAC"}
@@ -1,82 +0,0 @@
1
- import { hexToU8a, isHex } from "@polkadot/util";
2
- import { ProsopoApiError, ProsopoEnvError } from "@prosopo/common";
3
- export const authMiddleware = (env) => {
4
- return async (req, res, next) => {
5
- try {
6
- const { signature, timestamp } = extractHeaders(req);
7
- let error;
8
- if (env.authAccount) {
9
- try {
10
- verifySignature(signature, timestamp, env.authAccount);
11
- next();
12
- return;
13
- }
14
- catch (e) {
15
- req.logger.warn({
16
- message: e.message,
17
- code: e.code,
18
- account: env.authAccount.address,
19
- });
20
- error = e;
21
- }
22
- }
23
- if (env.pair) {
24
- verifySignature(signature, timestamp, env.pair);
25
- next();
26
- return;
27
- }
28
- res.status(401).json({
29
- error: "Unauthorized",
30
- message: new ProsopoEnvError(error || "CONTRACT.CANNOT_FIND_KEYPAIR"),
31
- });
32
- return;
33
- }
34
- catch (err) {
35
- req.logger.error("Auth Middleware Error:", err);
36
- res.status(401).json({ error: "Unauthorized", message: err });
37
- return;
38
- }
39
- };
40
- };
41
- const extractHeaders = (req) => {
42
- const signature = req.headers.signature;
43
- const timestamp = req.headers.timestamp;
44
- if (!timestamp) {
45
- throw new ProsopoApiError("GENERAL.INVALID_TIMESTAMP", {
46
- context: { error: "Missing timestamp", code: 400 },
47
- });
48
- }
49
- if (!signature) {
50
- throw new ProsopoApiError("GENERAL.INVALID_SIGNATURE", {
51
- context: { error: "Missing signature", code: 400 },
52
- });
53
- }
54
- if (Array.isArray(signature) ||
55
- Array.isArray(timestamp) ||
56
- !isHex(signature)) {
57
- throw new ProsopoApiError("CONTRACT.INVALID_DATA_FORMAT", {
58
- context: { error: "Invalid header format", code: 400 },
59
- });
60
- }
61
- const now = new Date().getTime();
62
- const ts = Number.parseInt(timestamp);
63
- if (now - ts > 300000) {
64
- throw new ProsopoApiError("GENERAL.INVALID_TIMESTAMP", {
65
- context: { error: "Timestamp is too old", code: 400 },
66
- });
67
- }
68
- return { signature, timestamp };
69
- };
70
- export const verifySignature = (signature, timestamp, pair) => {
71
- const u8Sig = hexToU8a(signature);
72
- if (!pair.verify(timestamp, u8Sig, pair.publicKey)) {
73
- throw new ProsopoApiError("GENERAL.INVALID_SIGNATURE", {
74
- context: {
75
- error: "Signature verification failed",
76
- code: 401,
77
- account: pair.address,
78
- },
79
- });
80
- }
81
- };
82
- //# sourceMappingURL=authMiddleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authMiddleware.js","sourceRoot":"","sources":["../../src/api/authMiddleware.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { ProviderEnvironment } from "@prosopo/env";
2
- import type { NextFunction, Request, Response } from "express";
3
- export declare function requestLoggerMiddleware(env: ProviderEnvironment): (req: Request, res: Response, next: NextFunction) => void;
4
- //# sourceMappingURL=requestLoggerMiddleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requestLoggerMiddleware.d.ts","sourceRoot":"","sources":["../../src/api/requestLoggerMiddleware.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG/D,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,mBAAmB,SAClD,OAAO,OAAO,QAAQ,QAAQ,YAAY,UAavD"}
@@ -1,12 +0,0 @@
1
- import { getLogger } from "@prosopo/common";
2
- import { v4 as uuidv4 } from "uuid";
3
- export function requestLoggerMiddleware(env) {
4
- return (req, res, next) => {
5
- const requestId = req.headers["x-request-id"] || `e-${uuidv4()}`;
6
- const logger = getLogger(env.config.logLevel, "request-logger", requestId);
7
- req.logger = logger;
8
- req.requestId = requestId;
9
- next();
10
- };
11
- }
12
- //# sourceMappingURL=requestLoggerMiddleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requestLoggerMiddleware.js","sourceRoot":"","sources":["../../src/api/requestLoggerMiddleware.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,UAAU,uBAAuB,CAAC,GAAwB;IAC/D,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC1D,MAAM,SAAS,GACb,GAAG,CAAC,OAAO,CAAC,cAAc,CAAY,IAAI,KAAK,MAAM,EAAE,EAAE,CAAC;QAE5D,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAG3E,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;QACpB,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;QAG1B,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;AACH,CAAC"}
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const util = require("@polkadot/util");
4
- const common = require("@prosopo/common");
5
- const authMiddleware = (env) => {
6
- return async (req, res, next) => {
7
- try {
8
- const { signature, timestamp } = extractHeaders(req);
9
- let error;
10
- if (env.authAccount) {
11
- try {
12
- verifySignature(signature, timestamp, env.authAccount);
13
- next();
14
- return;
15
- } catch (e) {
16
- req.logger.warn({
17
- message: e.message,
18
- code: e.code,
19
- account: env.authAccount.address
20
- });
21
- error = e;
22
- }
23
- }
24
- if (env.pair) {
25
- verifySignature(signature, timestamp, env.pair);
26
- next();
27
- return;
28
- }
29
- res.status(401).json({
30
- error: "Unauthorized",
31
- message: new common.ProsopoEnvError(error || "CONTRACT.CANNOT_FIND_KEYPAIR")
32
- });
33
- return;
34
- } catch (err) {
35
- req.logger.error("Auth Middleware Error:", err);
36
- res.status(401).json({ error: "Unauthorized", message: err });
37
- return;
38
- }
39
- };
40
- };
41
- const extractHeaders = (req) => {
42
- const signature = req.headers.signature;
43
- const timestamp = req.headers.timestamp;
44
- if (!timestamp) {
45
- throw new common.ProsopoApiError("GENERAL.INVALID_TIMESTAMP", {
46
- context: { error: "Missing timestamp", code: 400 }
47
- });
48
- }
49
- if (!signature) {
50
- throw new common.ProsopoApiError("GENERAL.INVALID_SIGNATURE", {
51
- context: { error: "Missing signature", code: 400 }
52
- });
53
- }
54
- if (Array.isArray(signature) || Array.isArray(timestamp) || !util.isHex(signature)) {
55
- throw new common.ProsopoApiError("CONTRACT.INVALID_DATA_FORMAT", {
56
- context: { error: "Invalid header format", code: 400 }
57
- });
58
- }
59
- const now = (/* @__PURE__ */ new Date()).getTime();
60
- const ts = Number.parseInt(timestamp);
61
- if (now - ts > 3e5) {
62
- throw new common.ProsopoApiError("GENERAL.INVALID_TIMESTAMP", {
63
- context: { error: "Timestamp is too old", code: 400 }
64
- });
65
- }
66
- return { signature, timestamp };
67
- };
68
- const verifySignature = (signature, timestamp, pair) => {
69
- const u8Sig = util.hexToU8a(signature);
70
- if (!pair.verify(timestamp, u8Sig, pair.publicKey)) {
71
- throw new common.ProsopoApiError("GENERAL.INVALID_SIGNATURE", {
72
- context: {
73
- error: "Signature verification failed",
74
- code: 401,
75
- account: pair.address
76
- }
77
- });
78
- }
79
- };
80
- exports.authMiddleware = authMiddleware;
81
- exports.verifySignature = verifySignature;
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const common = require("@prosopo/common");
4
- const uuid = require("uuid");
5
- function requestLoggerMiddleware(env) {
6
- return (req, res, next) => {
7
- const requestId = req.headers["x-request-id"] || `e-${uuid.v4()}`;
8
- const logger = common.getLogger(env.config.logLevel, "request-logger", requestId);
9
- req.logger = logger;
10
- req.requestId = requestId;
11
- next();
12
- };
13
- }
14
- exports.requestLoggerMiddleware = requestLoggerMiddleware;
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=authMiddleware.unit.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authMiddleware.unit.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/unit/api/authMiddleware.unit.test.ts"],"names":[],"mappings":""}