@maxkabechani/mtn-momo-sdk 0.2.2 → 1.0.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 (101) hide show
  1. package/MIGRATION.md +79 -0
  2. package/README.md +68 -5
  3. package/lib/cjs/auth.d.ts +2 -2
  4. package/lib/cjs/auth.d.ts.map +1 -1
  5. package/lib/cjs/auth.js +31 -11
  6. package/lib/cjs/auth.js.map +1 -1
  7. package/lib/cjs/cli.js +5 -2
  8. package/lib/cjs/cli.js.map +1 -1
  9. package/lib/cjs/client.d.ts +3 -3
  10. package/lib/cjs/client.d.ts.map +1 -1
  11. package/lib/cjs/client.js +15 -7
  12. package/lib/cjs/client.js.map +1 -1
  13. package/lib/cjs/collections.d.ts +6 -5
  14. package/lib/cjs/collections.d.ts.map +1 -1
  15. package/lib/cjs/collections.js +45 -25
  16. package/lib/cjs/collections.js.map +1 -1
  17. package/lib/cjs/common.d.ts +13 -4
  18. package/lib/cjs/common.d.ts.map +1 -1
  19. package/lib/cjs/common.js.map +1 -1
  20. package/lib/cjs/disbursements.d.ts +7 -10
  21. package/lib/cjs/disbursements.d.ts.map +1 -1
  22. package/lib/cjs/disbursements.js +46 -31
  23. package/lib/cjs/disbursements.js.map +1 -1
  24. package/lib/cjs/errors.d.ts +15 -6
  25. package/lib/cjs/errors.d.ts.map +1 -1
  26. package/lib/cjs/errors.js +33 -23
  27. package/lib/cjs/errors.js.map +1 -1
  28. package/lib/cjs/httpClient.d.ts +50 -17
  29. package/lib/cjs/httpClient.d.ts.map +1 -1
  30. package/lib/cjs/httpClient.js +276 -78
  31. package/lib/cjs/httpClient.js.map +1 -1
  32. package/lib/cjs/index.d.ts +12 -11
  33. package/lib/cjs/index.d.ts.map +1 -1
  34. package/lib/cjs/index.js +30 -28
  35. package/lib/cjs/index.js.map +1 -1
  36. package/lib/cjs/remittance.d.ts +5 -5
  37. package/lib/cjs/remittance.d.ts.map +1 -1
  38. package/lib/cjs/remittance.js +58 -41
  39. package/lib/cjs/remittance.js.map +1 -1
  40. package/lib/cjs/security.d.ts +32 -0
  41. package/lib/cjs/security.d.ts.map +1 -0
  42. package/lib/cjs/security.js +253 -0
  43. package/lib/cjs/security.js.map +1 -0
  44. package/lib/cjs/users.d.ts +5 -3
  45. package/lib/cjs/users.d.ts.map +1 -1
  46. package/lib/cjs/users.js +17 -6
  47. package/lib/cjs/users.js.map +1 -1
  48. package/lib/cjs/validate.d.ts +7 -7
  49. package/lib/cjs/validate.d.ts.map +1 -1
  50. package/lib/cjs/validate.js +67 -84
  51. package/lib/cjs/validate.js.map +1 -1
  52. package/lib/esm/auth.d.ts +2 -2
  53. package/lib/esm/auth.d.ts.map +1 -1
  54. package/lib/esm/auth.js +28 -8
  55. package/lib/esm/auth.js.map +1 -1
  56. package/lib/esm/cli.js +5 -2
  57. package/lib/esm/cli.js.map +1 -1
  58. package/lib/esm/client.d.ts +3 -3
  59. package/lib/esm/client.d.ts.map +1 -1
  60. package/lib/esm/client.js +14 -6
  61. package/lib/esm/client.js.map +1 -1
  62. package/lib/esm/collections.d.ts +6 -5
  63. package/lib/esm/collections.d.ts.map +1 -1
  64. package/lib/esm/collections.js +38 -18
  65. package/lib/esm/collections.js.map +1 -1
  66. package/lib/esm/common.d.ts +13 -4
  67. package/lib/esm/common.d.ts.map +1 -1
  68. package/lib/esm/common.js.map +1 -1
  69. package/lib/esm/disbursements.d.ts +7 -10
  70. package/lib/esm/disbursements.d.ts.map +1 -1
  71. package/lib/esm/disbursements.js +34 -19
  72. package/lib/esm/disbursements.js.map +1 -1
  73. package/lib/esm/errors.d.ts +15 -6
  74. package/lib/esm/errors.d.ts.map +1 -1
  75. package/lib/esm/errors.js +16 -6
  76. package/lib/esm/errors.js.map +1 -1
  77. package/lib/esm/httpClient.d.ts +50 -17
  78. package/lib/esm/httpClient.d.ts.map +1 -1
  79. package/lib/esm/httpClient.js +271 -77
  80. package/lib/esm/httpClient.js.map +1 -1
  81. package/lib/esm/index.d.ts +12 -11
  82. package/lib/esm/index.d.ts.map +1 -1
  83. package/lib/esm/index.js +12 -11
  84. package/lib/esm/index.js.map +1 -1
  85. package/lib/esm/remittance.d.ts +5 -5
  86. package/lib/esm/remittance.d.ts.map +1 -1
  87. package/lib/esm/remittance.js +52 -35
  88. package/lib/esm/remittance.js.map +1 -1
  89. package/lib/esm/security.d.ts +32 -0
  90. package/lib/esm/security.d.ts.map +1 -0
  91. package/lib/esm/security.js +234 -0
  92. package/lib/esm/security.js.map +1 -0
  93. package/lib/esm/users.d.ts +5 -3
  94. package/lib/esm/users.d.ts.map +1 -1
  95. package/lib/esm/users.js +17 -6
  96. package/lib/esm/users.js.map +1 -1
  97. package/lib/esm/validate.d.ts +7 -7
  98. package/lib/esm/validate.d.ts.map +1 -1
  99. package/lib/esm/validate.js +66 -84
  100. package/lib/esm/validate.js.map +1 -1
  101. package/package.json +23 -5
