@unchainedshop/core-payment 3.0.0-alpha7 → 3.0.0-rc.12

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 (78) hide show
  1. package/lib/db/PaymentCredentialsCollection.d.ts +10 -3
  2. package/lib/db/PaymentCredentialsCollection.d.ts.map +1 -1
  3. package/lib/db/PaymentCredentialsCollection.js +3 -3
  4. package/lib/db/PaymentCredentialsCollection.js.map +1 -1
  5. package/lib/db/PaymentProvidersCollection.d.ts +16 -2
  6. package/lib/db/PaymentProvidersCollection.d.ts.map +1 -1
  7. package/lib/db/PaymentProvidersCollection.js +6 -0
  8. package/lib/db/PaymentProvidersCollection.js.map +1 -1
  9. package/lib/module/configurePaymentCredentialsModule.d.ts +11 -12
  10. package/lib/module/configurePaymentCredentialsModule.d.ts.map +1 -1
  11. package/lib/module/configurePaymentCredentialsModule.js +3 -3
  12. package/lib/module/configurePaymentCredentialsModule.js.map +1 -1
  13. package/lib/module/configurePaymentModule.d.ts +35 -10
  14. package/lib/module/configurePaymentModule.d.ts.map +1 -1
  15. package/lib/module/configurePaymentModule.js +2 -18
  16. package/lib/module/configurePaymentModule.js.map +1 -1
  17. package/lib/module/configurePaymentProvidersModule.d.ts +17 -41
  18. package/lib/module/configurePaymentProvidersModule.d.ts.map +1 -1
  19. package/lib/module/configurePaymentProvidersModule.js +0 -101
  20. package/lib/module/configurePaymentProvidersModule.js.map +1 -1
  21. package/lib/payment-index.d.ts +2 -8
  22. package/lib/payment-index.d.ts.map +1 -1
  23. package/lib/payment-index.js +2 -8
  24. package/lib/payment-index.js.map +1 -1
  25. package/lib/payment-settings.d.ts +6 -7
  26. package/lib/payment-settings.d.ts.map +1 -1
  27. package/lib/payment-settings.js +1 -1
  28. package/lib/payment-settings.js.map +1 -1
  29. package/package.json +13 -13
  30. package/src/db/PaymentCredentialsCollection.ts +13 -5
  31. package/src/db/PaymentProvidersCollection.ts +19 -2
  32. package/src/module/configurePaymentCredentialsModule.ts +42 -40
  33. package/src/module/configurePaymentModule.ts +5 -57
  34. package/src/module/configurePaymentProvidersModule.ts +27 -239
  35. package/src/module/payment-index.test.ts +1 -1
  36. package/src/payment-index.ts +2 -10
  37. package/src/payment-settings.ts +7 -8
  38. package/tsconfig.json +5 -7
  39. package/lib/director/PaymentAdapter.d.ts +0 -3
  40. package/lib/director/PaymentAdapter.d.ts.map +0 -1
  41. package/lib/director/PaymentAdapter.js +0 -49
  42. package/lib/director/PaymentAdapter.js.map +0 -1
  43. package/lib/director/PaymentDirector.d.ts +0 -3
  44. package/lib/director/PaymentDirector.d.ts.map +0 -1
  45. package/lib/director/PaymentDirector.js +0 -84
  46. package/lib/director/PaymentDirector.js.map +0 -1
  47. package/lib/director/PaymentError.d.ts +0 -7
  48. package/lib/director/PaymentError.d.ts.map +0 -1
  49. package/lib/director/PaymentError.js +0 -8
  50. package/lib/director/PaymentError.js.map +0 -1
  51. package/lib/director/PaymentPricingAdapter.d.ts +0 -46
  52. package/lib/director/PaymentPricingAdapter.d.ts.map +0 -1
  53. package/lib/director/PaymentPricingAdapter.js +0 -25
  54. package/lib/director/PaymentPricingAdapter.js.map +0 -1
  55. package/lib/director/PaymentPricingDirector.d.ts +0 -19
  56. package/lib/director/PaymentPricingDirector.d.ts.map +0 -1
  57. package/lib/director/PaymentPricingDirector.js +0 -58
  58. package/lib/director/PaymentPricingDirector.js.map +0 -1
  59. package/lib/director/PaymentPricingSheet.d.ts +0 -10
  60. package/lib/director/PaymentPricingSheet.d.ts.map +0 -1
  61. package/lib/director/PaymentPricingSheet.js +0 -75
  62. package/lib/director/PaymentPricingSheet.js.map +0 -1
  63. package/lib/director/PaymentProviderType.d.ts +0 -6
  64. package/lib/director/PaymentProviderType.d.ts.map +0 -1
  65. package/lib/director/PaymentProviderType.js +0 -7
  66. package/lib/director/PaymentProviderType.js.map +0 -1
  67. package/lib/types.d.ts +0 -84
  68. package/lib/types.d.ts.map +0 -1
  69. package/lib/types.js +0 -17
  70. package/lib/types.js.map +0 -1
  71. package/src/director/PaymentAdapter.ts +0 -63
  72. package/src/director/PaymentDirector.ts +0 -99
  73. package/src/director/PaymentError.ts +0 -6
  74. package/src/director/PaymentPricingAdapter.ts +0 -87
  75. package/src/director/PaymentPricingDirector.ts +0 -101
  76. package/src/director/PaymentPricingSheet.ts +0 -87
  77. package/src/director/PaymentProviderType.ts +0 -5
  78. package/src/types.ts +0 -108
