@ripwords/myinvois-client 0.0.6 → 0.0.8

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 (55) hide show
  1. package/bun.lock +25 -25
  2. package/dist/index.cjs +95 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.ts +2318 -464
  5. package/dist/index.js +24 -22
  6. package/package.json +17 -13
  7. package/rolldown.config.ts +1 -1
  8. package/src/api/platform/taxpayerLogin.ts +28 -0
  9. package/src/types/index.d.ts +12 -0
  10. package/src/types/unit/1X.d.ts +16 -0
  11. package/src/types/unit/2X.d.ts +62 -0
  12. package/src/types/unit/3X.d.ts +17 -0
  13. package/src/types/unit/4X.d.ts +44 -0
  14. package/src/types/unit/5X.d.ts +26 -0
  15. package/src/types/unit/6X.d.ts +12 -0
  16. package/src/types/unit/7X.d.ts +12 -0
  17. package/src/types/unit/8X.d.ts +15 -0
  18. package/src/types/unit/9X.d.ts +11 -0
  19. package/src/types/unit/AX.d.ts +202 -0
  20. package/src/types/unit/BX.d.ts +212 -0
  21. package/src/types/unit/CX.d.ts +238 -0
  22. package/src/types/unit/DX.d.ts +212 -0
  23. package/src/types/unit/EX.d.ts +196 -0
  24. package/src/types/unit/FX.d.ts +236 -0
  25. package/src/types/unit/GX.d.ts +254 -0
  26. package/src/types/unit/HX.d.ts +234 -0
  27. package/src/types/unit/IX.d.ts +28 -0
  28. package/src/types/unit/JX.d.ts +190 -0
  29. package/src/types/unit/KX.d.ts +284 -0
  30. package/src/types/unit/LX.d.ts +228 -0
  31. package/src/types/unit/MX.d.ts +288 -0
  32. package/src/types/unit/NX.d.ts +226 -0
  33. package/src/types/unit/OX.d.ts +34 -0
  34. package/src/types/unit/PX.d.ts +224 -0
  35. package/src/types/unit/QX.d.ts +94 -0
  36. package/src/types/unit/RX.d.ts +28 -0
  37. package/src/types/unit/SX.d.ts +56 -0
  38. package/src/types/unit/TX.d.ts +44 -0
  39. package/src/types/unit/UX.d.ts +14 -0
  40. package/src/types/unit/VX.d.ts +13 -0
  41. package/src/types/unit/WX.d.ts +34 -0
  42. package/src/types/unit/XX.d.ts +825 -0
  43. package/src/types/unit/YX.d.ts +17 -0
  44. package/src/types/unit/ZX.d.ts +19 -0
  45. package/src/types/unit-types.d.ts +71 -575
  46. package/src/utils/MyInvoisClient.ts +20 -33
  47. package/src/utils/getBaseUrl.ts +5 -0
  48. package/test/{MyInvoiClientRealData.test.ts → MyInvoiClientWithRealData.test.ts} +13 -1
  49. package/test/MyInvoisClient.test.ts +14 -13
  50. package/dist/cjs/index.cjs +0 -70
  51. package/dist/cjs/index.cjs.map +0 -1
  52. package/dist/cjs/multipart-parser-Bu3ikqFQ.cjs +0 -182
  53. package/dist/cjs/multipart-parser-Bu3ikqFQ.cjs.map +0 -1
  54. package/dist/cjs/node-qs2pnN6F.cjs +0 -4124
  55. package/dist/cjs/node-qs2pnN6F.cjs.map +0 -1
@@ -1,12 +1,11 @@
1
- interface TokenResponse {
2
- access_token: string
3
- expires_in: number
4
- }
1
+ import { getBaseUrl } from './getBaseUrl'
2
+ import { taxpayerLogin } from 'src/api/platform/taxpayerLogin'
5
3
 