package/lib/esm/index.js CHANGED
@@ -1,13 +1,14 @@
1
- export * from "./errors";
2
- export { PartyIdType as PayerType, TransactionStatus as Status, Environment, } from "./common";
3
- import Collections from "./collections";
4
- import Disbursements from "./disbursements";
5
- import Remittance from "./remittance";
6
- import Users from "./users";
7
- import { authorizeCollections, authorizeDisbursements, authorizeRemittance, createTokenRefresher, } from "./auth";
8
- import { createAuthClient, createClient } from "./client";
9
- import { validateGlobalConfig, validateProductConfig, validateSubscriptionConfig, } from "./validate";
10
- import { Environment } from "./common";
1
+ export * from "./errors.js";
2
+ export { generateReferenceId, } from "./security.js";
3
+ export { PartyIdType as PayerType, TransactionStatus as Status, Environment, } from "./common.js";
4
+ import Collections from "./collections.js";
5
+ import Disbursements from "./disbursements.js";
6
+ import Remittance from "./remittance.js";
7
+ import Users from "./users.js";
8
+ import { authorizeCollections, authorizeDisbursements, authorizeRemittance, createTokenRefresher, } from "./auth.js";
9
+ import { createAuthClient, createClient } from "./client.js";
10
+ import { validateGlobalConfig, validateProductConfig, validateSubscriptionConfig, } from "./validate.js";
11
+ import { Environment } from "./common.js";
11
12
  const defaultGlobalConfig = {
12
13
  baseUrl: "https://sandbox.momodeveloper.mtn.com",
13
14
  environment: Environment.SANDBOX,
@@ -58,7 +59,7 @@ export function create(globalConfig) {
58
59
  ...subscriptionConfig,
59
60
  };
60
61
  const client = createClient(config);
61
- return new Users(client);
62
+ return new Users(client, config.environment ?? Environment.SANDBOX);
62
63
  },
63
64
  };
