@mikashboks/capture-intelligence-core 0.1.0

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 (89) hide show
  1. package/dist/cjs/__fixtures__/address-flow.fixtures.d.ts +35 -0
  2. package/dist/cjs/__fixtures__/address-flow.fixtures.d.ts.map +1 -0
  3. package/dist/cjs/__fixtures__/address-flow.fixtures.js +186 -0
  4. package/dist/cjs/__fixtures__/address-flow.fixtures.js.map +1 -0
  5. package/dist/cjs/__fixtures__/metadata-review.fixtures.d.ts +11 -0
  6. package/dist/cjs/__fixtures__/metadata-review.fixtures.d.ts.map +1 -0
  7. package/dist/cjs/__fixtures__/metadata-review.fixtures.js +69 -0
  8. package/dist/cjs/__fixtures__/metadata-review.fixtures.js.map +1 -0
  9. package/dist/cjs/address-proof.d.ts +33 -0
  10. package/dist/cjs/address-proof.d.ts.map +1 -0
  11. package/dist/cjs/address-proof.js +97 -0
  12. package/dist/cjs/address-proof.js.map +1 -0
  13. package/dist/cjs/document-classifier.d.ts +19 -0
  14. package/dist/cjs/document-classifier.d.ts.map +1 -0
  15. package/dist/cjs/document-classifier.js +213 -0
  16. package/dist/cjs/document-classifier.js.map +1 -0
  17. package/dist/cjs/flow-routing.d.ts +7 -0
  18. package/dist/cjs/flow-routing.d.ts.map +1 -0
  19. package/dist/cjs/flow-routing.js +45 -0
  20. package/dist/cjs/flow-routing.js.map +1 -0
  21. package/dist/cjs/index.d.ts +25 -0
  22. package/dist/cjs/index.d.ts.map +1 -0
  23. package/dist/cjs/index.js +83 -0
  24. package/dist/cjs/index.js.map +1 -0
  25. package/dist/cjs/metadata-review.d.ts +10 -0
  26. package/dist/cjs/metadata-review.d.ts.map +1 -0
  27. package/dist/cjs/metadata-review.js +93 -0
  28. package/dist/cjs/metadata-review.js.map +1 -0
  29. package/dist/cjs/metrics.d.ts +115 -0
  30. package/dist/cjs/metrics.d.ts.map +1 -0
  31. package/dist/cjs/metrics.js +302 -0
  32. package/dist/cjs/metrics.js.map +1 -0
  33. package/dist/cjs/quality-checks.d.ts +170 -0
  34. package/dist/cjs/quality-checks.d.ts.map +1 -0
  35. package/dist/cjs/quality-checks.js +417 -0
  36. package/dist/cjs/quality-checks.js.map +1 -0
  37. package/dist/cjs/sobel.d.ts +61 -0
  38. package/dist/cjs/sobel.d.ts.map +1 -0
  39. package/dist/cjs/sobel.js +179 -0
  40. package/dist/cjs/sobel.js.map +1 -0
  41. package/dist/cjs/types.d.ts +98 -0
  42. package/dist/cjs/types.d.ts.map +1 -0
  43. package/dist/cjs/types.js +38 -0
  44. package/dist/cjs/types.js.map +1 -0
  45. package/dist/esm/__fixtures__/address-flow.fixtures.d.ts +35 -0
  46. package/dist/esm/__fixtures__/address-flow.fixtures.d.ts.map +1 -0
  47. package/dist/esm/__fixtures__/address-flow.fixtures.js +183 -0
  48. package/dist/esm/__fixtures__/address-flow.fixtures.js.map +1 -0
  49. package/dist/esm/__fixtures__/metadata-review.fixtures.d.ts +11 -0
  50. package/dist/esm/__fixtures__/metadata-review.fixtures.d.ts.map +1 -0
  51. package/dist/esm/__fixtures__/metadata-review.fixtures.js +66 -0
  52. package/dist/esm/__fixtures__/metadata-review.fixtures.js.map +1 -0
  53. package/dist/esm/address-proof.d.ts +33 -0
  54. package/dist/esm/address-proof.d.ts.map +1 -0
  55. package/dist/esm/address-proof.js +86 -0
  56. package/dist/esm/address-proof.js.map +1 -0
  57. package/dist/esm/document-classifier.d.ts +19 -0
  58. package/dist/esm/document-classifier.d.ts.map +1 -0
  59. package/dist/esm/document-classifier.js +209 -0
  60. package/dist/esm/document-classifier.js.map +1 -0
  61. package/dist/esm/flow-routing.d.ts +7 -0
  62. package/dist/esm/flow-routing.d.ts.map +1 -0
  63. package/dist/esm/flow-routing.js +41 -0
  64. package/dist/esm/flow-routing.js.map +1 -0
  65. package/dist/esm/index.d.ts +25 -0
  66. package/dist/esm/index.d.ts.map +1 -0
  67. package/dist/esm/index.js +19 -0
  68. package/dist/esm/index.js.map +1 -0
  69. package/dist/esm/metadata-review.d.ts +10 -0
  70. package/dist/esm/metadata-review.d.ts.map +1 -0
  71. package/dist/esm/metadata-review.js +90 -0
  72. package/dist/esm/metadata-review.js.map +1 -0
  73. package/dist/esm/metrics.d.ts +115 -0
  74. package/dist/esm/metrics.d.ts.map +1 -0
  75. package/dist/esm/metrics.js +291 -0
  76. package/dist/esm/metrics.js.map +1 -0
  77. package/dist/esm/quality-checks.d.ts +170 -0
  78. package/dist/esm/quality-checks.d.ts.map +1 -0
  79. package/dist/esm/quality-checks.js +400 -0
  80. package/dist/esm/quality-checks.js.map +1 -0
  81. package/dist/esm/sobel.d.ts +61 -0
  82. package/dist/esm/sobel.d.ts.map +1 -0
  83. package/dist/esm/sobel.js +173 -0
  84. package/dist/esm/sobel.js.map +1 -0
  85. package/dist/esm/types.d.ts +98 -0
  86. package/dist/esm/types.d.ts.map +1 -0
  87. package/dist/esm/types.js +35 -0
  88. package/dist/esm/types.js.map +1 -0
  89. package/package.json +65 -0
