@riocrypto/common-server 1.0.2837 → 1.0.2838

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.
@@ -1,3 +1,5 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
1
3
  import { Quote, Fiat, Crypto, BitsoBankAccount, Side, Country, Order, CryptoAddress, BankAccount, AuthRole, Auth, ImportOrderData, TreasuryProvider, FXProvider, EmarketsFXTrade, ExternalTradingAlgorithm, ExternalTrade, ExternalTradeType, ExternalTradingProvider, ExternalTradingAlgorithmType, STPMXNWithdrawal, AuthPermission, DeferredPaymentType, TwoWaySettlementType, OrderType, EmarketsSettlementType, EmarketsOrderType, BulkBankPayout, BulkCryptoPayout, BulkBankPayment, BulkCryptoPayment, OrderStatus, TWAPSession, TransnetworkFXTrade, TransnetworkSettlementType, TransnetworkOrderType, AuthMethod, StonexFXTrade, CancelExternalTradeReason } from "@riocrypto/common";
2
4
  import { STPMXNWithdrawalDoc } from "../models/STP-mxn-withdrawal";
3
5
  declare class ClusterClient {
@@ -300,6 +302,10 @@ declare class ClusterClient {
300
302
  sendStonexCommand(command: string): Promise<{
301
303
  message: string;
302
304
  }>;
305
+ getComplianceSessionPdf(sessionId: string): Promise<{
306
+ data: Buffer;
307
+ filename: string;
308
+ }>;
303
309
  }
304
310
  export declare const buildClusterClient: () => Promise<ClusterClient>;
305
311
  export {};
@@ -943,6 +943,26 @@ class ClusterClient {
943
943
  return response.data;
944
944
  });
945
945
  }
946
+ getComplianceSessionPdf(sessionId) {
947
+ return __awaiter(this, void 0, void 0, function* () {
948
+ const response = yield this.axios.get(`${this.baseUrl}/api/compliance/sessions/${sessionId}/report.pdf`, {
949
+ headers: { "x-cluster-api-key": this.clusterApiKey },
950
+ responseType: "arraybuffer",
951
+ });
952
+ // Derive a filename from the Content-Disposition header when present so
953
+ // the report keeps its server-side name; fall back to a session-scoped
954
+ // default otherwise.
955
+ let filename = `compliance-session-${sessionId}.pdf`;
956
+ const disposition = response.headers["content-disposition"];
957
+ if (disposition) {
958
+ const match = disposition.match(/filename="?([^";]+)"?/);
959
+ if (match && match[1]) {
960
+ filename = match[1];
961
+ }
962
+ }
963
+ return { data: Buffer.from(response.data), filename };
964
+ });
965
+ }
946
966
  }