@@ -1 +1 @@
1
- {"version":3,"file":"payment-settings.js","sourceRoot":"","sources":["../src/payment-settings.ts"],"names":[],"mappings":"AAgCA,MAAM,kBAAkB,GAAG,CAAC,IAAqB,EAAE,KAAsB,EAAE,EAAE;IAC3E,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,YAAY,GAAoB,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IAC5D,OAAO,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAA6B,KAAK,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,EAAE;IACnG,MAAM,+BAA+B,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,EAAE;QAClF,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,EAAE;YACnD,OAAO,wBAAwB,CAAC,GAAG,KAAK,iBAAiB,CAAC,iBAAiB,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,+BAA+B;QAAE,OAAO,+BAA+B,CAAC;IAC5E,OAAO,SAAS,EAAE,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;IAE9B,iBAAiB,CAAC,EAChB,wBAAwB,GAAG,YAAY,EACvC,wBAAwB,GAAG,sBAAsB,GAClD,GAAG,EAAE;QACJ,eAAe,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACpE,eAAe,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;IACtE,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"payment-settings.js","sourceRoot":"","sources":["../src/payment-settings.ts"],"names":[],"mappings":"AA+BA,MAAM,kBAAkB,GAAG,CAAC,IAAqB,EAAE,KAAsB,EAAE,EAAE;IAC3E,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,YAAY,GAAoB,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IAC5D,OAAO,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAA6B,KAAK,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,EAAE;IACnG,MAAM,+BAA+B,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,EAAE;QAClF,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,EAAE;YACnD,OAAO,wBAAwB,CAAC,GAAG,KAAK,iBAAiB,CAAC,iBAAiB,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,+BAA+B;QAAE,OAAO,+BAA+B,CAAC;IAC5E,OAAO,SAAS,EAAE,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,wBAAwB,EAAE,IAAI;IAC9B,wBAAwB,EAAE,IAAI;IAE9B,iBAAiB,CAAC,EAChB,wBAAwB,GAAG,YAAY,EACvC,wBAAwB,GAAG,sBAAsB,GAClD,GAAG,EAAE;QACJ,eAAe,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACpE,eAAe,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;IACtE,CAAC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,16 +1,13 @@
1
1
  {
2
2
  "name": "@unchainedshop/core-payment",
3
- "version": "3.0.0-alpha7",
3
+ "version": "3.0.0-rc.12",
4
4
  "main": "lib/payment-index.js",
5
- "exports": {
6
- ".": "./lib/payment-index.js",
7
- "./*": "./lib/*"
8
- },
9
5
  "types": "lib/payment-index.d.ts",
10
6
  "type": "module",
11
7
  "scripts": {
12
- "clean": "rm -rf lib",
13
- "prepublishOnly": "npm run clean && tsc",
8
+ "clean": "tsc -b --clean",
9
+ "build": "tsc -b",
10
+ "prepublishOnly": "npm run clean && npm run build",
14
11
  "watch": "tsc -w",
15
12
  "test": "NODE_OPTIONS=--experimental-vm-modules jest --detectOpenHandles --forceExit",
16
13
  "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch --detectOpenHandles --forceExit"
@@ -24,21 +21,24 @@
24
21
  "ecommerce",
25
22
  "core"
26
23
  ],
27
- "author": "Joël Meiller",
24
+ "authors": [
25
+ "Joël Meiller",
26
+ "Pascal Kaufmann"
27
+ ],
28
28
  "license": "EUPL-1.2",
29
29
  "bugs": {
30
30
  "url": "https://github.com/unchainedshop/unchained/issues"
31
31
  },
32
32
  "homepage": "https://github.com/unchainedshop/unchained#readme",
33
33
  "dependencies": {
34
- "@unchainedshop/events": "^3.0.0-alpha4",
35
- "@unchainedshop/logger": "^3.0.0-alpha4",
36
- "@unchainedshop/utils": "^3.0.0-alpha4"
34
+ "@unchainedshop/events": "^3.0.0-rc.12",
35
+ "@unchainedshop/logger": "^3.0.0-rc.12",
36
+ "@unchainedshop/utils": "^3.0.0-rc.12"
37
37
  },
38
38
  "devDependencies": {
39
- "@types/node": "^22.8.1",
39
+ "@types/node": "^22.10.2",
40
40
  "jest": "^29.7.0",
41
41
  "ts-jest": "^29.2.5",
42
- "typescript": "^5.6.3"
42
+ "typescript": "^5.7.2"
43
43
  }
44
44
  }
@@ -1,13 +1,21 @@
1
- import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { PaymentCredentials as PaymentCredentialsType } from '@unchainedshop/core-payment';
1
+ import { mongodb, buildDbIndexes, TimestampFields } from '@unchainedshop/mongodb';
2
+
3
+ export type PaymentCredentials = {
4
+ _id?: string;
5
+ paymentProviderId: string;
6
+ userId: string;
7
+ token?: string;
8
+ isPreferred?: boolean;
9
+ meta: any;
10
+ } & TimestampFields;
3
11
 
4
12
  export const PaymentCredentialsCollection = async (db: mongodb.Db) => {
5
- const PaymentCredentials = db.collection<PaymentCredentialsType>('payment_credentials');
13
+ const PaymentCredentialsCol = db.collection<PaymentCredentials>('payment_credentials');
6
14
 
7
- await buildDbIndexes<PaymentCredentialsType>(PaymentCredentials, [
15
+ await buildDbIndexes<PaymentCredentials>(PaymentCredentialsCol, [
8
16
  { index: { paymentProviderId: 1 } },
9
17
  { index: { userId: 1 } },
10
18
  ]);
11
19
 
12
- return PaymentCredentials;
20
+ return PaymentCredentialsCol;
13
21
  };
@@ -1,5 +1,22 @@
1
- import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { PaymentProvider } from '@unchainedshop/core-payment';
1
+ import { mongodb, buildDbIndexes, TimestampFields } from '@unchainedshop/mongodb';
2
+
3
+ export enum PaymentProviderType {
4
+ CARD = 'CARD',
5
+ INVOICE = 'INVOICE',
6
+ GENERIC = 'GENERIC',
7
+ }
8
+
9
+ export type PaymentConfiguration = Array<{
10
+ key: string;
11
+ value: string | null;
12
+ }>;
13
+
14
+ export type PaymentProvider = {
15
+ _id?: string;
16
+ type: PaymentProviderType;
17
+ adapterKey: string;
18
+ configuration: PaymentConfiguration;
19
+ } & TimestampFields;
3
20
 
4
21
  export const PaymentProvidersCollection = async (db: mongodb.Db) => {
5
22
  const PaymentProviders = db.collection<PaymentProvider>('payment-providers');
@@ -1,42 +1,16 @@
1
1
  import { mongodb, generateDbFilterById, generateDbObjectId } from '@unchainedshop/mongodb';
2
- import { PaymentCredentials as PaymentCredentialsType } from '../types.js';
3
-
4
- export type PaymentCredentialsModules = {
5
- // Queries
6
-
7
- credentialsExists: (query: { paymentCredentialsId: string }) => Promise<boolean>;
8
-
9
- findPaymentCredential: (
10
- query: {
11
- paymentCredentialsId?: string;
12
- userId?: string;
13
- paymentProviderId?: string;
14
- isPreferred?: boolean;
15
- },
16
- options?: mongodb.FindOptions,
17
- ) => Promise<PaymentCredentialsType>;
18
-
19
- findPaymentCredentials: (
20
- query: mongodb.Filter<PaymentCredentialsType>,
21
- options?: mongodb.FindOptions,
22
- ) => Promise<Array<PaymentCredentialsType>>;
23
-
24
- // Mutations
25
- markPreferred: (query: { userId: string; paymentCredentialsId: string }) => Promise<void>;
26
-
27
- upsertCredentials: (
28
- doc: Pick<PaymentCredentialsType, 'userId' | 'paymentProviderId' | '_id' | 'token'> & {
29
- [x: string]: any;
30
- },
31
- ) => Promise<string | null>;
32
-
33
- removeCredentials: (paymentCredentialsId: string) => Promise<PaymentCredentialsType>;
34
- };
2
+ import { PaymentCredentials as PaymentCredentialsType } from '../db/PaymentCredentialsCollection.js';
35
3
 
36
4
  export const configurePaymentCredentialsModule = (
37
5
  PaymentCredentials: mongodb.Collection<PaymentCredentialsType>,
38
- ): PaymentCredentialsModules => {
39
- const markPreferred = async ({ userId, paymentCredentialsId }) => {
6
+ ) => {
7
+ const markPreferred = async ({
8
+ userId,
9
+ paymentCredentialsId,
10
+ }: {
11
+ userId: string;
12
+ paymentCredentialsId: string;
13
+ }): Promise<void> => {
40
14
  await PaymentCredentials.updateOne(
41
15
  {
42
16
  _id: paymentCredentialsId,
@@ -63,7 +37,11 @@ export const configurePaymentCredentialsModule = (
63
37
  return {
64
38
  markPreferred,
65
39
 
66
- credentialsExists: async ({ paymentCredentialsId }) => {
40
+ credentialsExists: async ({
41
+ paymentCredentialsId,
42
+ }: {
43
+ paymentCredentialsId: string;
44
+ }): Promise<boolean> => {
67
45
  const credentialsCount = await PaymentCredentials.countDocuments(
68
46
  generateDbFilterById(paymentCredentialsId),
69
47
  { limit: 1 },
@@ -71,7 +49,18 @@ export const configurePaymentCredentialsModule = (
71
49
  return !!credentialsCount;
72
50
  },
73
51
 
74
- findPaymentCredential: async ({ paymentCredentialsId, userId, paymentProviderId }, options) => {
52
+ findPaymentCredential: async (
53
+ {
54
+ paymentCredentialsId,
55
+ userId,
56
+ paymentProviderId,
57
+ }: {
58
+ paymentCredentialsId?: string;
59
+ userId?: string;
60
+ paymentProviderId?: string;
61
+ },
62
+ options?: mongodb.FindOptions,
63
+ ): Promise<PaymentCredentialsType> => {
75
64
  return PaymentCredentials.findOne(
76
65
  paymentCredentialsId
77
66
  ? generateDbFilterById(paymentCredentialsId)
@@ -80,12 +69,23 @@ export const configurePaymentCredentialsModule = (
80
69
  );
81
70
  },
82
71
 
83
- findPaymentCredentials: async (query, options) => {
72
+ findPaymentCredentials: async (
73
+ query: mongodb.Filter<PaymentCredentialsType>,
74
+ options?: mongodb.FindOptions,
75
+ ): Promise<Array<PaymentCredentialsType>> => {
84
76
  const credentials = await PaymentCredentials.find(query, options).toArray();
85
77
  return credentials;
86
78
  },
87
79
 
88
- upsertCredentials: async ({ userId, paymentProviderId, _id, token, ...meta }) => {
80
+ upsertCredentials: async ({
81
+ userId,
82
+ paymentProviderId,
83
+ _id,
84
+ token,
85
+ ...meta
86
+ }: Pick<PaymentCredentialsType, 'userId' | 'paymentProviderId' | '_id' | 'token'> & {
87
+ [x: string]: any;
88
+ }): Promise<string> => {
89
89
  const insertedId = _id || generateDbObjectId();
90
90
  const result = await PaymentCredentials.updateOne(
91
91
  _id
@@ -123,10 +123,12 @@ export const configurePaymentCredentialsModule = (
123
123
  return null;
124
124
  },
125
125
 
126
- removeCredentials: async (paymentCredentialsId) => {
126
+ removeCredentials: async (paymentCredentialsId: string): Promise<PaymentCredentialsType> => {
127
127
  const selector = generateDbFilterById(paymentCredentialsId);
128
128
  const paymentCredentials = await PaymentCredentials.findOneAndDelete(selector, {});
129
129
  return paymentCredentials;
130
130
  },
131
131
  };
132
132
  };
133
+
134
+ export type PaymentCredentialsModule = ReturnType<typeof configurePaymentCredentialsModule>;
@@ -1,41 +1,14 @@
1
- import { UnchainedCore } from '@unchainedshop/core';
2
1
  import { PaymentCredentialsCollection } from '../db/PaymentCredentialsCollection.js';
3
2
  import { PaymentProvidersCollection } from '../db/PaymentProvidersCollection.js';
4
- import {
5
- configurePaymentCredentialsModule,
6
- PaymentCredentialsModules,
7
- } from './configurePaymentCredentialsModule.js';
8
- import {
9
- configurePaymentProvidersModule,
10
- PaymentProvidersModules,
11
- } from './configurePaymentProvidersModule.js';
3
+ import { configurePaymentCredentialsModule } from './configurePaymentCredentialsModule.js';
4
+ import { configurePaymentProvidersModule } from './configurePaymentProvidersModule.js';
12
5
  import { paymentSettings, PaymentSettingsOptions } from '../payment-settings.js';
13
- import { PaymentContext, PaymentCredentials as PaymentCredentialsType } from '../types.js';
14
6
  import { ModuleInput } from '@unchainedshop/mongodb';
15
- export type PaymentModule = {
16
- /*
17
- * Payment Providers Module
18
- */
19
-
20
- registerCredentials: (
21
- paymentProviderId: string,
22
- paymentContext: PaymentContext,
23
- unchainedAPI: UnchainedCore,
24
- ) => Promise<PaymentCredentialsType>;
25
-
26
- paymentProviders: PaymentProvidersModules;
27
-
28
- /*
29
- * Payment Credentials Module
30
- */
31
-
32
- paymentCredentials: PaymentCredentialsModules;
33
- };
34
7
 
35
8
  export const configurePaymentModule = async ({
36
9
  db,
37
10
  options: paymentOptions = {},
38
- }: ModuleInput<PaymentSettingsOptions>): Promise<PaymentModule> => {
11
+ }: ModuleInput<PaymentSettingsOptions>) => {
39
12
  const PaymentProviders = await PaymentProvidersCollection(db);
40
13
  const PaymentCredentials = await PaymentCredentialsCollection(db);
41
14
 
@@ -44,35 +17,10 @@ export const configurePaymentModule = async ({
44
17
  const paymentProviders = configurePaymentProvidersModule(PaymentProviders);
45
18
  const paymentCredentials = configurePaymentCredentialsModule(PaymentCredentials);
46
19
 
47
- const registerCredentials: PaymentModule['registerCredentials'] = async (
48
- paymentProviderId,
49
- paymentContext,
50
- unchainedAPI,
51
- ) => {
52
- const registration = await paymentProviders.register(
53
- paymentProviderId,
54
- paymentContext,
55
- unchainedAPI,
56
- );
57
-
58
- if (!registration) return null;
59
-
60
- const paymentCredentialsId = await paymentCredentials.upsertCredentials({
61
- userId: paymentContext.userId,
62
- paymentProviderId,
63
- ...registration,
64
- });
65
-
66
- return paymentCredentials.findPaymentCredential({
67
- paymentCredentialsId,
68
- userId: paymentContext.userId,
69
- paymentProviderId,
70
- });
71
- };
72
-
73
20
  return {
74
21
  paymentProviders,
75
22
  paymentCredentials,
76
- registerCredentials,
77
23
  };
78
24
  };
25
+
26
+ export type PaymentModule = Awaited<ReturnType<typeof configurePaymentModule>>;
@@ -1,108 +1,12 @@
1
- import { UnchainedCore } from '@unchainedshop/core';
2
- import {
3
- PaymentChargeActionResult,
4
- PaymentContext,
5
- PaymentCredentials,
6
- PaymentError,
7
- PaymentInterface,
8
- PaymentProvider,
9
- } from '../types.js';
10
1
  import { emit, registerEvents } from '@unchainedshop/events';
11
2
  import { generateDbFilterById, generateDbObjectId, mongodb } from '@unchainedshop/mongodb';
12
- import { PaymentPricingContext, PaymentPricingDirector } from '../director/PaymentPricingDirector.js';
13
- import { PaymentPricingSheet } from '../director/PaymentPricingSheet.js';
14
- import { PaymentDirector } from '../director/PaymentDirector.js';
15
- import { paymentSettings } from '../payment-settings.js';
16
- import { Order } from '@unchainedshop/core-orders';
17
- import {
18
- IPaymentPricingSheet,
19
- PaymentPricingCalculation,
20
- PaymentProviderType,
21
- } from '../payment-index.js';
3
+ import { PaymentProvider } from '../db/PaymentProvidersCollection.js';
22
4
 
23
- export type PaymentProvidersModules = {
24
- // Queries
25
- create: (doc: PaymentProvider) => Promise<PaymentProvider>;
26
- update: (_id: string, doc: PaymentProvider) => Promise<PaymentProvider>;
27
- delete: (_id: string) => Promise<PaymentProvider>;
28
- count: (query: mongodb.Filter<PaymentProvider>) => Promise<number>;
29
- findProvider: (
30
- query: mongodb.Filter<PaymentProvider> & {
31
- paymentProviderId: string;
32
- },
33
- options?: mongodb.FindOptions,
34
- ) => Promise<PaymentProvider>;
35
- findProviders: (
36
- query: mongodb.Filter<PaymentProvider>,
37
- options?: mongodb.FindOptions,
38
- ) => Promise<Array<PaymentProvider>>;
39
-
40
- providerExists: (query: { paymentProviderId: string }) => Promise<boolean>;
41
-
42
- // Payment adapter
43
- findSupported: (
44
- query: { order: Order },
45
- unchainedAPI: UnchainedCore,
46
- ) => Promise<Array<PaymentProvider>>;
47
- determineDefault: (
48
- paymentProviders: Array<PaymentProvider>,
49
- params: { order: Order; paymentCredentials?: Array<PaymentCredentials> },
50
- unchainedAPI: UnchainedCore,
51
- ) => Promise<PaymentProvider>;
52
-
53
- findInterface: (query: PaymentProvider) => PaymentInterface;
54
- findInterfaces: (query: { type: PaymentProviderType }) => Array<PaymentInterface>;
55
-
56
- pricingSheet: (params: {
57
- calculation: Array<PaymentPricingCalculation>;
58
- currency: string;
59
- }) => IPaymentPricingSheet;
60
-
61
- configurationError: (
62
- paymentProvider: PaymentProvider,
63
- unchainedAPI: UnchainedCore,
64
- ) => Promise<PaymentError>;
65
-
66
- isActive: (paymentProvider: PaymentProvider, unchainedAPI: UnchainedCore) => Promise<boolean>;
67
-
68
- isPayLaterAllowed: (paymentProvider: PaymentProvider, unchainedAPI: UnchainedCore) => Promise<boolean>;
69
-
70
- calculate: (
71
- pricingContext: PaymentPricingContext,
72
- unchainedAPI: UnchainedCore,
73
- ) => Promise<Array<PaymentPricingCalculation>>;
74
-
75
- charge: (
76
- paymentProviderId: string,
77
- paymentContext: PaymentContext,
78
- unchainedAPI: UnchainedCore,
79
- ) => Promise<PaymentChargeActionResult | false>;
80
- register: (
81
- paymentProviderId: string,
82
- paymentContext: PaymentContext,
83
- unchainedAPI: UnchainedCore,
84
- ) => Promise<any>;
85
- sign: (
86
- paymentProviderId: string,
87
- paymentContext: PaymentContext,
88
- unchainedAPI: UnchainedCore,
89
- ) => Promise<string>;
90
- validate: (
91
- paymentProviderId: string,
92
- paymentContext: PaymentContext,
93
- unchainedAPI: UnchainedCore,
94
- ) => Promise<boolean>;
95
- cancel: (
96
- paymentProviderId: string,
97
- paymentContext: PaymentContext,
98
- unchainedAPI: UnchainedCore,
99
- ) => Promise<boolean>;
100
- confirm: (
101
- paymentProviderId: string,
102
- paymentContext: PaymentContext,
103
- unchainedAPI: UnchainedCore,
104
- ) => Promise<boolean>;
105
- };
5
+ export interface PaymentInterface {
6
+ _id: string;
7
+ label: string;
8
+ version: string;
9
+ }
106
10
 
107
11
  const PAYMENT_PROVIDER_EVENTS: string[] = [
108
12
  'PAYMENT_PROVIDER_CREATE',
@@ -114,47 +18,42 @@ export const buildFindSelector = ({ type }: mongodb.Filter<PaymentProvider> = {}
114
18
  return { ...(type ? { type } : {}), deleted: null };
115
19
  };
116
20
 
117
- const asyncFilter = async (arr, predicate) => {
118
- const results = await Promise.all(arr.map(predicate));
119
-
120
- return arr.filter((_v, index) => results[index]);
121
- };
122
-
123
21
  export const configurePaymentProvidersModule = (
124
22
  PaymentProviders: mongodb.Collection<PaymentProvider>,
125
- ): PaymentProvidersModules => {
23
+ ) => {
126
24
  registerEvents(PAYMENT_PROVIDER_EVENTS);
127
25
 
128
- const getPaymentAdapter = async (
129
- paymentProviderId: string,
130
- paymentContext: PaymentContext,
131
- unchainedAPI: UnchainedCore,
132
- ) => {
133
- const provider = await PaymentProviders.findOne(generateDbFilterById(paymentProviderId), {});
134
-
135
- return PaymentDirector.actions(provider, paymentContext, unchainedAPI);
136
- };
137
-
138
26
  return {
139
27
  // Queries
140
- count: async (query) => {
28
+ count: async (query: mongodb.Filter<PaymentProvider>): Promise<number> => {
141
29
  const providerCount = await PaymentProviders.countDocuments(buildFindSelector(query));
142
30
  return providerCount;
143
31
  },
144
32
 
145
- findProvider: async ({ paymentProviderId, ...query }, options) => {
33
+ findProvider: async (
34
+ {
35
+ paymentProviderId,
36
+ ...query
37
+ }: mongodb.Filter<PaymentProvider> & {
38
+ paymentProviderId: string;
39
+ },
40
+ options?: mongodb.FindOptions,
41
+ ): Promise<PaymentProvider> => {
146
42
  return PaymentProviders.findOne(
147
43
  paymentProviderId ? generateDbFilterById(paymentProviderId) : query,
148
44
  options,
149
45
  );
150
46
  },
151
47
 
152
- findProviders: async (query, options = { sort: { created: 1 } }) => {
48
+ findProviders: async (
49
+ query: mongodb.Filter<PaymentProvider>,
50
+ options: mongodb.FindOptions = { sort: { created: 1 } },
51
+ ): Promise<Array<PaymentProvider>> => {
153
52
  const providers = PaymentProviders.find(buildFindSelector(query), options);
154
53
  return providers.toArray();
155
54
  },
156
55
 
157
- providerExists: async ({ paymentProviderId }) => {
56
+ providerExists: async ({ paymentProviderId }: { paymentProviderId: string }): Promise<boolean> => {
158
57
  const providerCount = await PaymentProviders.countDocuments(
159
58
  generateDbFilterById(paymentProviderId, { deleted: null }),
160
59
  { limit: 1 },
@@ -162,124 +61,11 @@ export const configurePaymentProvidersModule = (
162
61
  return !!providerCount;
163
62
  },
164
63
 
165
- findInterface: (paymentProvider) => {
166
- const Adapter = PaymentDirector.getAdapter(paymentProvider.adapterKey);
167
- if (!Adapter) return null;
168
- return {
169
- _id: Adapter.key,
170
- label: Adapter.label,
171
- version: Adapter.version,
172
- };
173
- },
174
-
175
- pricingSheet: (params) => {
176
- return PaymentPricingSheet(params);
177
- },
178
-
179
- findInterfaces: ({ type }) => {
180
- return PaymentDirector.getAdapters()
181
- .filter((Adapter) => Adapter.typeSupported(type))
182
- .map((Adapter) => ({
183
- _id: Adapter.key,
184
- label: Adapter.label,
185
- version: Adapter.version,
186
- }));
187
- },
188
-
189
- findSupported: async (paymentContext, unchainedAPI) => {
190
- const allProviders = await PaymentProviders.find({ deleted: null }).toArray();
191
- const providers: PaymentProvider[] = await asyncFilter(
192
- allProviders,
193
- async (provider: PaymentProvider) => {
194
- try {
195
- const director = await PaymentDirector.actions(provider, paymentContext, unchainedAPI);
196
- return director.isActive();
197
- } catch {
198
- return false;
199
- }
200
- },
201
- );
202
-
203
- return paymentSettings.filterSupportedProviders(
204
- {
205
- providers,
206
- order: paymentContext.order,
207
- },
208
- unchainedAPI,
209
- );
210
- },
211
-
212
- determineDefault: async (paymentProviders, deliveryContext, unchainedAPI) => {
213
- return paymentSettings.determineDefaultProvider(
214
- {
215
- providers: paymentProviders,
216
- ...deliveryContext,
217
- },
218
- unchainedAPI,
219
- );
220
- },
221
-
222
- // Payment Adapter
223
-
224
- configurationError: async (paymentProvider, unchainedAPI) => {
225
- const actions = await PaymentDirector.actions(paymentProvider, {}, unchainedAPI);
226
- return actions.configurationError();
227
- },
228
-
229
- calculate: async (pricingContext, unchainedAPI) => {
230
- const pricing = await PaymentPricingDirector.actions(pricingContext, unchainedAPI);
231
- return pricing.calculate();
232
- },
233
-
234
- isActive: async (paymentProvider, unchainedAPI) => {
235
- const actions = await PaymentDirector.actions(paymentProvider, {}, unchainedAPI);
236
- return actions.isActive();
237
- },
238
-
239
- isPayLaterAllowed: async (paymentProvider, unchainedAPI) => {
240
- const actions = await PaymentDirector.actions(paymentProvider, {}, unchainedAPI);
241
- return actions.isPayLaterAllowed();
242
- },
243
-
244
- charge: async (paymentProviderId, paymentContext, unchainedAPI) => {
245
- const adapter = await getPaymentAdapter(paymentProviderId, paymentContext, unchainedAPI);
246
- return adapter.charge();
247
- },
248
-
249
- register: async (paymentProviderId, paymentContext, unchainedAPI) => {
250
- const adapter = await getPaymentAdapter(paymentProviderId, paymentContext, unchainedAPI);
251
- return adapter.register();
252
- },
253
-
254
- sign: async (paymentProviderId, paymentContext, unchainedAPI) => {
255
- const adapter = await getPaymentAdapter(paymentProviderId, paymentContext, unchainedAPI);
256
- return adapter.sign();
257
- },
258
-
259
- validate: async (paymentProviderId, paymentContext, unchainedAPI) => {
260
- const adapter = await getPaymentAdapter(paymentProviderId, paymentContext, unchainedAPI);
261
- return adapter.validate();
262
- },
263
-
264
- cancel: async (paymentProviderId, paymentContext, unchainedAPI) => {
265
- const adapter = await getPaymentAdapter(paymentProviderId, paymentContext, unchainedAPI);
266
- return adapter.cancel();
267
- },
268
-
269
- confirm: async (paymentProviderId, paymentContext, unchainedAPI) => {
270
- const adapter = await getPaymentAdapter(paymentProviderId, paymentContext, unchainedAPI);
271
- return adapter.confirm();
272
- },
273
-
274
64
  // Mutations
275
- create: async (doc) => {
276
- const Adapter = PaymentDirector.getAdapter(doc.adapterKey);
277
- if (!Adapter) return null;
278
-
65
+ create: async (doc: PaymentProvider): Promise<PaymentProvider> => {
279
66
  const { insertedId: paymentProviderId } = await PaymentProviders.insertOne({
280
67
  _id: generateDbObjectId(),
281
68
  created: new Date(),
282
- configuration: Adapter.initialConfiguration,
283
69
  ...doc,
284
70
  });
285
71
 
@@ -291,7 +77,7 @@ export const configurePaymentProvidersModule = (
291
77
  return paymentProvider;
292
78
  },
293
79
 
294
- update: async (_id: string, doc: PaymentProvider) => {
80
+ update: async (_id: string, doc: PaymentProvider): Promise<PaymentProvider> => {
295
81
  const paymentProvider = await PaymentProviders.findOneAndUpdate(
296
82
  generateDbFilterById(_id),
297
83
  {
@@ -306,7 +92,7 @@ export const configurePaymentProvidersModule = (
306
92
  return paymentProvider;
307
93
  },
308
94
 
309
- delete: async (_id) => {
95
+ delete: async (_id: string): Promise<PaymentProvider> => {
310
96
  const paymentProvider = await PaymentProviders.findOneAndUpdate(
311
97
  generateDbFilterById(_id),
312
98
  {
@@ -321,3 +107,5 @@ export const configurePaymentProvidersModule = (
321
107
  },
322
108
  };
323
109
  };
110
+
111
+ export type PaymentProvidersModule = ReturnType<typeof configurePaymentProvidersModule>;
@@ -1,4 +1,4 @@
1
- import { PaymentProviderType } from '../payment-index.js';
1
+ import { PaymentProviderType } from '../db/PaymentProvidersCollection.js';
2
2
  import { buildFindSelector } from './configurePaymentProvidersModule.js';
3
3
 
4
4
  describe('Payment', () => {
@@ -1,12 +1,4 @@
1
- export * from './types.js';
2
1
  export * from './module/configurePaymentModule.js';
3
2
  export * from './payment-settings.js';
4
-
5
- export * from './director/PaymentDirector.js';
6
- export * from './director/PaymentAdapter.js';
7
- export * from './director/PaymentPricingAdapter.js';
8
- export * from './director/PaymentPricingDirector.js';
9
- export * from './director/PaymentPricingSheet.js';
10
-
11
- export { PaymentError } from './director/PaymentError.js';
12
- export { PaymentProviderType } from './director/PaymentProviderType.js';
3
+ export * from './db/PaymentCredentialsCollection.js';
4
+ export * from './db/PaymentProvidersCollection.js';