@payfit/audit-log 3.5.0-rc.9 → 3.5.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.
package/README.md CHANGED
@@ -16,7 +16,8 @@ Then, you must instanciate a client :
16
16
  import { AuditLogger } from '@payfit/audit-log'
17
17
 
18
18
  const logger = new AuditLogger({
19
- environment: 'dev', // must be one of: dev, staging, prod
19
+ apiUrl: 'http://localhost:8090',
20
+ environment: 'an-environment-name',
20
21
  service: 'the-name-of-the-service',
21
22
  })
22
23
  ```
package/dist/index.d.ts CHANGED
@@ -92,8 +92,7 @@ export interface IAuditLogger {
92
92
  log: (data: IAuditLogData) => Promise<void>;
93
93
  }
94
94
  export interface IAuditLoggerInitialization {
95
- /** @deprecated No longer used. The library routes via SQS based on `environment`. Kept for backward compatibility. */
96
- apiUrl?: string;
95
+ apiUrl: string;
97
96
  environment: string;
98
97
  service: string;
99
98
  }
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var d=Object.defineProperty;var m=(r,e,t)=>e in r?d(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var n=(r,e,t)=>(m(r,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("uuid"),o=require("@aws-sdk/client-sqs"),h="eu-west-3",v={dev:"https://sqs.eu-west-3.amazonaws.com/533547282673/audit-logs-ingest",staging:"https://sqs.eu-west-3.amazonaws.com/589883667243/audit-logs-ingest",prod:"https://sqs.eu-west-3.amazonaws.com/614948436281/audit-logs-ingest"};class p{constructor(e){n(this,"environment");n(this,"client");n(this,"queueUrl");this.environment=e;const t=v[e];if(!t)throw new Error(`audit-logs SDK: no SQS queue URL configured for environment "${e}"`);this.queueUrl=t,this.client=new o.SQSClient({region:h})}async create(e){await this.client.send(new o.SendMessageCommand({QueueUrl:this.queueUrl,MessageBody:JSON.stringify(e)}))}}class S{constructor(e){n(this,"params");n(this,"transport");this.params=e,this.transport=new p(e.environment)}async log({scope:e,account:t,...a}){const c=w.v4(),{environment:u,service:l}=this.params,s={...a,...t,service:l,id:c,environment:u,...e&&{scope:e}};try{await this.transport.create(s)}catch(g){const i=g.message;try{console.error(JSON.stringify({level:"error",namespace:"audit-logs",message:"audit-log write failed",audit_log:s,error:i}))}catch{console.error(JSON.stringify({level:"error",namespace:"audit-logs",message:"audit-log write failed (serialization failed)",audit_log_meta:{id:s.id,service:s.service,environment:s.environment,namespace:s.namespace,event:s.event,target:s.target},error:i}))}}}}exports.AuditLogger=S;
1
+ "use strict";var d=Object.defineProperty;var P=(s,e,t)=>e in s?d(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var n=(s,e,t)=>(P(s,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("uuid"),h=require("axios"),p="http://localhost:8090".replace(/\/+$/,"");class f{constructor(e,t=p,r=h){n(this,"basePath");n(this,"axios");n(this,"configuration");this.basePath=t,this.axios=r,e&&(this.configuration=e,this.basePath=e.basePath||this.basePath)}}class g extends Error{constructor(t,r){super(r);n(this,"field");n(this,"name","RequiredError");this.field=t}}const A="https://example.com",w=function(s,e,t){if(t==null)throw new g(e,`Required parameter ${e} was null or undefined when calling ${s}.`)},b=function(s,...e){const t=new URLSearchParams(s.search);for(const r of e)for(const o in r)if(Array.isArray(r[o])){t.delete(o);for(const a of r[o])t.append(o,a)}else t.set(o,r[o]);s.search=t.toString()},x=function(s,e,t){const r=typeof s!="string";return(r&&t&&t.isJsonMime?t.isJsonMime(e.headers["Content-Type"]):r)?JSON.stringify(s!==void 0?s:{}):s||""},y=function(s){return s.pathname+s.search+s.hash},L=function(s,e,t,r){return(o=e,a=t)=>{const i={...s.options,url:((r==null?void 0:r.basePath)||a)+s.url};return o.request(i)}},S=function(s){return{v1LogPost:async(e,t={})=>{w("v1LogPost","inlineObject",e);const r="/v1/log",o=new URL(r,A);let a;s&&(a=s.baseOptions);const i={method:"POST",...a,...t},c={},l={};c["Content-Type"]="application/json",b(o,l);let u=a&&a.headers?a.headers:{};return i.headers={...c,...u,...t.headers},i.data=x(e,i,s),{url:y(o),options:i}}}},E=function(s){const e=S(s);return{async v1LogPost(t,r){const o=await e.v1LogPost(t,r);return L(o,h,p,s)}}};class v extends f{v1LogPost(e,t){return E(this.configuration).v1LogPost(e,t).then(r=>r(this.axios,this.basePath))}}const R=s=>"isAxiosError"in s&&s.isAxiosError&&s instanceof Error;class j{constructor(e){n(this,"apiUrl");n(this,"api");this.apiUrl=e,this.api=new v({basePath:this.apiUrl,isJsonMime(t){const r=new RegExp("^(application/json|[^;/ ]+/[^;/ ]+[+]json)[ ]*(;.*)?$","i");return t!==null&&(r.test(t)||t.toLowerCase()==="application/json-patch+json")}})}async create(e){var t;try{await this.api.v1LogPost(e,{timeout:5e3})}catch(r){if(!R(r))throw r;const o=((t=r.response)==null?void 0:t.data)||r.message;throw new Error(o)}}}class q{constructor(e){n(this,"params");n(this,"transport");this.params=e,this.transport=new j(e.apiUrl)}async log({scope:e,account:t,...r}){const o=m.v4(),{environment:a,service:i}=this.params,c=Math.floor(Date.now()/1e3),l={...r,...t,service:i,id:o,environment:a,timestamp:c,...e&&{scope:e}};await this.transport.create(l)}}exports.AuditLogger=q;
package/dist/index.mjs CHANGED
@@ -1,77 +1,149 @@
1
1
  var u = Object.defineProperty;
2
- var m = (r, e, t) => e in r ? u(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
- var o = (r, e, t) => (m(r, typeof e != "symbol" ? e + "" : e, t), t);
4
- import { v4 as d } from "uuid";
5
- import { SQSClient as p, SendMessageCommand as w } from "@aws-sdk/client-sqs";
6
- const h = "eu-west-3", v = {
7
- dev: "https://sqs.eu-west-3.amazonaws.com/533547282673/audit-logs-ingest",
8
- staging: "https://sqs.eu-west-3.amazonaws.com/589883667243/audit-logs-ingest",
9
- prod: "https://sqs.eu-west-3.amazonaws.com/614948436281/audit-logs-ingest"
10
- };
2
+ var P = (s, e, t) => e in s ? u(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t;
3
+ var n = (s, e, t) => (P(s, typeof e != "symbol" ? e + "" : e, t), t);
4
+ import { v4 as m } from "uuid";
5
+ import l from "axios";
6
+ const p = "http://localhost:8090".replace(/\/+$/, "");
11
7
  class f {
8
+ constructor(e, t = p, o = l) {
9
+ n(this, "basePath");
10
+ n(this, "axios");
11
+ n(this, "configuration");
12
+ this.basePath = t, this.axios = o, e && (this.configuration = e, this.basePath = e.basePath || this.basePath);
13
+ }
14
+ }
15
+ class A extends Error {
16
+ constructor(t, o) {
17
+ super(o);
18
+ n(this, "field");
19
+ n(this, "name", "RequiredError");
20
+ this.field = t;
21
+ }
22
+ }
23
+ const w = "https://example.com", x = function(s, e, t) {
24
+ if (t == null)
25
+ throw new A(e, `Required parameter ${e} was null or undefined when calling ${s}.`);
26
+ }, g = function(s, ...e) {
27
+ const t = new URLSearchParams(s.search);
28
+ for (const o of e)
29
+ for (const r in o)
30
+ if (Array.isArray(o[r])) {
31
+ t.delete(r);
32
+ for (const a of o[r])
33
+ t.append(r, a);
34
+ } else
35
+ t.set(r, o[r]);
36
+ s.search = t.toString();
37
+ }, b = function(s, e, t) {
38
+ const o = typeof s != "string";
39
+ return (o && t && t.isJsonMime ? t.isJsonMime(e.headers["Content-Type"]) : o) ? JSON.stringify(s !== void 0 ? s : {}) : s || "";
40
+ }, y = function(s) {
41
+ return s.pathname + s.search + s.hash;
42
+ }, E = function(s, e, t, o) {
43
+ return (r = e, a = t) => {
44
+ const i = { ...s.options, url: ((o == null ? void 0 : o.basePath) || a) + s.url };
45
+ return r.request(i);
46
+ };
47
+ }, L = function(s) {
48
+ return {
49
+ /**
50
+ *
51
+ * @summary Creates Audit Log event
52
+ * @param {InlineObject} inlineObject
53
+ * @param {*} [options] Override http request option.
54
+ * @throws {RequiredError}
55
+ */
56
+ v1LogPost: async (e, t = {}) => {
57
+ x("v1LogPost", "inlineObject", e);
58
+ const o = "/v1/log", r = new URL(o, w);
59
+ let a;
60
+ s && (a = s.baseOptions);
61
+ const i = { method: "POST", ...a, ...t }, c = {}, h = {};
62
+ c["Content-Type"] = "application/json", g(r, h);
63
+ let d = a && a.headers ? a.headers : {};
64
+ return i.headers = { ...c, ...d, ...t.headers }, i.data = b(e, i, s), {
65
+ url: y(r),
66
+ options: i
67
+ };
68
+ }
69
+ };
70
+ }, S = function(s) {
71
+ const e = L(s);
72
+ return {
73
+ /**
74
+ *
75
+ * @summary Creates Audit Log event
76
+ * @param {InlineObject} inlineObject
77
+ * @param {*} [options] Override http request option.
78
+ * @throws {RequiredError}
79
+ */
80
+ async v1LogPost(t, o) {
81
+ const r = await e.v1LogPost(t, o);
82
+ return E(r, l, p, s);
83
+ }
84
+ };
85
+ };
86
+ class v extends f {
87
+ /**
88
+ *
89
+ * @summary Creates Audit Log event
90
+ * @param {InlineObject} inlineObject
91
+ * @param {*} [options] Override http request option.
92
+ * @throws {RequiredError}
93
+ * @memberof DefaultApi
94
+ */
95
+ v1LogPost(e, t) {
96
+ return S(this.configuration).v1LogPost(e, t).then((o) => o(this.axios, this.basePath));
97
+ }
98
+ }
99
+ const R = (s) => "isAxiosError" in s && s.isAxiosError && s instanceof Error;
100
+ class U {
12
101
  constructor(e) {
13
- o(this, "environment");
14
- o(this, "client");
15
- o(this, "queueUrl");
16
- this.environment = e;
17
- const t = v[e];
18
- if (!t)
19
- throw new Error(`audit-logs SDK: no SQS queue URL configured for environment "${e}"`);
20
- this.queueUrl = t, this.client = new p({ region: h });
102
+ n(this, "apiUrl");
103
+ n(this, "api");
104
+ this.apiUrl = e, this.api = new v({
105
+ basePath: this.apiUrl,
106
+ isJsonMime(t) {
107
+ const o = new RegExp(
108
+ // eslint-disable-next-line no-control-regex
109
+ "^(application/json|[^;/ ]+/[^;/ ]+[+]json)[ ]*(;.*)?$",
110
+ "i"
111
+ );
112
+ return t !== null && (o.test(t) || t.toLowerCase() === "application/json-patch+json");
113
+ }
114
+ });
21
115
  }
22
116
  async create(e) {
23
- await this.client.send(new w({
24
- QueueUrl: this.queueUrl,
25
- MessageBody: JSON.stringify(e)
26
- }));
117
+ var t;
118
+ try {
119
+ await this.api.v1LogPost(e, { timeout: 5e3 });
120
+ } catch (o) {
121
+ if (!R(o))
122
+ throw o;
123
+ const r = ((t = o.response) == null ? void 0 : t.data) || o.message;
124
+ throw new Error(r);
125
+ }
27
126
  }
28
127
  }
29
- class y {
128
+ class O {
30
129
  constructor(e) {
31
- o(this, "params");
32
- o(this, "transport");
33
- this.params = e, this.transport = new f(e.environment);
130
+ n(this, "params");
131
+ n(this, "transport");
132
+ this.params = e, this.transport = new U(e.apiUrl);
34
133
  }
35
- async log({ scope: e, account: t, ...n }) {
36
- const i = d(), { environment: c, service: l } = this.params, s = {
37
- ...n,
134
+ async log({ scope: e, account: t, ...o }) {
135
+ const r = m(), { environment: a, service: i } = this.params, c = Math.floor(Date.now() / 1e3), h = {
136
+ ...o,
38
137
  ...t,
39
- service: l,
40
- id: i,
41
- environment: c,
138
+ service: i,
139
+ id: r,
140
+ environment: a,
141
+ timestamp: c,
42
142
  ...e && { scope: e }
43
143
  };
44
- try {
45
- await this.transport.create(s);
46
- } catch (g) {
47
- const a = g.message;
48
- try {
49
- console.error(JSON.stringify({
50
- level: "error",
51
- namespace: "audit-logs",
52
- message: "audit-log write failed",
53
- audit_log: s,
54
- error: a
55
- }));
56
- } catch {
57
- console.error(JSON.stringify({
58
- level: "error",
59
- namespace: "audit-logs",
60
- message: "audit-log write failed (serialization failed)",
61
- audit_log_meta: {
62
- id: s.id,
63
- service: s.service,
64
- environment: s.environment,
65
- namespace: s.namespace,
66
- event: s.event,
67
- target: s.target
68
- },
69
- error: a
70
- }));
71
- }
72
- }
144
+ await this.transport.create(h);
73
145
  }
74
146
  }
75
147
  export {
76
- y as AuditLogger
148
+ O as AuditLogger
77
149
  };
@@ -1,8 +1,8 @@
1
- import { IAuditLogCreationData, IAuditLogTransport } from './interface';
1
+ import { InlineObject } from './generated/model';
2
+ import { IAuditLogTransport } from './interface';
2
3
  export declare class Transport implements IAuditLogTransport {
3
- protected environment: string;
4
- private client;
5
- private queueUrl;
6
- constructor(environment: string);
7
- create(auditLogData: IAuditLogCreationData): Promise<void>;
4
+ protected apiUrl: string;
5
+ private api;
6
+ constructor(apiUrl: string);
7
+ create(auditLogData: InlineObject): Promise<void>;
8
8
  }
@@ -1,5 +1,6 @@
1
1
  export interface IAuditLogCreationData {
2
2
  id: string;
3
+ timestamp: number;
3
4
  environment: string;
4
5
  service: string;
5
6
  scope?: Record<string, unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payfit/audit-log",
3
- "version": "3.5.0-rc.9",
3
+ "version": "3.5.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/PayFit/audit-logs.git",
@@ -15,8 +15,6 @@
15
15
  "build": "rimraf dist && vite build",
16
16
  "prepack": "npm run build",
17
17
  "lint": "eslint .",
18
- "test": "vitest run",
19
- "test:watch": "vitest",
20
18
  "start:playground": "ts-node src/playground.ts",
21
19
  "format:check": "prettier --check .",
22
20
  "format:fix": "prettier --write .",
@@ -25,7 +23,6 @@
25
23
  "author": "",
26
24
  "license": "ISC",
27
25
  "dependencies": {
28
- "@aws-sdk/client-sqs": "^3.600.0",
29
26
  "axios": "^1.0.0",
30
27
  "lodash": "^4.17.20",
31
28
  "uuid": "^9.0.0"
@@ -49,14 +46,13 @@
49
46
  "semantic-release": "22.0.12",
50
47
  "ts-node": "10.9.2",
51
48
  "typescript": "5.3.3",
52
- "vite": "4.5.1",
53
- "vitest": "4.1.4"
49
+ "vite": "4.5.1"
54
50
  },
51
+ "peerDependencies": {},
55
52
  "publishConfig": {
56
53
  "registry": "https://registry.npmjs.org/"
57
54
  },
58
55
  "files": [
59
56
  "dist"
60
- ],
61
- "packageManager": "yarn@4.14.1+sha512.64df448055b2d37ba269d7db535a469b8da93f8ef1140c25fd7a83c00a8fbaacb214ca0e02553b92a2c54cef78bb67d0b4817fab02001df0e24fac0faccc3b42"
57
+ ]
62
58
  }
@@ -1 +0,0 @@
1
- export {};