6
4
  export class MyInvoisClient {
7
5
  private readonly baseUrl: string
8
6
  private readonly clientId: string
9
7
  private readonly clientSecret: string
8
+ private readonly debug: boolean
10
9
  private token = ''
11
10
  private tokenExpiration: Date | undefined
12
11
 
@@ -14,45 +13,31 @@ export class MyInvoisClient {
14
13
  clientId: string,
15
14
  clientSecret: string,
16
15
  environment: 'sandbox' | 'production',
16
+ debug: boolean = false,
17
17
  ) {
18
18
  this.clientId = clientId
19
19
  this.clientSecret = clientSecret
20
-
21
- if (environment === 'sandbox') {
22
- this.baseUrl = 'https://preprod-api.myinvois.hasil.gov.my'
23
- } else {
24
- this.baseUrl = 'https://api.myinvois.hasil.gov.my'
25
- }
20
+ this.baseUrl = getBaseUrl(environment)
21
+ this.debug = debug
26
22
  }
27
23
 
28
24
  private async refreshToken() {
29
- try {
30
- const response = await fetch(`${this.baseUrl}/connect/token`, {
31
- method: 'POST',
32
- headers: {
33
- 'Content-Type': 'application/x-www-form-urlencoded',
34
- },
35
- body: new URLSearchParams({
36
- grant_type: 'client_credentials',
37
- client_id: this.clientId,
38
- client_secret: this.clientSecret,
39
- scope: 'InvoicingAPI',
40
- }),
41
- })
42
-
43
- const tokenResponse: TokenResponse = await response.json()
25
+ const tokenResponse = await taxpayerLogin({
26
+ clientId: this.clientId,
27
+ clientSecret: this.clientSecret,
28
+ baseUrl: this.baseUrl,
29
+ debug: this.debug,
30
+ })
44
31
 
45
- this.token = tokenResponse.access_token
46
- this.tokenExpiration = new Date(
47
- Date.now() + tokenResponse.expires_in * 1000,
48
- )
49
- } catch (error) {
50
- console.error(error)
51
- }
32
+ this.token = tokenResponse.token
33
+ this.tokenExpiration = tokenResponse.tokenExpiration
52
34
  }
53
35
 
54
36
  private async getToken() {
55
37
  if (!this.tokenExpiration || this.tokenExpiration < new Date()) {
38
+ if (this.debug) {
39
+ console.log('Refreshing token')
40
+ }
56
41
  await this.refreshToken()
57
42
  }
58
43
 
@@ -90,7 +75,9 @@ export class MyInvoisClient {
90
75
 
91
76
  return false
92
77
  } catch (error) {
93
- console.error(error)
78
+ if (this.debug) {
79
+ console.error(error)
80
+ }
94
81
  return false
95
82
  }
96
83
  }
@@ -0,0 +1,5 @@
1
+ export const getBaseUrl = (environment: 'sandbox' | 'production') => {
2
+ return environment === 'sandbox'
3
+ ? 'https://preprod-api.myinvois.hasil.gov.my'
4
+ : 'https://api.myinvois.hasil.gov.my'
5
+ }
@@ -1,8 +1,20 @@
1
1
  import { describe, it, expect } from 'vitest'
2
2
  import { MyInvoisClient } from '../src/utils/MyInvoisClient'
3
3
 
4
- describe('MyInvoisClientRealData', () => {
4
+ describe('MyInvoisClientWithRealData', () => {
5
5
  it('should verify TIN with real data', async () => {
6
+ // Skip the test if the environment variables are not set
7
+ if (
8
+ !process.env.CLIENT_ID ||
9
+ !process.env.CLIENT_SECRET ||
10
+ !process.env.TIN_VALUE ||
11
+ !process.env.NRIC_VALUE
12
+ ) {
13
+ expect
14
+ .soft(false, 'Skipping test: Missing required environment variables')
15
+ .toBe(true)
16
+ return
17
+ }
6
18
  const client = new MyInvoisClient(
7
19
  process.env.CLIENT_ID!,
8
20
  process.env.CLIENT_SECRET!,
@@ -12,15 +12,16 @@ describe('MyInvoisClient', () => {
12
12
 
13
13
  beforeEach(() => {
14
14
  vi.clearAllMocks()
15
- client = new MyInvoisClient('test-id', 'test-secret', 'sandbox')
15
+ client = new MyInvoisClient('test-id', 'test-secret', 'sandbox', false)
16
16
  })
17
17
 
18
18
  describe('constructor', () => {
19
19
  it('should set sandbox URL when environment is sandbox', () => {
20
20
  const sandboxClient = new MyInvoisClient(
21
- process.env.CLIENT_ID!,
22
- process.env.CLIENT_SECRET!,
21
+ 'test-id',
22
+ 'test-secret',
23
23
  'sandbox',
24
+ true,
24
25
  )
25
26
  expect((sandboxClient as any).baseUrl).toBe(
26
27
  'https://preprod-api.myinvois.hasil.gov.my',
@@ -29,9 +30,10 @@ describe('MyInvoisClient', () => {
29
30
 
30
31
  it('should set production URL when environment is production', () => {
31
32
  const prodClient = new MyInvoisClient(
32
- process.env.CLIENT_ID!,
33
- process.env.CLIENT_SECRET!,
33
+ 'test-id',
34
+ 'test-secret',
34
35
  'production',
36
+ true,
35
37
  )
36
38
  expect((prodClient as any).baseUrl).toBe(
37
39
  'https://api.myinvois.hasil.gov.my',
@@ -64,7 +66,7 @@ describe('MyInvoisClient', () => {
64
66
  access_token: 'test-token',
65
67
  expires_in: 3600,
66
68
  }
67
- vi.advanceTimersByTime(8000)
69
+
68
70
  mockFetch
69
71
  .mockResolvedValueOnce({
70
72
  ok: true,
@@ -120,12 +122,12 @@ describe('MyInvoisClient', () => {
120
122
  } as Response)
121
123
 
122
124
  // First call to get token
123
- await client.verifyTin(process.env.TIN_VALUE!, process.env.NRIC_VALUE!)
125
+ await client.verifyTin('123', '456')
124
126
 
125
- vi.advanceTimersByTime(10)
127
+ vi.setSystemTime(new Date(Date.now() + 1000))
126
128
 
127
129
  // Second call should reuse token
128
- await client.verifyTin(process.env.TIN_VALUE!, process.env.NRIC_VALUE!)
130
+ await client.verifyTin('123', '456')
129
131
 
130
132
  // Token endpoint should only be called once
131
133
  expect(mockFetch).toHaveBeenCalledWith(
@@ -153,6 +155,8 @@ describe('MyInvoisClient', () => {
153
155
  } as Response)
154
156
 
155
157
  await client.verifyTin('123', '456')
158
+ vi.setSystemTime(new Date(Date.now() + 1000 * 8000))
159
+ await client.verifyTin('123', '456')
156
160
 
157
161
  expect(mockFetch).toHaveBeenCalledWith(
158
162
  `https://preprod-api.myinvois.hasil.gov.my/api/v1.0/taxpayer/validate/123?idType=NRIC&idValue=456`,
@@ -178,10 +182,7 @@ describe('MyInvoisClient', () => {
178
182
  } as Response)
179
183
  .mockRejectedValueOnce(new Error('Invalid TIN'))
180
184
 
181
- const result = await client.verifyTin(
182
- process.env.TIN_VALUE!,
183
- process.env.NRIC_VALUE!,
184
- )
185
+ const result = await client.verifyTin('123', '456')
185
186
 
186
187
  expect(result).toBe(false)
187
188
  })
@@ -1,70 +0,0 @@
1
- "use strict";
2
-
3
- //#region src/utils/MyInvoisClient.ts
4
- var MyInvoisClient = class {
5
- baseUrl;
6
- clientId;
7
- clientSecret;
8
- token = "";
9
- tokenExpiration;
10
- constructor(clientId, clientSecret, environment) {
11
- this.clientId = clientId;
12
- this.clientSecret = clientSecret;
13
- if (environment === "sandbox") this.baseUrl = "https://preprod-api.myinvois.hasil.gov.my";
14
- else this.baseUrl = "https://api.myinvois.hasil.gov.my";
15
- }
16
- async refreshToken() {
17
- try {
18
- const response = await fetch(`${this.baseUrl}/connect/token`, {
19
- method: "POST",
20
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
21
- body: new URLSearchParams({
22
- grant_type: "client_credentials",
23
- client_id: this.clientId,
24
- client_secret: this.clientSecret,
25
- scope: "InvoicingAPI"
26
- })
27
- });
28
- const tokenResponse = await response.json();
29
- this.token = tokenResponse.access_token;
30
- this.tokenExpiration = new Date(Date.now() + tokenResponse.expires_in * 1e3);
31
- } catch (error) {
32
- console.error(error);
33
- }
34
- }
35
- async getToken() {
36
- if (!this.tokenExpiration || this.tokenExpiration < new Date()) await this.refreshToken();
37
- return this.token;
38
- }
39
- async fetch(path, options = {}) {
40
- const token = await this.getToken();
41
- return fetch(`${this.baseUrl}${path}`, {
42
- ...options,
43
- headers: {
44
- ...options.headers,
45
- Authorization: `Bearer ${token}`
46
- }
47
- });
48
- }
49
- /**
50
- * Validates a TIN against a NRIC
51
- *
52
- * @param tin
53
- * @param nric
54
- * @returns
55
- */
56
- async verifyTin(tin, nric) {
57
- try {
58
- const response = await this.fetch(`/api/v1.0/taxpayer/validate/${tin}?idType=NRIC&idValue=${nric}`, { method: "GET" });
59
- if (response.status === 200) return true;
60
- return false;
61
- } catch (error) {
62
- console.error(error);
63
- return false;
64
- }
65
- }
66
- };
67
-
68
- //#endregion
69
- exports.MyInvoisClient = MyInvoisClient
70
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":["clientId: string","clientSecret: string","environment: 'sandbox' | 'production'","tokenResponse: TokenResponse","path: string","options: Parameters<typeof fetch>[1]","tin: string","nric: string"],"sources":["../../src/utils/MyInvoisClient.ts"],"sourcesContent":["interface TokenResponse {\n access_token: string\n expires_in: number\n}\n\nexport class MyInvoisClient {\n private readonly baseUrl: string\n private readonly clientId: string\n private readonly clientSecret: string\n private token = ''\n private tokenExpiration: Date | undefined\n\n constructor(\n clientId: string,\n clientSecret: string,\n environment: 'sandbox' | 'production',\n ) {\n this.clientId = clientId\n this.clientSecret = clientSecret\n\n if (environment === 'sandbox') {\n this.baseUrl = 'https://preprod-api.myinvois.hasil.gov.my'\n } else {\n this.baseUrl = 'https://api.myinvois.hasil.gov.my'\n }\n }\n\n private async refreshToken() {\n try {\n const response = await fetch(`${this.baseUrl}/connect/token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'client_credentials',\n client_id: this.clientId,\n client_secret: this.clientSecret,\n scope: 'InvoicingAPI',\n }),\n })\n\n const tokenResponse: TokenResponse = await response.json()\n\n this.token = tokenResponse.access_token\n this.tokenExpiration = new Date(\n Date.now() + tokenResponse.expires_in * 1000,\n )\n } catch (error) {\n console.error(error)\n }\n }\n\n private async getToken() {\n if (!this.tokenExpiration || this.tokenExpiration < new Date()) {\n await this.refreshToken()\n }\n\n return this.token\n }\n\n private async fetch(path: string, options: Parameters<typeof fetch>[1] = {}) {\n const token = await this.getToken()\n\n return fetch(`${this.baseUrl}${path}`, {\n ...options,\n headers: { ...options.headers, Authorization: `Bearer ${token}` },\n })\n }\n\n /**\n * Validates a TIN against a NRIC\n *\n * @param tin\n * @param nric\n * @returns\n */\n async verifyTin(tin: string, nric: string) {\n try {\n const response = await this.fetch(\n `/api/v1.0/taxpayer/validate/${tin}?idType=NRIC&idValue=${nric}`,\n {\n method: 'GET',\n },\n )\n\n if (response.status === 200) {\n return true\n }\n\n return false\n } catch (error) {\n console.error(error)\n return false\n }\n }\n}\n"],"mappings":";;;IAKa,iBAAN,MAAqB;CAC1B,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAQ,QAAQ;CAChB,AAAQ;CAER,YACEA,UACAC,cACAC,aACA;AACA,OAAK,WAAW;AAChB,OAAK,eAAe;AAEpB,MAAI,gBAAgB,UAClB,MAAK,UAAU;MAEf,MAAK,UAAU;CAElB;CAED,MAAc,eAAe;AAC3B,MAAI;GACF,MAAM,WAAW,MAAM,OAAO,EAAE,KAAK,QAAQ,iBAAiB;IAC5D,QAAQ;IACR,SAAS,EACP,gBAAgB,oCACjB;IACD,MAAM,IAAI,gBAAgB;KACxB,YAAY;KACZ,WAAW,KAAK;KAChB,eAAe,KAAK;KACpB,OAAO;IACR;GACF,EAAC;GAEF,MAAMC,gBAA+B,MAAM,SAAS,MAAM;AAE1D,QAAK,QAAQ,cAAc;AAC3B,QAAK,kBAAkB,IAAI,KACzB,KAAK,KAAK,GAAG,cAAc,aAAa;EAE3C,SAAQ,OAAO;AACd,WAAQ,MAAM,MAAM;EACrB;CACF;CAED,MAAc,WAAW;AACvB,OAAK,KAAK,mBAAmB,KAAK,kBAAkB,IAAI,OACtD,OAAM,KAAK,cAAc;AAG3B,SAAO,KAAK;CACb;CAED,MAAc,MAAMC,MAAcC,UAAuC,CAAE,GAAE;EAC3E,MAAM,QAAQ,MAAM,KAAK,UAAU;AAEnC,SAAO,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,GAAG;GACrC,GAAG;GACH,SAAS;IAAE,GAAG,QAAQ;IAAS,gBAAgB,SAAS,MAAM;GAAG;EAClE,EAAC;CACH;;;;;;;;CASD,MAAM,UAAUC,KAAaC,MAAc;AACzC,MAAI;GACF,MAAM,WAAW,MAAM,KAAK,OACzB,8BAA8B,IAAI,uBAAuB,KAAK,GAC/D,EACE,QAAQ,MACT,EACF;AAED,OAAI,SAAS,WAAW,IACtB,QAAO;AAGT,UAAO;EACR,SAAQ,OAAO;AACd,WAAQ,MAAM,MAAM;AACpB,UAAO;EACR;CACF;AACF"}
@@ -1,182 +0,0 @@
1
- "use strict";
2
- const require_node = require('./node-qs2pnN6F.cjs');
3
- const node_http = require_node.__toESM(require("node:http"));
4
- const node_https = require_node.__toESM(require("node:https"));
5
- const node_zlib = require_node.__toESM(require("node:zlib"));
6
- const node_stream = require_node.__toESM(require("node:stream"));
7
- const node_buffer = require_node.__toESM(require("node:buffer"));
8
- const node_util = require_node.__toESM(require("node:util"));
9
- const node_url = require_node.__toESM(require("node:url"));
10
- const node_net = require_node.__toESM(require("node:net"));
11
- const node_fs = require_node.__toESM(require("node:fs"));
12
- const node_path = require_node.__toESM(require("node:path"));
13
-
14
- //#region node_modules/node-fetch-native/dist/chunks/multipart-parser.mjs
15
- var U = Object.defineProperty;
16
- var E = (_, o) => U(_, "name", {
17
- value: o,
18
- configurable: !0
19
- });
20
- let D = 0;
21
- const t = {
22
- START_BOUNDARY: D++,
23
- HEADER_FIELD_START: D++,
24
- HEADER_FIELD: D++,
25
- HEADER_VALUE_START: D++,
26
- HEADER_VALUE: D++,
27
- HEADER_VALUE_ALMOST_DONE: D++,
28
- HEADERS_ALMOST_DONE: D++,
29
- PART_DATA_START: D++,
30
- PART_DATA: D++,
31
- END: D++
32
- };
33
- let F = 1;
34
- const u = {
35
- PART_BOUNDARY: F,
36
- LAST_BOUNDARY: F *= 2
37
- }, g = 10, N = 13, V = 32, S = 45, Y = 58, x = 97, C = 122, I = E((_) => _ | 32, "lower"), p = E(() => {}, "noop");
38
- var M = class {
39
- static {
40
- E(this, "MultipartParser");
41
- }
42
- constructor(o) {
43
- this.index = 0, this.flags = 0, this.onHeaderEnd = p, this.onHeaderField = p, this.onHeadersEnd = p, this.onHeaderValue = p, this.onPartBegin = p, this.onPartData = p, this.onPartEnd = p, this.boundaryChars = {}, o = `\r
44
- --` + o;
45
- const n = new Uint8Array(o.length);
46
- for (let r = 0; r < o.length; r++) n[r] = o.charCodeAt(r), this.boundaryChars[n[r]] = !0;
47
- this.boundary = n, this.lookbehind = new Uint8Array(this.boundary.length + 8), this.state = t.START_BOUNDARY;
48
- }
49
- write(o) {
50
- let n = 0;
51
- const r = o.length;
52
- let d = this.index, { lookbehind: l, boundary: c, boundaryChars: m, index: e, state: i, flags: A } = this;
53
- const H = this.boundary.length, O = H - 1, y = o.length;
54
- let a, L;
55
- const f = E((h) => {
56
- this[h + "Mark"] = n;
57
- }, "mark"), s = E((h) => {
58
- delete this[h + "Mark"];
59
- }, "clear"), T = E((h, P, R, k) => {
60
- (P === void 0 || P !== R) && this[h](k && k.subarray(P, R));
61
- }, "callback"), b = E((h, P) => {
62
- const R = h + "Mark";
63
- R in this && (P ? (T(h, this[R], n, o), delete this[R]) : (T(h, this[R], o.length, o), this[R] = 0));
64
- }, "dataCallback");
65
- for (n = 0; n < r; n++) switch (a = o[n], i) {
66
- case t.START_BOUNDARY:
67
- if (e === c.length - 2) {
68
- if (a === S) A |= u.LAST_BOUNDARY;
69
- else if (a !== N) return;
70
- e++;
71
- break;
72
- } else if (e - 1 === c.length - 2) {
73
- if (A & u.LAST_BOUNDARY && a === S) i = t.END, A = 0;
74
- else if (!(A & u.LAST_BOUNDARY) && a === g) e = 0, T("onPartBegin"), i = t.HEADER_FIELD_START;
75
- else return;
76
- break;
77
- }
78
- a !== c[e + 2] && (e = -2), a === c[e + 2] && e++;
79
- break;
80
- case t.HEADER_FIELD_START: i = t.HEADER_FIELD, f("onHeaderField"), e = 0;
81
- case t.HEADER_FIELD:
82
- if (a === N) {
83
- s("onHeaderField"), i = t.HEADERS_ALMOST_DONE;
84
- break;
85
- }
86
- if (e++, a === S) break;
87
- if (a === Y) {
88
- if (e === 1) return;
89
- b("onHeaderField", !0), i = t.HEADER_VALUE_START;
90
- break;
91
- }
92
- if (L = I(a), L < x || L > C) return;
93
- break;
94
- case t.HEADER_VALUE_START:
95
- if (a === V) break;
96
- f("onHeaderValue"), i = t.HEADER_VALUE;
97
- case t.HEADER_VALUE:
98
- a === N && (b("onHeaderValue", !0), T("onHeaderEnd"), i = t.HEADER_VALUE_ALMOST_DONE);
99
- break;
100
- case t.HEADER_VALUE_ALMOST_DONE:
101
- if (a !== g) return;
102
- i = t.HEADER_FIELD_START;
103
- break;
104
- case t.HEADERS_ALMOST_DONE:
105
- if (a !== g) return;
106
- T("onHeadersEnd"), i = t.PART_DATA_START;
107
- break;
108
- case t.PART_DATA_START: i = t.PART_DATA, f("onPartData");
109
- case t.PART_DATA:
110
- if (d = e, e === 0) {
111
- for (n += O; n < y && !(o[n] in m);) n += H;
112
- n -= O, a = o[n];
113
- }
114
- if (e < c.length) c[e] === a ? (e === 0 && b("onPartData", !0), e++) : e = 0;
115
- else if (e === c.length) e++, a === N ? A |= u.PART_BOUNDARY : a === S ? A |= u.LAST_BOUNDARY : e = 0;
116
- else if (e - 1 === c.length) if (A & u.PART_BOUNDARY) {
117
- if (e = 0, a === g) {
118
- A &= ~u.PART_BOUNDARY, T("onPartEnd"), T("onPartBegin"), i = t.HEADER_FIELD_START;
119
- break;
120
- }
121
- } else A & u.LAST_BOUNDARY && a === S ? (T("onPartEnd"), i = t.END, A = 0) : e = 0;
122
- if (e > 0) l[e - 1] = a;
123
- else if (d > 0) {
124
- const h = new Uint8Array(l.buffer, l.byteOffset, l.byteLength);
125
- T("onPartData", 0, d, h), d = 0, f("onPartData"), n--;
126
- }
127
- break;
128
- case t.END: break;
129
- default: throw new Error(`Unexpected state entered: ${i}`);
130
- }
131
- b("onHeaderField"), b("onHeaderValue"), b("onPartData"), this.index = e, this.state = i, this.flags = A;
132
- }
133
- end() {
134
- if (this.state === t.HEADER_FIELD_START && this.index === 0 || this.state === t.PART_DATA && this.index === this.boundary.length) this.onPartEnd();
135
- else if (this.state !== t.END) throw new Error("MultipartParser.end(): stream ended unexpectedly");
136
- }
137
- };
138
- function $(_) {
139
- const o = _.match(/\bfilename=("(.*?)"|([^()<>@,;:\\"/[\]?={}\s\t]+))($|;\s)/i);
140
- if (!o) return;
141
- const n = o[2] || o[3] || "";
142
- let r = n.slice(n.lastIndexOf("\\") + 1);
143
- return r = r.replace(/%22/g, "\""), r = r.replace(/&#(\d{4});/g, (d, l) => String.fromCharCode(l)), r;
144
- }
145
- E($, "_fileName");
146
- async function v(_, o) {
147
- if (!/multipart/i.test(o)) throw new TypeError("Failed to fetch");
148
- const n = o.match(/boundary=(?:"([^"]+)"|([^;]+))/i);
149
- if (!n) throw new TypeError("no or bad content-type header, no multipart boundary");
150
- const r = new M(n[1] || n[2]);
151
- let d, l, c, m, e, i;
152
- const A = [], H = new require_node.Zt(), O = E((s) => {
153
- c += f.decode(s, { stream: !0 });
154
- }, "onPartData"), y = E((s) => {
155
- A.push(s);
156
- }, "appendToFile"), a = E(() => {
157
- const s = new require_node.Yr(A, i, { type: e });
158
- H.append(m, s);
159
- }, "appendFileToFormData"), L = E(() => {
160
- H.append(m, c);
161
- }, "appendEntryToFormData"), f = new TextDecoder("utf-8");
162
- f.decode(), r.onPartBegin = function() {
163
- r.onPartData = O, r.onPartEnd = L, d = "", l = "", c = "", m = "", e = "", i = null, A.length = 0;
164
- }, r.onHeaderField = function(s) {
165
- d += f.decode(s, { stream: !0 });
166
- }, r.onHeaderValue = function(s) {
167
- l += f.decode(s, { stream: !0 });
168
- }, r.onHeaderEnd = function() {
169
- if (l += f.decode(), d = d.toLowerCase(), d === "content-disposition") {
170
- const s = l.match(/\bname=("([^"]*)"|([^()<>@,;:\\"/[\]?={}\s\t]+))/i);
171
- s && (m = s[2] || s[3] || ""), i = $(l), i && (r.onPartData = y, r.onPartEnd = a);
172
- } else d === "content-type" && (e = l);
173
- l = "", d = "";
174
- };
175
- for await (const s of _) r.write(s);
176
- return r.end(), H;
177
- }
178
- E(v, "toFormData");
179
-
180
- //#endregion
181
- exports.toFormData = v
182
- //# sourceMappingURL=multipart-parser-Bu3ikqFQ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multipart-parser-Bu3ikqFQ.cjs","names":["w","B"],"sources":["../../node_modules/node-fetch-native/dist/chunks/multipart-parser.mjs"],"sourcesContent":["var U=Object.defineProperty;var E=(_,o)=>U(_,\"name\",{value:o,configurable:!0});import\"node:fs\";import\"node:path\";import{FormData as w,File as B}from\"../node.mjs\";import\"node:http\";import\"node:https\";import\"node:zlib\";import\"node:stream\";import\"node:buffer\";import\"node:util\";import\"../shared/node-fetch-native.DfbY2q-x.mjs\";import\"node:url\";import\"node:net\";let D=0;const t={START_BOUNDARY:D++,HEADER_FIELD_START:D++,HEADER_FIELD:D++,HEADER_VALUE_START:D++,HEADER_VALUE:D++,HEADER_VALUE_ALMOST_DONE:D++,HEADERS_ALMOST_DONE:D++,PART_DATA_START:D++,PART_DATA:D++,END:D++};let F=1;const u={PART_BOUNDARY:F,LAST_BOUNDARY:F*=2},g=10,N=13,V=32,S=45,Y=58,x=97,C=122,I=E(_=>_|32,\"lower\"),p=E(()=>{},\"noop\");class M{static{E(this,\"MultipartParser\")}constructor(o){this.index=0,this.flags=0,this.onHeaderEnd=p,this.onHeaderField=p,this.onHeadersEnd=p,this.onHeaderValue=p,this.onPartBegin=p,this.onPartData=p,this.onPartEnd=p,this.boundaryChars={},o=`\\r\n--`+o;const n=new Uint8Array(o.length);for(let r=0;r<o.length;r++)n[r]=o.charCodeAt(r),this.boundaryChars[n[r]]=!0;this.boundary=n,this.lookbehind=new Uint8Array(this.boundary.length+8),this.state=t.START_BOUNDARY}write(o){let n=0;const r=o.length;let d=this.index,{lookbehind:l,boundary:c,boundaryChars:m,index:e,state:i,flags:A}=this;const H=this.boundary.length,O=H-1,y=o.length;let a,L;const f=E(h=>{this[h+\"Mark\"]=n},\"mark\"),s=E(h=>{delete this[h+\"Mark\"]},\"clear\"),T=E((h,P,R,k)=>{(P===void 0||P!==R)&&this[h](k&&k.subarray(P,R))},\"callback\"),b=E((h,P)=>{const R=h+\"Mark\";R in this&&(P?(T(h,this[R],n,o),delete this[R]):(T(h,this[R],o.length,o),this[R]=0))},\"dataCallback\");for(n=0;n<r;n++)switch(a=o[n],i){case t.START_BOUNDARY:if(e===c.length-2){if(a===S)A|=u.LAST_BOUNDARY;else if(a!==N)return;e++;break}else if(e-1===c.length-2){if(A&u.LAST_BOUNDARY&&a===S)i=t.END,A=0;else if(!(A&u.LAST_BOUNDARY)&&a===g)e=0,T(\"onPartBegin\"),i=t.HEADER_FIELD_START;else return;break}a!==c[e+2]&&(e=-2),a===c[e+2]&&e++;break;case t.HEADER_FIELD_START:i=t.HEADER_FIELD,f(\"onHeaderField\"),e=0;case t.HEADER_FIELD:if(a===N){s(\"onHeaderField\"),i=t.HEADERS_ALMOST_DONE;break}if(e++,a===S)break;if(a===Y){if(e===1)return;b(\"onHeaderField\",!0),i=t.HEADER_VALUE_START;break}if(L=I(a),L<x||L>C)return;break;case t.HEADER_VALUE_START:if(a===V)break;f(\"onHeaderValue\"),i=t.HEADER_VALUE;case t.HEADER_VALUE:a===N&&(b(\"onHeaderValue\",!0),T(\"onHeaderEnd\"),i=t.HEADER_VALUE_ALMOST_DONE);break;case t.HEADER_VALUE_ALMOST_DONE:if(a!==g)return;i=t.HEADER_FIELD_START;break;case t.HEADERS_ALMOST_DONE:if(a!==g)return;T(\"onHeadersEnd\"),i=t.PART_DATA_START;break;case t.PART_DATA_START:i=t.PART_DATA,f(\"onPartData\");case t.PART_DATA:if(d=e,e===0){for(n+=O;n<y&&!(o[n]in m);)n+=H;n-=O,a=o[n]}if(e<c.length)c[e]===a?(e===0&&b(\"onPartData\",!0),e++):e=0;else if(e===c.length)e++,a===N?A|=u.PART_BOUNDARY:a===S?A|=u.LAST_BOUNDARY:e=0;else if(e-1===c.length)if(A&u.PART_BOUNDARY){if(e=0,a===g){A&=~u.PART_BOUNDARY,T(\"onPartEnd\"),T(\"onPartBegin\"),i=t.HEADER_FIELD_START;break}}else A&u.LAST_BOUNDARY&&a===S?(T(\"onPartEnd\"),i=t.END,A=0):e=0;if(e>0)l[e-1]=a;else if(d>0){const h=new Uint8Array(l.buffer,l.byteOffset,l.byteLength);T(\"onPartData\",0,d,h),d=0,f(\"onPartData\"),n--}break;case t.END:break;default:throw new Error(`Unexpected state entered: ${i}`)}b(\"onHeaderField\"),b(\"onHeaderValue\"),b(\"onPartData\"),this.index=e,this.state=i,this.flags=A}end(){if(this.state===t.HEADER_FIELD_START&&this.index===0||this.state===t.PART_DATA&&this.index===this.boundary.length)this.onPartEnd();else if(this.state!==t.END)throw new Error(\"MultipartParser.end(): stream ended unexpectedly\")}}function $(_){const o=_.match(/\\bfilename=(\"(.*?)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))($|;\\s)/i);if(!o)return;const n=o[2]||o[3]||\"\";let r=n.slice(n.lastIndexOf(\"\\\\\")+1);return r=r.replace(/%22/g,'\"'),r=r.replace(/&#(\\d{4});/g,(d,l)=>String.fromCharCode(l)),r}E($,\"_fileName\");async function v(_,o){if(!/multipart/i.test(o))throw new TypeError(\"Failed to fetch\");const n=o.match(/boundary=(?:\"([^\"]+)\"|([^;]+))/i);if(!n)throw new TypeError(\"no or bad content-type header, no multipart boundary\");const r=new M(n[1]||n[2]);let d,l,c,m,e,i;const A=[],H=new w,O=E(s=>{c+=f.decode(s,{stream:!0})},\"onPartData\"),y=E(s=>{A.push(s)},\"appendToFile\"),a=E(()=>{const s=new B(A,i,{type:e});H.append(m,s)},\"appendFileToFormData\"),L=E(()=>{H.append(m,c)},\"appendEntryToFormData\"),f=new TextDecoder(\"utf-8\");f.decode(),r.onPartBegin=function(){r.onPartData=O,r.onPartEnd=L,d=\"\",l=\"\",c=\"\",m=\"\",e=\"\",i=null,A.length=0},r.onHeaderField=function(s){d+=f.decode(s,{stream:!0})},r.onHeaderValue=function(s){l+=f.decode(s,{stream:!0})},r.onHeaderEnd=function(){if(l+=f.decode(),d=d.toLowerCase(),d===\"content-disposition\"){const s=l.match(/\\bname=(\"([^\"]*)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))/i);s&&(m=s[2]||s[3]||\"\"),i=$(l),i&&(r.onPartData=y,r.onPartEnd=a)}else d===\"content-type\"&&(e=l);l=\"\",d=\"\"};for await(const s of _)r.write(s);return r.end(),H}E(v,\"toFormData\");export{v as toFormData};\n"],"x_google_ignoreList":[0],"mappings":"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"}