64
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,UAAU,CAAC;AACzB,OAAO,EACL,WAAW,IAAI,SAAS,EACxB,iBAAiB,IAAI,MAAM,EAC3B,WAAW,GACZ,MAAM,UAAU,CAAC;AAmBlB,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAevC,MAAM,mBAAmB,GAAiB;IACxC,OAAO,EAAE,uCAAuC;IAChD,WAAW,EAAE,WAAW,CAAC,OAAO;CACjC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,YAA0B;IAC/C,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAEnC,OAAO;QACL,WAAW,CAAC,aAA4B;YACtC,qBAAqB,CAAC,aAAa,CAAC,CAAC;YAErC,MAAM,MAAM,GAAW;gBACrB,GAAG,mBAAmB;gBACtB,GAAG,YAAY;gBACf,GAAG,aAAa;aACjB,CAAC;YAEF,MAAM,MAAM,GAAe,gBAAgB,CACzC,oBAAoB,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAClD,YAAY,CAAC,MAAM,CAAC,CACrB,CAAC;YACF,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;QAED,aAAa,CAAC,aAA4B;YACxC,qBAAqB,CAAC,aAAa,CAAC,CAAC;YAErC,MAAM,MAAM,GAAW;gBACrB,GAAG,mBAAmB;gBACtB,GAAG,YAAY;gBACf,GAAG,aAAa;aACjB,CAAC;YAEF,MAAM,MAAM,GAAe,gBAAgB,CACzC,oBAAoB,CAAC,sBAAsB,EAAE,MAAM,CAAC,EACpD,YAAY,CAAC,MAAM,CAAC,CACrB,CAAC;YAEF,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,UAAU,CAAC,aAA4B;YACrC,qBAAqB,CAAC,aAAa,CAAC,CAAC;YAErC,MAAM,MAAM,GAAW;gBACrB,GAAG,mBAAmB;gBACtB,GAAG,YAAY;gBACf,GAAG,aAAa;aACjB,CAAC;YAEF,MAAM,MAAM,GAAe,gBAAgB,CACzC,oBAAoB,CAAC,mBAAmB,EAAE,MAAM,CAAC,EACjD,YAAY,CAAC,MAAM,CAAC,CACrB,CAAC;YAEF,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,kBAAsC;YAC1C,0BAA0B,CAAC,kBAAkB,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAsC;gBAChD,GAAG,mBAAmB;gBACtB,GAAG,YAAY;gBACf,GAAG,kBAAkB;aACtB,CAAC;YAEF,MAAM,MAAM,GAAe,YAAY,CAAC,MAAM,CAAC,CAAC;YAEhD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,mBAAmB,GAEpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,WAAW,IAAI,SAAS,EACxB,iBAAiB,IAAI,MAAM,EAC3B,WAAW,GACZ,MAAM,aAAa,CAAC;AAmBrB,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAe1C,MAAM,mBAAmB,GAAiB;IACxC,OAAO,EAAE,uCAAuC;IAChD,WAAW,EAAE,WAAW,CAAC,OAAO;CACjC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,YAA0B;IAC/C,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAEnC,OAAO;QACL,WAAW,CAAC,aAA4B;YACtC,qBAAqB,CAAC,aAAa,CAAC,CAAC;YAErC,MAAM,MAAM,GAAW;gBACrB,GAAG,mBAAmB;gBACtB,GAAG,YAAY;gBACf,GAAG,aAAa;aACjB,CAAC;YAEF,MAAM,MAAM,GAAe,gBAAgB,CACzC,oBAAoB,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAClD,YAAY,CAAC,MAAM,CAAC,CACrB,CAAC;YACF,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;QAED,aAAa,CAAC,aAA4B;YACxC,qBAAqB,CAAC,aAAa,CAAC,CAAC;YAErC,MAAM,MAAM,GAAW;gBACrB,GAAG,mBAAmB;gBACtB,GAAG,YAAY;gBACf,GAAG,aAAa;aACjB,CAAC;YAEF,MAAM,MAAM,GAAe,gBAAgB,CACzC,oBAAoB,CAAC,sBAAsB,EAAE,MAAM,CAAC,EACpD,YAAY,CAAC,MAAM,CAAC,CACrB,CAAC;YAEF,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,UAAU,CAAC,aAA4B;YACrC,qBAAqB,CAAC,aAAa,CAAC,CAAC;YAErC,MAAM,MAAM,GAAW;gBACrB,GAAG,mBAAmB;gBACtB,GAAG,YAAY;gBACf,GAAG,aAAa;aACjB,CAAC;YAEF,MAAM,MAAM,GAAe,gBAAgB,CACzC,oBAAoB,CAAC,mBAAmB,EAAE,MAAM,CAAC,EACjD,YAAY,CAAC,MAAM,CAAC,CACrB,CAAC;YAEF,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,kBAAsC;YAC1C,0BAA0B,CAAC,kBAAkB,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAsC;gBAChD,GAAG,mBAAmB;gBACtB,GAAG,YAAY;gBACf,GAAG,kBAAkB;aACtB,CAAC;YAEF,MAAM,MAAM,GAAe,YAAY,CAAC,MAAM,CAAC,CAAC;YAEhD,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,7 +1,7 @@
1
- import type { HttpClient } from "./httpClient";
2
- import type { Balance, BasicUserInfo, BcAuthorizeRequest, BcAuthorizeResponse, CashTransfer, CashTransferRequest, ConsentKycResponse, OAuth2TokenRequest, OAuth2TokenResponse } from "./common";
3
- import { PartyIdType } from "./common";
4
- import type { Config } from "./common";
1
+ import type { HttpClient } from "./httpClient.js";
2
+ import type { Balance, BasicUserInfo, BcAuthorizeRequest, BcAuthorizeResponse, CashTransfer, CashTransferRequest, ConsentKycResponse, OAuth2TokenRequest, OAuth2TokenResponse } from "./common.js";
3
+ import { PartyIdType } from "./common.js";
4
+ import type { Config } from "./common.js";
5
5
  /**
6
6
  * Remittance product for cross-border money transfers with optional OAuth2 consent flows
7
7
  */