@@ -0,0 +1,35 @@
1
+ import type { AddressMethod, AddressMethodStartBehavior, AddressStepState } from '../address-proof.js';
2
+ import type { FlowStepDefinition } from '../flow-routing.js';
3
+ export interface AddressMethodContractFixture {
4
+ id: string;
5
+ allowedMethods: unknown;
6
+ expectedSanitized: AddressMethod[];
7
+ expectedStartBehavior?: AddressMethodStartBehavior;
8
+ selectedMethod?: AddressMethod | null;
9
+ expectedEffectiveMethod?: AddressMethod | null;
10
+ expectedRecommendedMethod?: AddressMethod | null;
11
+ }
12
+ export interface AddressCompletionContractFixture {
13
+ id: string;
14
+ allowedMethods: unknown;
15
+ address: AddressStepState;
16
+ expectedComplete: boolean;
17
+ }
18
+ export interface FlowRoutingContractFixture {
19
+ id: string;
20
+ currentStepId: string;
21
+ skipType?: string;
22
+ expectedNextStepId?: string;
23
+ expectedPreviousStepId?: string;
24
+ }
25
+ export declare const sharedStructuredAddressFixture: {
26
+ district: string;
27
+ chiefdom: string;
28
+ town: string;
29
+ line1: string;
30
+ };
31
+ export declare const addressMethodContractFixtures: AddressMethodContractFixture[];
32
+ export declare const addressCompletionContractFixtures: AddressCompletionContractFixture[];
33
+ export declare const flowRoutingContractSteps: FlowStepDefinition[];
34
+ export declare const flowRoutingContractFixtures: FlowRoutingContractFixture[];
35
+ //# sourceMappingURL=address-flow.fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address-flow.fixtures.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/address-flow.fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,0BAA0B,EAC1B,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,aAAa,EAAE,CAAC;IACnC,qBAAqB,CAAC,EAAE,0BAA0B,CAAC;IACnD,cAAc,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,uBAAuB,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/C,yBAAyB,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,gCAAgC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,8BAA8B;;;;;CAKmC,CAAC;AAE/E,eAAO,MAAM,6BAA6B,EAAE,4BAA4B,EAuFvE,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,gCAAgC,EAiD/E,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,EAOxD,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,0BAA0B,EA6BnE,CAAC"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flowRoutingContractFixtures = exports.flowRoutingContractSteps = exports.addressCompletionContractFixtures = exports.addressMethodContractFixtures = exports.sharedStructuredAddressFixture = void 0;
4
+ exports.sharedStructuredAddressFixture = {
5
+ district: 'Western Area Urban',
6
+ chiefdom: 'Freetown',
7
+ town: 'Freetown',
8
+ line1: '12 Wilkinson Road',
9
+ };
10
+ exports.addressMethodContractFixtures = [
11
+ {
12
+ id: 'fallback-order-preserves-supported-methods',
13
+ allowedMethods: ['front_door_photo', 'front_door_photo', 'bogus', 'typed_address'],
14
+ expectedSanitized: ['front_door_photo', 'typed_address'],
15
+ expectedStartBehavior: {
16
+ kind: 'manual_choice',
17
+ effectiveMethod: null,
18
+ recommendedMethod: 'front_door_photo',
19
+ },
20
+ selectedMethod: null,
21
+ expectedEffectiveMethod: null,
22
+ expectedRecommendedMethod: 'front_door_photo',
23
+ },
24
+ {
25
+ id: 'missing-methods-default-to-canonical-order',
26
+ allowedMethods: undefined,
27
+ expectedSanitized: ['address_document', 'front_door_photo', 'typed_address'],
28
+ expectedStartBehavior: {
29
+ kind: 'manual_choice',
30
+ effectiveMethod: null,
31
+ recommendedMethod: 'address_document',
32
+ },
33
+ selectedMethod: null,
34
+ expectedEffectiveMethod: null,
35
+ expectedRecommendedMethod: 'address_document',
36
+ },
37
+ {
38
+ id: 'invalid-only-methods-fall-back-to-default-order',
39
+ allowedMethods: ['bogus'],
40
+ expectedSanitized: ['address_document', 'front_door_photo', 'typed_address'],
41
+ expectedStartBehavior: {
42
+ kind: 'manual_choice',
43
+ effectiveMethod: null,
44
+ recommendedMethod: 'address_document',
45
+ },
46
+ selectedMethod: null,
47
+ expectedEffectiveMethod: null,
48
+ expectedRecommendedMethod: 'address_document',
49
+ },
50
+ {
51
+ id: 'typed-only-address-skips-directly-to-form',
52
+ allowedMethods: ['typed_address'],
53
+ expectedSanitized: ['typed_address'],
54
+ expectedStartBehavior: {
55
+ kind: 'skip_to_form',
56
+ effectiveMethod: 'typed_address',
57
+ recommendedMethod: null,
58
+ },
59
+ selectedMethod: null,
60
+ expectedEffectiveMethod: 'typed_address',
61
+ expectedRecommendedMethod: null,
62
+ },
63
+ {
64
+ id: 'single-proof-method-auto-selects-proof-capture',
65
+ allowedMethods: ['front_door_photo'],
66
+ expectedSanitized: ['front_door_photo'],
67
+ expectedStartBehavior: {
68
+ kind: 'auto_select_proof',
69
+ effectiveMethod: 'front_door_photo',
70
+ recommendedMethod: 'front_door_photo',
71
+ },
72
+ selectedMethod: null,
73
+ expectedEffectiveMethod: 'front_door_photo',
74
+ expectedRecommendedMethod: 'front_door_photo',
75
+ },
76
+ {
77
+ id: 'invalid-explicit-selection-does-not-get-auto-inferred',
78
+ allowedMethods: ['typed_address'],
79
+ expectedSanitized: ['typed_address'],
80
+ selectedMethod: 'front_door_photo',
81
+ expectedEffectiveMethod: null,
82
+ expectedRecommendedMethod: null,
83
+ },
84
+ {
85
+ id: 'manual-choice-prefers-address-document-over-typed-address',
86
+ allowedMethods: ['typed_address', 'address_document'],
87
+ expectedSanitized: ['address_document', 'typed_address'],
88
+ expectedStartBehavior: {
89
+ kind: 'manual_choice',
90
+ effectiveMethod: null,
91
+ recommendedMethod: 'address_document',
92
+ },
93
+ selectedMethod: 'typed_address',
94
+ expectedEffectiveMethod: 'typed_address',
95
+ expectedRecommendedMethod: 'address_document',
96
+ },
97
+ ];
98
+ exports.addressCompletionContractFixtures = [
99
+ {
100
+ id: 'typed-address-completes-with-structured-fields-only',
101
+ allowedMethods: ['typed_address'],
102
+ address: {
103
+ ...exports.sharedStructuredAddressFixture,
104
+ method: 'typed_address',
105
+ proofUri: null,
106
+ coordinates: null,
107
+ },
108
+ expectedComplete: true,
109
+ },
110
+ {
111
+ id: 'address-document-requires-proof-upload',
112
+ allowedMethods: ['address_document'],
113
+ address: {
114
+ ...exports.sharedStructuredAddressFixture,
115
+ method: 'address_document',
116
+ proofUri: null,
117
+ coordinates: null,
118
+ },
119
+ expectedComplete: false,
120
+ },
121
+ {
122
+ id: 'front-door-photo-requires-gps-coordinates',
123
+ allowedMethods: ['front_door_photo'],
124
+ address: {
125
+ ...exports.sharedStructuredAddressFixture,
126
+ method: 'front_door_photo',
127
+ proofUri: 'file://front-door.jpg',
128
+ coordinates: null,
129
+ },
130
+ expectedComplete: false,
131
+ },
132
+ {
133
+ id: 'front-door-photo-completes-with-proof-and-gps',
134
+ allowedMethods: ['front_door_photo'],
135
+ address: {
136
+ ...exports.sharedStructuredAddressFixture,
137
+ method: 'front_door_photo',
138
+ proofUri: 'file://front-door.jpg',
139
+ coordinates: {
140
+ lat: 8.48,
141
+ lng: -13.23,
142
+ accuracy: 12,
143
+ },
144
+ },
145
+ expectedComplete: true,
146
+ },
147
+ ];
148
+ exports.flowRoutingContractSteps = [
149
+ { id: 'welcome' },
150
+ { id: 'address-proof-start' },
151
+ { id: 'address-input', type: 'address-form' },
152
+ { id: 'address-proof-photo', type: 'address-proof' },
153
+ { id: 'check-address-proof', type: 'address-proof' },
154
+ { id: 'loading' },
155
+ ];
156
+ exports.flowRoutingContractFixtures = [
157
+ {
158
+ id: 'proof-capture-mode-skips-address-form',
159
+ currentStepId: 'address-proof-start',
160
+ skipType: 'address-form',
161
+ expectedNextStepId: 'address-proof-photo',
162
+ expectedPreviousStepId: 'welcome',
163
+ },
164
+ {
165
+ id: 'typed-address-mode-skips-proof-capture-segment',
166
+ currentStepId: 'address-input',
167
+ skipType: 'address-proof',
168
+ expectedNextStepId: 'loading',
169
+ expectedPreviousStepId: 'address-proof-start',
170
+ },
171
+ {
172
+ id: 'back-navigation-returns-to-method-selection-when-form-is-skipped',
173
+ currentStepId: 'address-proof-photo',
174
+ skipType: 'address-form',
175
+ expectedNextStepId: 'check-address-proof',
176
+ expectedPreviousStepId: 'address-proof-start',
177
+ },
178
+ {
179
+ id: 'skip-resolution-works-even-when-current-step-is-in-the-skipped-type',
180
+ currentStepId: 'address-proof-photo',
181
+ skipType: 'address-proof',
182
+ expectedNextStepId: 'loading',
183
+ expectedPreviousStepId: 'address-input',
184
+ },
185
+ ];
186
+ //# sourceMappingURL=address-flow.fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address-flow.fixtures.js","sourceRoot":"","sources":["../../../src/__fixtures__/address-flow.fixtures.ts"],"names":[],"mappings":";;;AAgCa,QAAA,8BAA8B,GAAG;IAC5C,QAAQ,EAAE,oBAAoB;IAC9B,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,mBAAmB;CACkD,CAAC;AAElE,QAAA,6BAA6B,GAAmC;IAC3E;QACE,EAAE,EAAE,4CAA4C;QAChD,cAAc,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,EAAE,eAAe,CAAC;QAClF,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;QACxD,qBAAqB,EAAE;YACrB,IAAI,EAAE,eAAe;YACrB,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE,kBAAkB;SACtC;QACD,cAAc,EAAE,IAAI;QACpB,uBAAuB,EAAE,IAAI;QAC7B,yBAAyB,EAAE,kBAAkB;KAC9C;IACD;QACE,EAAE,EAAE,4CAA4C;QAChD,cAAc,EAAE,SAAS;QACzB,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,CAAC;QAC5E,qBAAqB,EAAE;YACrB,IAAI,EAAE,eAAe;YACrB,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE,kBAAkB;SACtC;QACD,cAAc,EAAE,IAAI;QACpB,uBAAuB,EAAE,IAAI;QAC7B,yBAAyB,EAAE,kBAAkB;KAC9C;IACD;QACE,EAAE,EAAE,iDAAiD;QACrD,cAAc,EAAE,CAAC,OAAO,CAAC;QACzB,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,CAAC;QAC5E,qBAAqB,EAAE;YACrB,IAAI,EAAE,eAAe;YACrB,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE,kBAAkB;SACtC;QACD,cAAc,EAAE,IAAI;QACpB,uBAAuB,EAAE,IAAI;QAC7B,yBAAyB,EAAE,kBAAkB;KAC9C;IACD;QACE,EAAE,EAAE,2CAA2C;QAC/C,cAAc,EAAE,CAAC,eAAe,CAAC;QACjC,iBAAiB,EAAE,CAAC,eAAe,CAAC;QACpC,qBAAqB,EAAE;YACrB,IAAI,EAAE,cAAc;YACpB,eAAe,EAAE,eAAe;YAChC,iBAAiB,EAAE,IAAI;SACxB;QACD,cAAc,EAAE,IAAI;QACpB,uBAAuB,EAAE,eAAe;QACxC,yBAAyB,EAAE,IAAI;KAChC;IACD;QACE,EAAE,EAAE,gDAAgD;QACpD,cAAc,EAAE,CAAC,kBAAkB,CAAC;QACpC,iBAAiB,EAAE,CAAC,kBAAkB,CAAC;QACvC,qBAAqB,EAAE;YACrB,IAAI,EAAE,mBAAmB;YACzB,eAAe,EAAE,kBAAkB;YACnC,iBAAiB,EAAE,kBAAkB;SACtC;QACD,cAAc,EAAE,IAAI;QACpB,uBAAuB,EAAE,kBAAkB;QAC3C,yBAAyB,EAAE,kBAAkB;KAC9C;IACD;QACE,EAAE,EAAE,uDAAuD;QAC3D,cAAc,EAAE,CAAC,eAAe,CAAC;QACjC,iBAAiB,EAAE,CAAC,eAAe,CAAC;QACpC,cAAc,EAAE,kBAAkB;QAClC,uBAAuB,EAAE,IAAI;QAC7B,yBAAyB,EAAE,IAAI;KAChC;IACD;QACE,EAAE,EAAE,2DAA2D;QAC/D,cAAc,EAAE,CAAC,eAAe,EAAE,kBAAkB,CAAC;QACrD,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;QACxD,qBAAqB,EAAE;YACrB,IAAI,EAAE,eAAe;YACrB,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE,kBAAkB;SACtC;QACD,cAAc,EAAE,eAAe;QAC/B,uBAAuB,EAAE,eAAe;QACxC,yBAAyB,EAAE,kBAAkB;KAC9C;CACF,CAAC;AAEW,QAAA,iCAAiC,GAAuC;IACnF;QACE,EAAE,EAAE,qDAAqD;QACzD,cAAc,EAAE,CAAC,eAAe,CAAC;QACjC,OAAO,EAAE;YACP,GAAG,sCAA8B;YACjC,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI;SAClB;QACD,gBAAgB,EAAE,IAAI;KACvB;IACD;QACE,EAAE,EAAE,wCAAwC;QAC5C,cAAc,EAAE,CAAC,kBAAkB,CAAC;QACpC,OAAO,EAAE;YACP,GAAG,sCAA8B;YACjC,MAAM,EAAE,kBAAkB;YAC1B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI;SAClB;QACD,gBAAgB,EAAE,KAAK;KACxB;IACD;QACE,EAAE,EAAE,2CAA2C;QAC/C,cAAc,EAAE,CAAC,kBAAkB,CAAC;QACpC,OAAO,EAAE;YACP,GAAG,sCAA8B;YACjC,MAAM,EAAE,kBAAkB;YAC1B,QAAQ,EAAE,uBAAuB;YACjC,WAAW,EAAE,IAAI;SAClB;QACD,gBAAgB,EAAE,KAAK;KACxB;IACD;QACE,EAAE,EAAE,+CAA+C;QACnD,cAAc,EAAE,CAAC,kBAAkB,CAAC;QACpC,OAAO,EAAE;YACP,GAAG,sCAA8B;YACjC,MAAM,EAAE,kBAAkB;YAC1B,QAAQ,EAAE,uBAAuB;YACjC,WAAW,EAAE;gBACX,GAAG,EAAE,IAAI;gBACT,GAAG,EAAE,CAAC,KAAK;gBACX,QAAQ,EAAE,EAAE;aACb;SACF;QACD,gBAAgB,EAAE,IAAI;KACvB;CACF,CAAC;AAEW,QAAA,wBAAwB,GAAyB;IAC5D,EAAE,EAAE,EAAE,SAAS,EAAE;IACjB,EAAE,EAAE,EAAE,qBAAqB,EAAE;IAC7B,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE;IAC7C,EAAE,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,eAAe,EAAE;IACpD,EAAE,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,eAAe,EAAE;IACpD,EAAE,EAAE,EAAE,SAAS,EAAE;CAClB,CAAC;AAEW,QAAA,2BAA2B,GAAiC;IACvE;QACE,EAAE,EAAE,uCAAuC;QAC3C,aAAa,EAAE,qBAAqB;QACpC,QAAQ,EAAE,cAAc;QACxB,kBAAkB,EAAE,qBAAqB;QACzC,sBAAsB,EAAE,SAAS;KAClC;IACD;QACE,EAAE,EAAE,gDAAgD;QACpD,aAAa,EAAE,eAAe;QAC9B,QAAQ,EAAE,eAAe;QACzB,kBAAkB,EAAE,SAAS;QAC7B,sBAAsB,EAAE,qBAAqB;KAC9C;IACD;QACE,EAAE,EAAE,kEAAkE;QACtE,aAAa,EAAE,qBAAqB;QACpC,QAAQ,EAAE,cAAc;QACxB,kBAAkB,EAAE,qBAAqB;QACzC,sBAAsB,EAAE,qBAAqB;KAC9C;IACD;QACE,EAAE,EAAE,qEAAqE;QACzE,aAAa,EAAE,qBAAqB;QACpC,QAAQ,EAAE,eAAe;QACzB,kBAAkB,EAAE,SAAS;QAC7B,sBAAsB,EAAE,eAAe;KACxC;CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { MetadataReviewInput } from '../metadata-review.js';
2
+ import type { MetadataReviewResult } from '../types.js';
3
+ export interface MetadataReviewFixture {
4
+ id: string;
5
+ input: MetadataReviewInput;
6
+ expected: Pick<MetadataReviewResult, 'passed' | 'orientation' | 'isDocument'> & {
7
+ issueKeys: string[];
8
+ };
9
+ }
10
+ export declare const metadataReviewFixtures: MetadataReviewFixture[];
11
+ //# sourceMappingURL=metadata-review.fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata-review.fixtures.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/metadata-review.fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,aAAa,GAAG,YAAY,CAAC,GAAG;QAC9E,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,EAgEzD,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.metadataReviewFixtures = void 0;
4
+ exports.metadataReviewFixtures = [
5
+ {
6
+ id: 'passport-square-fails-shape-check',
7
+ input: {
8
+ type: 'document',
9
+ width: 1000,
10
+ height: 1000,
11
+ documentType: 'PASSPORT',
12
+ fileSize: 180_000,
13
+ },
14
+ expected: {
15
+ passed: false,
16
+ orientation: 'square',
17
+ isDocument: false,
18
+ issueKeys: ['bad_aspect'],
19
+ },
20
+ },
21
+ {
22
+ id: 'portrait-id-warns-for-rotation-only',
23
+ input: {
24
+ type: 'document',
25
+ width: 720,
26
+ height: 1280,
27
+ documentType: 'NATIONAL_ID',
28
+ fileSize: 260_000,
29
+ },
30
+ expected: {
31
+ passed: true,
32
+ orientation: 'portrait',
33
+ isDocument: true,
34
+ issueKeys: ['document_rotated'],
35
+ },
36
+ },
37
+ {
38
+ id: 'compressed-landscape-selfie-warns-without-failing',
39
+ input: {
40
+ type: 'selfie',
41
+ width: 1280,
42
+ height: 720,
43
+ fileSize: 10_000,
44
+ },
45
+ expected: {
46
+ passed: true,
47
+ orientation: 'landscape',
48
+ isDocument: false,
49
+ issueKeys: ['selfie_landscape', 'low_detail'],
50
+ },
51
+ },
52
+ {
53
+ id: 'tiny-document-fails-immediately',
54
+ input: {
55
+ type: 'document',
56
+ width: 180,
57
+ height: 120,
58
+ documentType: 'DRIVERS_LICENSE',
59
+ fileSize: 20_000,
60
+ },
61
+ expected: {
62
+ passed: false,
63
+ orientation: 'landscape',
64
+ isDocument: false,
65
+ issueKeys: ['too_small'],
66
+ },
67
+ },
68
+ ];
69
+ //# sourceMappingURL=metadata-review.fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata-review.fixtures.js","sourceRoot":"","sources":["../../../src/__fixtures__/metadata-review.fixtures.ts"],"names":[],"mappings":";;;AAWa,QAAA,sBAAsB,GAA4B;IAC7D;QACE,EAAE,EAAE,mCAAmC;QACvC,KAAK,EAAE;YACL,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,YAAY,EAAE,UAAU;YACxB,QAAQ,EAAE,OAAO;SAClB;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,QAAQ;YACrB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,CAAC,YAAY,CAAC;SAC1B;KACF;IACD;QACE,EAAE,EAAE,qCAAqC;QACzC,KAAK,EAAE;YACL,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;YACZ,YAAY,EAAE,aAAa;YAC3B,QAAQ,EAAE,OAAO;SAClB;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,UAAU;YACvB,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,CAAC,kBAAkB,CAAC;SAChC;KACF;IACD;QACE,EAAE,EAAE,mDAAmD;QACvD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,MAAM;SACjB;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC;SAC9C;KACF;IACD;QACE,EAAE,EAAE,iCAAiC;QACrC,KAAK,EAAE;YACL,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,YAAY,EAAE,iBAAiB;YAC/B,QAAQ,EAAE,MAAM;SACjB;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,CAAC,WAAW,CAAC;SACzB;KACF;CACF,CAAC"}
@@ -0,0 +1,33 @@
1
+ export declare const ADDRESS_METHOD_ORDER: readonly ["address_document", "front_door_photo", "typed_address"];
2
+ export type AddressMethod = (typeof ADDRESS_METHOD_ORDER)[number];
3
+ export type AddressProofMode = Exclude<AddressMethod, 'typed_address'>;
4
+ export interface AddressCoordinatesLike {
5
+ latitude?: number | null;
6
+ longitude?: number | null;
7
+ lat?: number | null;
8
+ lng?: number | null;
9
+ accuracy?: number | null;
10
+ }
11
+ export interface AddressStepState {
12
+ district?: string | null;
13
+ chiefdom?: string | null;
14
+ town?: string | null;
15
+ line1?: string | null;
16
+ method?: AddressMethod | null;
17
+ proofUri?: string | null;
18
+ coordinates?: AddressCoordinatesLike | null;
19
+ }
20
+ export interface AddressMethodStartBehavior {
21
+ kind: 'skip_to_form' | 'auto_select_proof' | 'manual_choice';
22
+ effectiveMethod: AddressMethod | null;
23
+ recommendedMethod: AddressMethod | null;
24
+ }
25
+ export declare function isAddressMethod(value: unknown): value is AddressMethod;
26
+ export declare function sanitizeAllowedAddressMethods(raw: unknown): AddressMethod[];
27
+ export declare function getRecommendedAddressMethod(methods: unknown): AddressMethod | null;
28
+ export declare function getAddressMethodStartBehavior(methods: unknown): AddressMethodStartBehavior;
29
+ export declare function getEffectiveAddressMethod(selectedMethod: AddressMethod | null | undefined, methods: unknown): AddressMethod | null;
30
+ export declare function hasAddressProofCoordinates(coordinates?: AddressCoordinatesLike | null): coordinates is AddressCoordinatesLike;
31
+ export declare function hasStructuredAddress(address?: AddressStepState | null): boolean;
32
+ export declare function isAddressStepComplete(address: AddressStepState | null | undefined, methods: unknown): boolean;
33
+ //# sourceMappingURL=address-proof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address-proof.d.ts","sourceRoot":"","sources":["../../src/address-proof.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,oEAIvB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,cAAc,GAAG,mBAAmB,GAAG,eAAe,CAAC;IAC7D,eAAe,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,iBAAiB,EAAE,aAAa,GAAG,IAAI,CAAC;CACzC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAMtE;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,EAAE,CAS3E;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAGlF;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,0BAA0B,CA2B1F;AAED,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,EAAE,OAAO,GACf,aAAa,GAAG,IAAI,CAQtB;AAED,wBAAgB,0BAA0B,CACxC,WAAW,CAAC,EAAE,sBAAsB,GAAG,IAAI,GAC1C,WAAW,IAAI,sBAAsB,CASvC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAW/E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAC5C,OAAO,EAAE,OAAO,GACf,OAAO,CAoBT"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ADDRESS_METHOD_ORDER = void 0;
4
+ exports.isAddressMethod = isAddressMethod;
5
+ exports.sanitizeAllowedAddressMethods = sanitizeAllowedAddressMethods;
6
+ exports.getRecommendedAddressMethod = getRecommendedAddressMethod;
7
+ exports.getAddressMethodStartBehavior = getAddressMethodStartBehavior;
8
+ exports.getEffectiveAddressMethod = getEffectiveAddressMethod;
9
+ exports.hasAddressProofCoordinates = hasAddressProofCoordinates;
10
+ exports.hasStructuredAddress = hasStructuredAddress;
11
+ exports.isAddressStepComplete = isAddressStepComplete;
12
+ exports.ADDRESS_METHOD_ORDER = [
13
+ 'address_document',
14
+ 'front_door_photo',
15
+ 'typed_address',
16
+ ];
17
+ function isAddressMethod(value) {
18
+ return (value === 'address_document' ||
19
+ value === 'front_door_photo' ||
20
+ value === 'typed_address');
21
+ }
22
+ function sanitizeAllowedAddressMethods(raw) {
23
+ if (!Array.isArray(raw) || raw.length === 0) {
24
+ return [...exports.ADDRESS_METHOD_ORDER];
25
+ }
26
+ const requestedMethods = new Set(raw.filter(isAddressMethod));
27
+ const allowedMethods = exports.ADDRESS_METHOD_ORDER.filter(method => requestedMethods.has(method));
28
+ return allowedMethods.length > 0 ? allowedMethods : [...exports.ADDRESS_METHOD_ORDER];
29
+ }
30
+ function getRecommendedAddressMethod(methods) {
31
+ const allowedMethods = sanitizeAllowedAddressMethods(methods);
32
+ return allowedMethods.find(method => method !== 'typed_address') ?? null;
33
+ }
34
+ function getAddressMethodStartBehavior(methods) {
35
+ const allowedMethods = sanitizeAllowedAddressMethods(methods);
36
+ const proofMethods = allowedMethods.filter((method) => method !== 'typed_address');
37
+ if (proofMethods.length === 0) {
38
+ return {
39
+ kind: 'skip_to_form',
40
+ effectiveMethod: allowedMethods.includes('typed_address') ? 'typed_address' : null,
41
+ recommendedMethod: null,
42
+ };
43
+ }
44
+ if (proofMethods.length === 1 && !allowedMethods.includes('typed_address')) {
45
+ return {
46
+ kind: 'auto_select_proof',
47
+ effectiveMethod: proofMethods[0],
48
+ recommendedMethod: proofMethods[0],
49
+ };
50
+ }
51
+ return {
52
+ kind: 'manual_choice',
53
+ effectiveMethod: null,
54
+ recommendedMethod: getRecommendedAddressMethod(allowedMethods),
55
+ };
56
+ }
57
+ function getEffectiveAddressMethod(selectedMethod, methods) {
58
+ const allowedMethods = sanitizeAllowedAddressMethods(methods);
59
+ if (selectedMethod) {
60
+ return allowedMethods.includes(selectedMethod) ? selectedMethod : null;
61
+ }
62
+ return getAddressMethodStartBehavior(allowedMethods).effectiveMethod;
63
+ }
64
+ function hasAddressProofCoordinates(coordinates) {
65
+ if (!coordinates || typeof coordinates !== 'object') {
66
+ return false;
67
+ }
68
+ const latitude = coordinates.latitude ?? coordinates.lat;
69
+ const longitude = coordinates.longitude ?? coordinates.lng;
70
+ return typeof latitude === 'number' && typeof longitude === 'number';
71
+ }
72
+ function hasStructuredAddress(address) {
73
+ if (!address) {
74
+ return false;
75
+ }
76
+ return Boolean(address.district &&
77
+ address.chiefdom &&
78
+ address.town?.trim() &&
79
+ address.line1?.trim());
80
+ }
81
+ function isAddressStepComplete(address, methods) {
82
+ const effectiveMethod = getEffectiveAddressMethod(address?.method ?? null, methods);
83
+ if (!effectiveMethod || !hasStructuredAddress(address)) {
84
+ return false;
85
+ }
86
+ if (effectiveMethod === 'typed_address') {
87
+ return true;
88
+ }
89
+ if (!address?.proofUri) {
90
+ return false;
91
+ }
92
+ if (effectiveMethod === 'front_door_photo' && !hasAddressProofCoordinates(address.coordinates)) {
93
+ return false;
94
+ }
95
+ return true;
96
+ }
97
+ //# sourceMappingURL=address-proof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address-proof.js","sourceRoot":"","sources":["../../src/address-proof.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Document likelihood classifier -- 5-signal Bayesian heuristic.
3
+ *
4
+ * DOM-free: operates on raw greyscale (Uint8Array) and RGBA (Uint8ClampedArray)
5
+ * pixel data. No Canvas, no HTMLImageElement.
6
+ */
7
+ import type { DocumentLikelihoodResult, DocumentReviewProfile } from './types.js';
8
+ export declare function getDocumentReviewProfile(documentType: string | null | undefined): DocumentReviewProfile;
9
+ /**
10
+ * Determine whether a greyscale + RGBA image looks like a document.
11
+ *
12
+ * @param grey - Greyscale pixel array (w * h, one byte per pixel)
13
+ * @param imgData - RGBA pixel array (w * h * 4 bytes)
14
+ * @param w - Image width in pixels
15
+ * @param h - Image height in pixels
16
+ * @param documentType - Optional document type hint for aspect-ratio matching
17
+ */
18
+ export declare function checkDocumentLikelihood(grey: Uint8Array, imgData: Uint8ClampedArray, w: number, h: number, documentType?: string | null): DocumentLikelihoodResult;
19
+ //# sourceMappingURL=document-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-classifier.d.ts","sourceRoot":"","sources":["../../src/document-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AA6BlF,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,qBAAqB,CA+CvB;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,iBAAiB,EAC1B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,wBAAwB,CAgI1B"}