947
967
  const buildClusterClient = () => __awaiter(void 0, void 0, void 0, function* () {
948
968
  // Retrieve secrets asynchronously
package/build/index.d.ts CHANGED
@@ -100,6 +100,7 @@ export * from "./models/liquidity-reservation";
100
100
  export * from "./models/axe-slack-thread";
101
101
  export * from "./models/axe-telegram-thread";
102
102
  export * from "./models/auth-activity-slack-thread";
103
+ export * from "./models/onboarding-review-slack-thread";
103
104
  export * from "./models/twap-slack-thread";
104
105
  export * from "./models/twap-session";
105
106
  export * from "./models/bulk-bank-payout";
package/build/index.js CHANGED
@@ -116,6 +116,7 @@ __exportStar(require("./models/liquidity-reservation"), exports);
116
116
  __exportStar(require("./models/axe-slack-thread"), exports);
117
117
  __exportStar(require("./models/axe-telegram-thread"), exports);
118
118
  __exportStar(require("./models/auth-activity-slack-thread"), exports);
119
+ __exportStar(require("./models/onboarding-review-slack-thread"), exports);
119
120
  __exportStar(require("./models/twap-slack-thread"), exports);
120
121
  __exportStar(require("./models/twap-session"), exports);
121
122
  __exportStar(require("./models/bulk-bank-payout"), exports);
@@ -0,0 +1,20 @@
1
+ import mongoose, { HydratedDocument } from "mongoose";
2
+ interface OnboardingReviewSlackThreadAttrs {
3
+ createdAt: Date;
4
+ userId: string;
5
+ messageTs: string;
6
+ channel: string;
7
+ reportPosted?: boolean;
8
+ }
9
+ interface OnboardingReviewSlackThreadDoc extends mongoose.Document {
10
+ createdAt: Date;
11
+ userId: string;
12
+ messageTs: string;
13
+ channel: string;
14
+ reportPosted: boolean;
15
+ }
16
+ interface OnboardingReviewSlackThreadModel extends mongoose.Model<OnboardingReviewSlackThreadDoc> {
17
+ build(attrs: OnboardingReviewSlackThreadAttrs): HydratedDocument<OnboardingReviewSlackThreadDoc>;
18
+ }
19
+ declare const buildOnboardingReviewSlackThread: (mongoose: typeof mongoose) => OnboardingReviewSlackThreadModel;
20
+ export { buildOnboardingReviewSlackThread, OnboardingReviewSlackThreadDoc, OnboardingReviewSlackThreadAttrs, };
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildOnboardingReviewSlackThread = void 0;
4
+ const buildOnboardingReviewSlackThread = (mongoose) => {
5
+ // if model is already defined, return it
6
+ if (mongoose.models.OnboardingReviewSlackThread) {
7
+ return mongoose.model("OnboardingReviewSlackThread");
8
+ }
9
+ const OnboardingReviewSlackThreadSchema = new mongoose.Schema({
10
+ createdAt: {
11
+ type: mongoose.Schema.Types.Date,
12
+ required: true,
13
+ },
14
+ userId: {
15
+ type: String,
16
+ required: true,
17
+ },
18
+ messageTs: {
19
+ type: String,
20
+ required: true,
21
+ },
22
+ channel: {
23
+ type: String,
24
+ required: true,
25
+ },
26
+ // Marks whether the compliance PDF report has already been posted into
27
+ // this thread. Used to keep the review-message send idempotent across
28
+ // the many UserUpdated events a user receives while in review, and to
29
+ // allow a fresh thread once a previous review cycle has been reported.
30
+ reportPosted: {
31
+ type: Boolean,
32
+ required: true,
33
+ default: false,
34
+ },
35
+ }, {
36
+ toJSON: {
37
+ transform(doc, ret) {
38
+ ret.id = ret._id;
39
+ delete ret._id;
40
+ delete ret.__v;
41
+ },
42
+ },
43
+ });
44
+ OnboardingReviewSlackThreadSchema.index({ userId: 1 }, { unique: true });
45
+ OnboardingReviewSlackThreadSchema.statics.build = (attrs) => {
46
+ return new OnboardingReviewSlackThread(attrs);
47
+ };
48
+ const OnboardingReviewSlackThread = mongoose.model("OnboardingReviewSlackThread", OnboardingReviewSlackThreadSchema);
49
+ return OnboardingReviewSlackThread;
50
+ };
51
+ exports.buildOnboardingReviewSlackThread = buildOnboardingReviewSlackThread;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riocrypto/common-server",
3
- "version": "1.0.2837",
3
+ "version": "1.0.2838",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  "@google-cloud/secret-manager": "^5.6.0",
29
29
  "@google-cloud/storage": "^7.19.0",
30
30
  "@hyperdx/node-opentelemetry": "^0.10.3",
31
- "@riocrypto/common": "1.0.2637",
31
+ "@riocrypto/common": "1.0.2638",
32
32
  "@slack/web-api": "^7.15.0",
33
33
  "@types/express": "^4.17.25",
34
34
  "axios": "1.16.0",