@@ -53,7 +53,7 @@ export default class Remittance {
53
53
  * Requires prior OAuth2 user consent/login flow to obtain authorization
54
54
  * @returns A promise that resolves to the user's information and KYC consent details
55
55
  */
56
- getUserInfoWithConsent(): Promise<ConsentKycResponse>;
56
+ getUserInfoWithConsent(consentToken: string): Promise<ConsentKycResponse>;
57
57
  /**
58
58
  * Request Biometric Consent (BC) authorization.
59
59
  * This initiates the BC authorization flow for enhanced security.
@@ -1 +1 @@
1
- {"version":3,"file":"remittance.d.ts","sourceRoot":"","sources":["../../src/remittance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EAGpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAqB,WAAW,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAK9C;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B7D;;;;OAIG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAahE;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAMpC;;;;;OAKG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,WAAgC,GAC5C,OAAO,CAAC,OAAO,CAAC;IAcnB;;;;;;OAMG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAQhE;;;;;OAKG;IACI,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM/D;;;;OAIG;IACI,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAM5D;;;;;;OAMG;IACI,WAAW,CAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IA2B/B;;;;;;OAMG;IACI,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BlE;;;;;OAKG;IACI,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAYlE;;;;;OAKG;IACI,cAAc,CACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;CAahC"}
1
+ {"version":3,"file":"remittance.d.ts","sourceRoot":"","sources":["../../src/remittance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAqB,MAAM,aAAa,CAAC;AAG7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAW1C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAK9C;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B7D;;;;OAIG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAahE;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAMpC;;;;;OAKG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,WAAgC,GAC5C,OAAO,CAAC,OAAO,CAAC;IAqBnB;;;;;;OAMG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAShE;;;;;OAKG;IACI,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ/D;;;;OAIG;IACI,sBAAsB,CAC3B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC;IAW9B;;;;;;OAMG;IACI,WAAW,CAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IA2B/B;;;;;;OAMG;IACI,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BlE;;;;;OAKG;IACI,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAclE;;;;;OAKG;IACI,cAAc,CACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;CAehC"}
@@ -1,7 +1,8 @@
1
- import { TransactionStatus, PartyIdType } from "./common";
2
- import { getTransactionError, MtnMoMoError } from "./errors";
3
- import { createBasicAuthToken } from "./auth";
4
- import { v4 as uuid } from "uuid";
1
+ import { PartyIdType, TransactionStatus } from "./common.js";
2
+ import { createBasicAuthToken } from "./auth.js";
3
+ import { getTransactionError } from "./errors.js";
4
+ import { pathCurrency, pathPartyId, pathPartyType, pathUuid, resolveReferenceId, validateAccessToken, } from "./security.js";
5
+ import { validateCashTransferRequest } from "./validate.js";
5
6
  /**
6
7
  * Remittance product for cross-border money transfers with optional OAuth2 consent flows
7
8
  */
@@ -16,7 +17,8 @@ export default class Remittance {
16
17
  * @returns A promise that resolves to the financial transaction ID (referenceId)
17
18
  */
18
19
  async transfer(request) {
19
- const referenceId = uuid();
20
+ await validateCashTransferRequest(request);
21
+ const referenceId = resolveReferenceId(request.referenceId);
20
22
  await this.client.post(`/remittance/v1_0/transfer`, {
21
23
  amount: request.amount,
22
24
  currency: request.currency,
@@ -44,7 +46,7 @@ export default class Remittance {
44
46
  * @returns A promise that resolves to the transfer details and status
45
47
  */
46
48
  async getTransaction(referenceId) {
47
- const response = await this.client.get(`/remittance/v1_0/transfer/${referenceId}`);
49
+ const response = await this.client.get(`/remittance/v1_0/transfer/${pathUuid(referenceId)}`);
48
50
  const transaction = response.data;
49
51
  if (transaction.status === TransactionStatus.FAILED) {
50
52
  return Promise.reject(getTransactionError(transaction));
@@ -67,12 +69,17 @@ export default class Remittance {
67
69
  * @returns A promise that resolves to true if the beneficiary is active, false otherwise
68
70
  */
69
71
  async isPayerActive(partyId, partyIdType = PartyIdType.MSISDN) {
72
+ const safeType = pathPartyType(partyIdType);
73
+ const safeId = pathPartyId(safeType, partyId);
70
74
  try {
71
- const response = await this.client.get(`/remittance/v1_0/accountholder/${partyIdType}/${partyId}/active`);
72
- return response.status === 200;
75
+ const response = await this.client.get(`/remittance/v1_0/accountholder/${safeType}/${safeId}/active`);
76
+ return response.data?.result === true;
73
77
  }
74
78
  catch (error) {
75
- if (error.response?.status === 404) {
79
+ if (error &&
80
+ typeof error === "object" &&
81
+ "status" in error &&
82
+ error.status === 404) {
76
83
  return false;
77
84
  }
78
85
  throw error;
@@ -86,8 +93,9 @@ export default class Remittance {
86
93
  * @returns A promise that resolves to the basic user information
87
94
  */
88
95
  getBasicUserInfo(partyId) {
96
+ const safeId = pathPartyId(PartyIdType.MSISDN, partyId);
89
97
  return this.client
90
- .get(`/remittance/v1_0/accountholder/MSISDN/${partyId}/basicuserinfo`)
98
+ .get(`/remittance/v1_0/accountholder/MSISDN/${safeId}/basicuserinfo`)
91
99
  .then((response) => response.data);
92
100
  }
93
101
  /**
@@ -98,7 +106,7 @@ export default class Remittance {
98
106
  */
99
107
  getBalanceInCurrency(currency) {
100
108
  return this.client
101
- .get(`/remittance/v1_0/account/balance/${currency}`)
109
+ .get(`/remittance/v1_0/account/balance/${pathCurrency(currency)}`)
102
110
  .then((response) => response.data);
103
111
  }
104
112
  /**
@@ -106,9 +114,14 @@ export default class Remittance {
106
114
  * Requires prior OAuth2 user consent/login flow to obtain authorization
107
115
  * @returns A promise that resolves to the user's information and KYC consent details
108
116
  */
109
- getUserInfoWithConsent() {
117
+ getUserInfoWithConsent(consentToken) {
118
+ validateAccessToken(consentToken);
110
119
  return this.client
111
- .get(`/remittance/oauth2/v1_0/userinfo`)
120
+ .get("/remittance/oauth2/v1_0/userinfo", {
121
+ headers: {
122
+ Authorization: `Bearer ${consentToken}`,
123
+ },
124
+ })
112
125
  .then((response) => response.data);
113
126
  }
114
127
  /**
@@ -150,27 +163,29 @@ export default class Remittance {
150
163
  * @returns A promise that resolves to the reference ID
151
164
  */
152
165
  cashTransfer(request) {
153
- const referenceId = uuid();
154
- return this.client
155
- .post("/remittance/v2_0/cashtransfer", {
156
- amount: request.amount,
157
- currency: request.currency,
158
- externalId: request.externalId,
159
- payee: request.payee,
160
- originatingCountry: request.originatingCountry,
161
- originalAmount: request.originalAmount,
162
- originalCurrency: request.originalCurrency,
163
- payerMessage: request.payerMessage,
164
- payeeNote: request.payeeNote,
165
- }, {
166
- headers: {
167
- "X-Reference-Id": referenceId,
168
- ...(request.callbackUrl
169
- ? { "X-Callback-Url": request.callbackUrl }
170
- : {}),
171
- },
172
- })
173
- .then(() => referenceId);
166
+ return validateCashTransferRequest(request).then(() => {
167
+ const referenceId = resolveReferenceId(request.referenceId);
168
+ return this.client
169
+ .post("/remittance/v2_0/cashtransfer", {
170
+ amount: request.amount,
171
+ currency: request.currency,
172
+ externalId: request.externalId,
173
+ payee: request.payee,
174
+ originatingCountry: request.originatingCountry,
175
+ originalAmount: request.originalAmount,
176
+ originalCurrency: request.originalCurrency,
177
+ payerMessage: request.payerMessage,
178
+ payeeNote: request.payeeNote,
179
+ }, {
180
+ headers: {
181
+ "X-Reference-Id": referenceId,
182
+ ...(request.callbackUrl
183
+ ? { "X-Callback-Url": request.callbackUrl }
184
+ : {}),
185
+ },
186
+ })
187
+ .then(() => referenceId);
188
+ });
174
189
  }
175
190
  /**
176
191
  * Get the details and status of a cash transfer (V2).
@@ -180,7 +195,7 @@ export default class Remittance {
180
195
  */
181
196
  getCashTransfer(referenceId) {
182
197
  return this.client
183
- .get(`/remittance/v2_0/cashtransfer/${referenceId}`)
198
+ .get(`/remittance/v2_0/cashtransfer/${pathUuid(referenceId)}`)
184
199
  .then((response) => response.data)
185
200
  .then((transfer) => {
186
201
  if (transfer.status === TransactionStatus.FAILED) {
@@ -199,9 +214,11 @@ export default class Remittance {
199
214
  const params = new URLSearchParams();
200
215
  params.append("grant_type", request.grant_type);
201
216
  params.append("auth_req_id", request.auth_req_id);
217
+ const basicAuthToken = createBasicAuthToken(this.config);
202
218
  return this.client
203
219
  .post("/remittance/oauth2/token/", params, {
204
220
  headers: {
221
+ Authorization: `Basic ${basicAuthToken}`,
205
222
  "Content-Type": "application/x-www-form-urlencoded",
206
223
  },
207
224
  })
@@ -1 +1 @@
1
- {"version":3,"file":"remittance.js","sourceRoot":"","sources":["../../src/remittance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remittance.js","sourceRoot":"","sources":["../../src/remittance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Environment, PartyIdType } from "./common.js";
2
+ import type { GlobalConfig, Party } from "./common.js";
3
+ export declare const DEFAULT_TIMEOUT_MS = 30000;
4
+ export declare const DEFAULT_MAX_RESPONSE_BYTES: number;
5
+ export declare const MAX_TIMEOUT_MS = 120000;
6
+ export declare const MAX_RESPONSE_BYTES: number;
7
+ export interface FinancialOperationOptions {
8
+ /**
9
+ * Stable MTN resource identifier for this logical financial operation.
10
+ *
11
+ * Production callers that may retry must generate and persist this value
12
+ * before the first request, then reuse it for every retry.
13
+ */
14
+ referenceId?: string;
15
+ }
16
+ export declare function generateReferenceId(): string;
17
+ export declare function requireUuidV4(value: unknown, name?: string): string;
18
+ export declare function resolveReferenceId(referenceId?: string): string;
19
+ export declare function pathUuid(value: unknown, name?: string): string;
20
+ export declare function pathCurrency(value: unknown): string;
21
+ export declare function pathPartyType(value: unknown): PartyIdType;
22
+ export declare function pathPartyId(type: PartyIdType, value: unknown): string;
23
+ export declare function validateParty(party: Party | undefined, name: string): void;
24
+ export declare function encodeStrictPathSegment(value: unknown, name: string): string;
25
+ export declare function validateFinancialAmount(amount: unknown, name?: string): asserts amount is string;
26
+ export declare function validateCurrency(currency: unknown): asserts currency is string;
27
+ export declare function validateAccessToken(token: unknown, name?: string): asserts token is string;
28
+ export declare function normalizeBaseUrl(baseUrl: string, environment: Environment): string;
29
+ export declare function validateGlobalSecurityConfig(config: GlobalConfig): void;
30
+ export declare function redactSensitiveText(value: string): string;
31
+ export declare function redactUrl(value: string): string;
32
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/security.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAYvD,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,0BAA0B,QAAc,CAAC;AACtD,eAAO,MAAM,cAAc,SAAU,CAAC;AACtC,eAAO,MAAM,kBAAkB,QAAmB,CAAC;AAEnD,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAgB,GAAG,MAAM,CAQ1E;AAED,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAgB,GAAG,MAAM,CAErE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQnD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CASzD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAgBrE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAY1E;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,GACX,MAAM,CAyCR;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,OAAO,EACf,IAAI,SAAW,GACd,OAAO,CAAC,MAAM,IAAI,MAAM,CAU1B;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,QAAQ,IAAI,MAAM,CAE5B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,IAAI,SAAiB,GACpB,OAAO,CAAC,KAAK,IAAI,MAAM,CASzB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,GACvB,MAAM,CAiCR;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAiCvE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQzD;AA6BD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAe/C"}
@@ -0,0 +1,234 @@
1
+ import { v4 as uuid } from "uuid";
2
+ import { Environment, PartyIdType } from "./common.js";
3
+ const UUID_V4 = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
4
+ const POSITIVE_DECIMAL = /^(?:0|[1-9]\d*)(?:\.\d+)?$/;
5
+ const CURRENCY = /^[A-Z]{3}$/;
6
+ const MSISDN = /^\+?[0-9]{5,15}$/;
7
+ const EMAIL = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
8
+ const CONTROL_CHARACTER = /[\u0000-\u001f\u007f]/;
9
+ const FORBIDDEN_PATH_CHARACTER = /[\/\\?#]/;
10
+ const ENCODED_PATH_SEPARATOR = /%(?:2f|5c)/i;
11
+ export const DEFAULT_TIMEOUT_MS = 30000;
12
+ export const DEFAULT_MAX_RESPONSE_BYTES = 1024 * 1024;
13
+ export const MAX_TIMEOUT_MS = 120000;
14
+ export const MAX_RESPONSE_BYTES = 10 * 1024 * 1024;
15
+ export function generateReferenceId() {
16
+ return uuid();
17
+ }
18
+ export function requireUuidV4(value, name = "referenceId") {
19
+ if (typeof value !== "string" || value.length === 0) {
20
+ throw new TypeError(`${name} is required`);
21
+ }
22
+ if (!UUID_V4.test(value)) {
23
+ throw new TypeError(`${name} must be a valid uuid v4`);
24
+ }
25
+ return value;
26
+ }
27
+ export function resolveReferenceId(referenceId) {
28
+ return referenceId === undefined
29
+ ? generateReferenceId()
30
+ : requireUuidV4(referenceId);
31
+ }
32
+ export function pathUuid(value, name = "referenceId") {
33
+ return encodeURIComponent(requireUuidV4(value, name));
34
+ }
35
+ export function pathCurrency(value) {
36
+ if (typeof value !== "string" || value.length === 0) {
37
+ throw new TypeError("currency is required");
38
+ }
39
+ if (!CURRENCY.test(value)) {
40
+ throw new TypeError("currency must be a 3-letter uppercase ISO 4217 code");
41
+ }
42
+ return value;
43
+ }
44
+ export function pathPartyType(value) {
45
+ if (value !== PartyIdType.MSISDN &&
46
+ value !== PartyIdType.EMAIL &&
47
+ value !== PartyIdType.PARTY_CODE) {
48
+ throw new TypeError("partyIdType must be MSISDN, EMAIL, or PARTY_CODE");
49
+ }
50
+ return value;
51
+ }
52
+ export function pathPartyId(type, value) {
53
+ if (typeof value !== "string" || value.length === 0) {
54
+ throw new TypeError("partyId is required");
55
+ }
56
+ if (type === PartyIdType.MSISDN && !MSISDN.test(value)) {
57
+ throw new TypeError("MSISDN partyId must contain 5 to 15 digits");
58
+ }
59
+ if (type === PartyIdType.EMAIL && !EMAIL.test(value)) {
60
+ throw new TypeError("EMAIL partyId must be a valid email address");
61
+ }
62
+ if (type === PartyIdType.PARTY_CODE) {
63
+ requireUuidV4(value, "PARTY_CODE partyId");
64
+ }
65
+ return encodeStrictPathSegment(value, "partyId");
66
+ }
67
+ export function validateParty(party, name) {
68
+ if (!party) {
69
+ throw new TypeError(`${name} is required`);
70
+ }
71
+ if (typeof party.partyId !== "string" || party.partyId.length === 0) {
72
+ throw new TypeError(`${name}.partyId is required`);
73
+ }
74
+ if (!party.partyIdType) {
75
+ throw new TypeError(`${name}.partyIdType is required`);
76
+ }
77
+ const type = pathPartyType(party.partyIdType);
78
+ pathPartyId(type, party.partyId);
79
+ }
80
+ export function encodeStrictPathSegment(value, name) {
81
+ if (typeof value !== "string" &&
82
+ typeof value !== "number" &&
83
+ typeof value !== "bigint") {
84
+ throw new TypeError(`${name} must be a supported primitive`);
85
+ }
86
+ const segment = String(value);
87
+ if (!segment) {
88
+ throw new TypeError(`${name} is required`);
89
+ }
90
+ if (CONTROL_CHARACTER.test(segment)) {
91
+ throw new TypeError(`${name} contains control characters`);
92
+ }
93
+ if (segment === "." ||
94
+ segment === ".." ||
95
+ FORBIDDEN_PATH_CHARACTER.test(segment) ||
96
+ ENCODED_PATH_SEPARATOR.test(segment)) {
97
+ throw new TypeError(`${name} contains unsafe path characters`);
98
+ }
99
+ let decoded = segment;
100
+ try {
101
+ decoded = decodeURIComponent(segment);
102
+ }
103
+ catch {
104
+ throw new TypeError(`${name} contains invalid percent encoding`);
105
+ }
106
+ if (decoded === "." ||
107
+ decoded === ".." ||
108
+ FORBIDDEN_PATH_CHARACTER.test(decoded) ||
109
+ CONTROL_CHARACTER.test(decoded)) {
110
+ throw new TypeError(`${name} contains unsafe path characters`);
111
+ }
112
+ return encodeURIComponent(segment);
113
+ }
114
+ export function validateFinancialAmount(amount, name = "amount") {
115
+ if (typeof amount !== "string" || amount.length === 0) {
116
+ throw new TypeError(`${name} is required`);
117
+ }
118
+ if (!POSITIVE_DECIMAL.test(amount)) {
119
+ throw new TypeError(`${name} must be a number`);
120
+ }
121
+ if (/^0+(?:\.0+)?$/.test(amount)) {
122
+ throw new TypeError(`${name} must be greater than zero`);
123
+ }
124
+ }
125
+ export function validateCurrency(currency) {
126
+ pathCurrency(currency);
127
+ }
128
+ export function validateAccessToken(token, name = "consentToken") {
129
+ if (typeof token !== "string" ||
130
+ token.length === 0 ||
131
+ /\s/.test(token) ||
132
+ CONTROL_CHARACTER.test(token)) {
133
+ throw new TypeError(`${name} must be a non-empty bearer token`);
134
+ }
135
+ }
136
+ export function normalizeBaseUrl(baseUrl, environment) {
137
+ let url;
138
+ try {
139
+ url = new URL(baseUrl);
140
+ }
141
+ catch {
142
+ throw new TypeError("baseUrl must be a valid absolute URL");
143
+ }
144
+ if (url.username || url.password) {
145
+ throw new TypeError("baseUrl must not contain embedded credentials");
146
+ }
147
+ if (url.search || url.hash) {
148
+ throw new TypeError("baseUrl must not contain a query string or fragment");
149
+ }
150
+ const loopback = url.hostname === "127.0.0.1" ||
151
+ url.hostname === "localhost" ||
152
+ url.hostname === "::1" ||
153
+ url.hostname === "[::1]";
154
+ const testLoopback = environment === Environment.SANDBOX &&
155
+ process.env.NODE_ENV === "test" &&
156
+ loopback &&
157
+ url.protocol === "http:";
158
+ if (url.protocol !== "https:" && !testLoopback) {
159
+ const scope = environment === Environment.PRODUCTION ? "production " : "";
160
+ throw new TypeError(`${scope}baseUrl must use https`);
161
+ }
162
+ return url.toString().replace(/\/+$/, "");
163
+ }
164
+ export function validateGlobalSecurityConfig(config) {
165
+ const environment = config.environment ?? Environment.SANDBOX;
166
+ if (environment !== Environment.SANDBOX &&
167
+ environment !== Environment.PRODUCTION) {
168
+ throw new TypeError("environment must be sandbox or production");
169
+ }
170
+ const baseUrl = config.baseUrl ?? "https://sandbox.momodeveloper.mtn.com";
171
+ normalizeBaseUrl(baseUrl, environment);
172
+ if (config.timeoutMs !== undefined &&
173
+ (!Number.isInteger(config.timeoutMs) ||
174
+ config.timeoutMs <= 0 ||
175
+ config.timeoutMs > MAX_TIMEOUT_MS)) {
176
+ throw new TypeError(`timeoutMs must be an integer between 1 and ${MAX_TIMEOUT_MS}`);
177
+ }
178
+ if (config.maxResponseBytes !== undefined &&
179
+ (!Number.isInteger(config.maxResponseBytes) ||
180
+ config.maxResponseBytes < 1024 ||
181
+ config.maxResponseBytes > MAX_RESPONSE_BYTES)) {
182
+ throw new TypeError(`maxResponseBytes must be an integer between 1024 and ${MAX_RESPONSE_BYTES}`);
183
+ }
184
+ }
185
+ export function redactSensitiveText(value) {
186
+ return value
187
+ .replace(/\b(Basic|Bearer)\s+\S+/gi, "$1 [redacted]")
188
+ .replace(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi, "[redacted]")
189
+ .replace(/\+?\d{7,15}/g, "[redacted]");
190
+ }
191
+ const SAFE_PATH_PARTS = new Set([
192
+ "",
193
+ "collection",
194
+ "disbursement",
195
+ "remittance",
196
+ "v1_0",
197
+ "v2_0",
198
+ "oauth2",
199
+ "token",
200
+ "requesttopay",
201
+ "requesttowithdraw",
202
+ "transfer",
203
+ "cashtransfer",
204
+ "deposit",
205
+ "refund",
206
+ "account",
207
+ "balance",
208
+ "accountholder",
209
+ "active",
210
+ "basicuserinfo",
211
+ "userinfo",
212
+ "bc-authorize",
213
+ "deliverynotification",
214
+ "apiuser",
215
+ "apikey",
216
+ ]);
217
+ export function redactUrl(value) {
218
+ try {
219
+ const url = new URL(value);
220
+ url.username = "";
221
+ url.password = "";
222
+ url.search = "";
223
+ url.hash = "";
224
+ url.pathname = url.pathname
225
+ .split("/")
226
+ .map((part) => (SAFE_PATH_PARTS.has(part) ? part : "[redacted]"))
227
+ .join("/");
228
+ return url.toString();
229
+ }
230
+ catch {
231
+ return "[invalid-url]";
232
+ }
233
+ }
234
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/security.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import type { HttpClient } from "./httpClient";
2
- import type { ApiUserInfo, Credentials } from "./common";
1
+ import type { HttpClient } from "./httpClient.js";
2
+ import { Environment, type ApiUserInfo, type Credentials } from "./common.js";
3
3
  export default class Users {
4
4
  private client;
5
- constructor(client: HttpClient);
5
+ private environment;
6
+ constructor(client: HttpClient, environment?: Environment);
6
7
  /**
7
8
  * Used to create an API user in the sandbox target environment
8
9
  * @param host The provider callback host
@@ -18,5 +19,6 @@ export default class Users {
18
19
  * @param referenceId API user reference id (X-Reference-Id used at creation)
19
20
  */
20
21
  getApiUser(referenceId: string): Promise<ApiUserInfo>;
22
+ private assertSandbox;
21
23
  }
22
24
  //# sourceMappingURL=users.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEzD,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAI9B;;;OAGG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe5C;;;OAGG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAMlD;;;OAGG;IACI,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAK7D"}
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAO9E,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAc;gBAG/B,MAAM,EAAE,UAAU,EAClB,WAAW,GAAE,WAAiC;IAMhD;;;OAGG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB5C;;;OAGG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOlD;;;OAGG;IACI,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAO5D,OAAO,CAAC,aAAa;CAKtB"}
package/lib/esm/users.js CHANGED
@@ -1,16 +1,20 @@
1
- import { v4 as uuid } from "uuid";
1
+ import { Environment } from "./common.js";
2
+ import { encodeStrictPathSegment, generateReferenceId, pathUuid, } from "./security.js";
2
3
  export default class Users {
3
- constructor(client) {
4
+ constructor(client, environment = Environment.SANDBOX) {
4
5
  this.client = client;
6
+ this.environment = environment;
5
7
  }
6
8
  /**
7
9
  * Used to create an API user in the sandbox target environment
8
10
  * @param host The provider callback host
9
11
  */
10
12
  create(host) {
11
- const userId = uuid();
13
+ this.assertSandbox();
14
+ const safeHost = encodeStrictPathSegment(host, "host");
15
+ const userId = generateReferenceId();
12
16
  return this.client
13
- .post("/v1_0/apiuser", { providerCallbackHost: host }, {
17
+ .post("/v1_0/apiuser", { providerCallbackHost: decodeURIComponent(safeHost) }, {
14
18
  headers: {
15
19
  "X-Reference-Id": userId,
16
20
  },
@@ -22,8 +26,9 @@ export default class Users {
22
26
  * @param userId
23
27
  */
24
28
  login(userId) {
29
+ this.assertSandbox();
25
30
  return this.client
26
- .post(`/v1_0/apiuser/${userId}/apikey`)
31
+ .post(`/v1_0/apiuser/${pathUuid(userId, "userId")}/apikey`)
27
32
  .then((response) => response.data);
28
33
  }
29
34
  /**
@@ -31,9 +36,15 @@ export default class Users {
31
36
  * @param referenceId API user reference id (X-Reference-Id used at creation)
32
37
  */
33
38
  getApiUser(referenceId) {
39
+ this.assertSandbox();
34
40
  return this.client
35
- .get(`/v1_0/apiuser/${referenceId}`)
41
+ .get(`/v1_0/apiuser/${pathUuid(referenceId)}`)
36
42
  .then((response) => response.data);
37
43
  }
44
+ assertSandbox() {
45
+ if (this.environment !== Environment.SANDBOX) {
46
+ throw new Error("API user provisioning is only available in sandbox");
47
+ }
48
+ }
38
49
  }
39
50
  //# sourceMappingURL=users.js.map