@warp-drive/holodeck 0.0.0-alpha.21 → 0.0.0-alpha.29
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/bin/cmd/pm2.js +3 -2
- package/bin/cmd/run.js +0 -0
- package/bin/holodeck.js +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +29 -29
- package/server/index.js +59 -6
- package/server/CERT.md +0 -3
- package/server/localhost-key.pem +0 -28
- package/server/localhost.pem +0 -27
package/bin/cmd/pm2.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
2
|
/* global Bun, globalThis */
|
|
3
|
-
const { process } = globalThis;
|
|
4
|
-
import pm2 from 'pm2';
|
|
5
3
|
import fs from 'fs';
|
|
4
|
+
import pm2 from 'pm2';
|
|
5
|
+
|
|
6
|
+
const { process } = globalThis;
|
|
6
7
|
|
|
7
8
|
export default async function pm2Delegate(cmd, _args) {
|
|
8
9
|
const pkg = JSON.parse(fs.readFileSync('./package.json'), 'utf8');
|
package/bin/cmd/run.js
CHANGED
|
File without changes
|
package/bin/holodeck.js
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAe,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAEhH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAIhD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,QAS5D;AAGD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,QAE5C;AACD,wBAAgB,cAAc,YAE7B;AAED,qBAAa,iBAAkB,YAAW,OAAO;IACvC,KAAK,EAAE,MAAM,CAAC;gBACV,KAAK,EAAE,MAAM;IAGnB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAe,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAEhH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAIhD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,QAS5D;AAGD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,QAE5C;AACD,wBAAgB,cAAc,YAE7B;AAED,qBAAa,iBAAkB,YAAW,OAAO;IACvC,KAAK,EAAE,MAAM,CAAC;gBACV,KAAK,EAAE,MAAM;IAGnB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;CA+B/F;AAED,wBAAsB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,OAAO,iBAgB3F"}
|
package/dist/index.js
CHANGED
|
@@ -38,7 +38,9 @@ class MockServerHandler {
|
|
|
38
38
|
request.credentials = 'omit';
|
|
39
39
|
request.referrerPolicy = '';
|
|
40
40
|
try {
|
|
41
|
-
|
|
41
|
+
const future = next(request);
|
|
42
|
+
context.setStream(future.getStream());
|
|
43
|
+
return await future;
|
|
42
44
|
} catch (e) {
|
|
43
45
|
if (e instanceof Error && !(e instanceof DOMException)) {
|
|
44
46
|
e.message = e.message.replace(queryForTest, '');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../client/index.ts"],"sourcesContent":["import type { Handler, NextFn, RequestContext, RequestInfo, StructuredDataDocument } from '@ember-data/request';\n\nimport type { ScaffoldGenerator } from './mock';\n\nconst TEST_IDS = new WeakMap<object, { id: string; request: number; mock: number }>();\n\nexport function setTestId(context: object, str: string | null) {\n if (str && TEST_IDS.has(context)) {\n throw new Error(`MockServerHandler is already configured with a testId.`);\n }\n if (str) {\n TEST_IDS.set(context, { id: str, request: 0, mock: 0 });\n } else {\n TEST_IDS.delete(context);\n }\n}\n\nlet IS_RECORDING = false;\nexport function setIsRecording(value: boolean) {\n IS_RECORDING = Boolean(value);\n}\nexport function getIsRecording() {\n return IS_RECORDING;\n}\n\nexport class MockServerHandler implements Handler {\n declare owner: object;\n constructor(owner: object) {\n this.owner = owner;\n }\n async request<T>(context: RequestContext, next: NextFn<T>): Promise<StructuredDataDocument<T>> {\n const test = TEST_IDS.get(this.owner);\n if (!test) {\n throw new Error(\n `MockServerHandler is not configured with a testId. Use setTestId to set the testId for each test`\n );\n }\n\n const request: RequestInfo = Object.assign({}, context.request);\n const isRecording = request.url!.endsWith('/__record');\n const firstChar = request.url!.includes('?') ? '&' : '?';\n const queryForTest = `${firstChar}__xTestId=${test.id}&__xTestRequestNumber=${\n isRecording ? test.mock++ : test.request++\n }`;\n request.url = request.url + queryForTest;\n\n request.mode = 'cors';\n request.credentials = 'omit';\n request.referrerPolicy = '';\n\n try {\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../client/index.ts"],"sourcesContent":["import type { Handler, NextFn, RequestContext, RequestInfo, StructuredDataDocument } from '@ember-data/request';\n\nimport type { ScaffoldGenerator } from './mock';\n\nconst TEST_IDS = new WeakMap<object, { id: string; request: number; mock: number }>();\n\nexport function setTestId(context: object, str: string | null) {\n if (str && TEST_IDS.has(context)) {\n throw new Error(`MockServerHandler is already configured with a testId.`);\n }\n if (str) {\n TEST_IDS.set(context, { id: str, request: 0, mock: 0 });\n } else {\n TEST_IDS.delete(context);\n }\n}\n\nlet IS_RECORDING = false;\nexport function setIsRecording(value: boolean) {\n IS_RECORDING = Boolean(value);\n}\nexport function getIsRecording() {\n return IS_RECORDING;\n}\n\nexport class MockServerHandler implements Handler {\n declare owner: object;\n constructor(owner: object) {\n this.owner = owner;\n }\n async request<T>(context: RequestContext, next: NextFn<T>): Promise<StructuredDataDocument<T>> {\n const test = TEST_IDS.get(this.owner);\n if (!test) {\n throw new Error(\n `MockServerHandler is not configured with a testId. Use setTestId to set the testId for each test`\n );\n }\n\n const request: RequestInfo = Object.assign({}, context.request);\n const isRecording = request.url!.endsWith('/__record');\n const firstChar = request.url!.includes('?') ? '&' : '?';\n const queryForTest = `${firstChar}__xTestId=${test.id}&__xTestRequestNumber=${\n isRecording ? test.mock++ : test.request++\n }`;\n request.url = request.url + queryForTest;\n\n request.mode = 'cors';\n request.credentials = 'omit';\n request.referrerPolicy = '';\n\n try {\n const future = next(request);\n context.setStream(future.getStream());\n return await future;\n } catch (e) {\n if (e instanceof Error && !(e instanceof DOMException)) {\n e.message = e.message.replace(queryForTest, '');\n }\n throw e;\n }\n }\n}\n\nexport async function mock(owner: object, generate: ScaffoldGenerator, isRecording?: boolean) {\n const test = TEST_IDS.get(owner);\n if (!test) {\n throw new Error(`Cannot call \"mock\" before configuring a testId. Use setTestId to set the testId for each test`);\n }\n const testMockNum = test.mock++;\n if (getIsRecording() || isRecording) {\n const url = `https://localhost:1135/__record?__xTestId=${test.id}&__xTestRequestNumber=${testMockNum}`;\n await fetch(url, {\n method: 'POST',\n body: JSON.stringify(generate()),\n mode: 'cors',\n credentials: 'omit',\n referrerPolicy: '',\n });\n }\n}\n"],"names":["TEST_IDS","WeakMap","setTestId","context","str","has","Error","set","id","request","mock","delete","IS_RECORDING","setIsRecording","value","Boolean","getIsRecording","MockServerHandler","constructor","owner","next","test","get","Object","assign","isRecording","url","endsWith","firstChar","includes","queryForTest","mode","credentials","referrerPolicy","future","setStream","getStream","e","DOMException","message","replace","generate","testMockNum","fetch","method","body","JSON","stringify"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warp-drive/holodeck",
|
|
3
3
|
"description": "⚡️ Simple, Fast HTTP Mocking for Tests",
|
|
4
|
-
"version": "0.0.0-alpha.
|
|
4
|
+
"version": "0.0.0-alpha.29",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Chris Thoburn <runspired@users.noreply.github.com>",
|
|
7
7
|
"repository": {
|
|
@@ -21,11 +21,10 @@
|
|
|
21
21
|
"extends": "../../package.json"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@hono/node-server": "^1.
|
|
25
|
-
"chalk": "^
|
|
26
|
-
"hono": "^
|
|
27
|
-
"pm2": "^5.3.1"
|
|
28
|
-
"pnpm-sync-dependencies-meta-injected": "0.0.10"
|
|
24
|
+
"@hono/node-server": "^1.8.2",
|
|
25
|
+
"chalk": "^5.3.0",
|
|
26
|
+
"hono": "^4.1.2",
|
|
27
|
+
"pm2": "^5.3.1"
|
|
29
28
|
},
|
|
30
29
|
"files": [
|
|
31
30
|
"bin",
|
|
@@ -39,26 +38,34 @@
|
|
|
39
38
|
"bin": {
|
|
40
39
|
"holodeck": "./bin/holodeck.js"
|
|
41
40
|
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build:types": "echo \"Types are private\" && exit 0",
|
|
43
|
+
"build:client": "rollup --config",
|
|
44
|
+
"_build": "bun run build:client && bun run build:types",
|
|
45
|
+
"start": "rollup --config --watch",
|
|
46
|
+
"_syncPnpm": "bun run sync-dependencies-meta-injected"
|
|
47
|
+
},
|
|
42
48
|
"peerDependencies": {
|
|
43
|
-
"@ember-data/request": "5.4.0-alpha.
|
|
44
|
-
"@warp-drive/core-types": "0.0.0-alpha.
|
|
49
|
+
"@ember-data/request": "5.4.0-alpha.43",
|
|
50
|
+
"@warp-drive/core-types": "0.0.0-alpha.29"
|
|
45
51
|
},
|
|
46
52
|
"devDependencies": {
|
|
47
|
-
"@babel/cli": "^7.
|
|
48
|
-
"@babel/core": "^7.
|
|
49
|
-
"@babel/plugin-transform-typescript": "^7.
|
|
50
|
-
"@babel/preset-env": "^7.
|
|
51
|
-
"@babel/preset-typescript": "^7.
|
|
52
|
-
"@babel/runtime": "^7.
|
|
53
|
-
"@ember-data/request": "5.4.0-alpha.
|
|
54
|
-
"@embroider/addon-dev": "^4.1
|
|
53
|
+
"@babel/cli": "^7.24.1",
|
|
54
|
+
"@babel/core": "^7.24.1",
|
|
55
|
+
"@babel/plugin-transform-typescript": "^7.24.1",
|
|
56
|
+
"@babel/preset-env": "^7.24.1",
|
|
57
|
+
"@babel/preset-typescript": "^7.24.1",
|
|
58
|
+
"@babel/runtime": "^7.24.1",
|
|
59
|
+
"@ember-data/request": "5.4.0-alpha.43",
|
|
60
|
+
"@embroider/addon-dev": "^4.2.1",
|
|
55
61
|
"@rollup/plugin-babel": "^6.0.4",
|
|
56
62
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
57
|
-
"@warp-drive/core-types": "0.0.0-alpha.
|
|
58
|
-
"@warp-drive/internal-config": "5.4.0-alpha.
|
|
59
|
-
"rollup": "^4.
|
|
60
|
-
"typescript": "^5.
|
|
61
|
-
"walk-sync": "^3.0.0"
|
|
63
|
+
"@warp-drive/core-types": "0.0.0-alpha.29",
|
|
64
|
+
"@warp-drive/internal-config": "5.4.0-alpha.43",
|
|
65
|
+
"rollup": "^4.13.0",
|
|
66
|
+
"typescript": "^5.4.3",
|
|
67
|
+
"walk-sync": "^3.0.0",
|
|
68
|
+
"pnpm-sync-dependencies-meta-injected": "0.0.10"
|
|
62
69
|
},
|
|
63
70
|
"type": "module",
|
|
64
71
|
"exports": {
|
|
@@ -85,12 +92,5 @@
|
|
|
85
92
|
"@warp-drive/core-types": {
|
|
86
93
|
"injected": true
|
|
87
94
|
}
|
|
88
|
-
},
|
|
89
|
-
"scripts": {
|
|
90
|
-
"build:types": "echo \"Types are private\" && exit 0",
|
|
91
|
-
"build:client": "rollup --config",
|
|
92
|
-
"_build": "bun run build:client && bun run build:types",
|
|
93
|
-
"start": "rollup --config --watch",
|
|
94
|
-
"_syncPnpm": "bun run sync-dependencies-meta-injected"
|
|
95
95
|
}
|
|
96
|
-
}
|
|
96
|
+
}
|
package/server/index.js
CHANGED
|
@@ -1,16 +1,63 @@
|
|
|
1
1
|
import { serve } from '@hono/node-server';
|
|
2
|
+
import chalk from 'chalk';
|
|
2
3
|
import { Hono } from 'hono';
|
|
3
4
|
import { cors } from 'hono/cors';
|
|
5
|
+
import { HTTPException } from 'hono/http-exception';
|
|
4
6
|
import { logger } from 'hono/logger';
|
|
7
|
+
import { execSync } from 'node:child_process';
|
|
5
8
|
import crypto from 'node:crypto';
|
|
6
9
|
import fs from 'node:fs';
|
|
7
10
|
import http2 from 'node:http2';
|
|
8
|
-
import { dirname } from 'node:path';
|
|
9
11
|
import zlib from 'node:zlib';
|
|
10
|
-
import {
|
|
11
|
-
import
|
|
12
|
+
import { homedir, userInfo } from 'os';
|
|
13
|
+
import path from 'path';
|
|
14
|
+
|
|
15
|
+
function getShellConfigFilePath() {
|
|
16
|
+
const shell = userInfo().shell;
|
|
17
|
+
switch (shell) {
|
|
18
|
+
case '/bin/zsh':
|
|
19
|
+
return path.join(homedir(), '.zshrc');
|
|
20
|
+
case '/bin/bash':
|
|
21
|
+
return path.join(homedir(), '.bashrc');
|
|
22
|
+
default:
|
|
23
|
+
throw Error(
|
|
24
|
+
`Unable to determine configuration file for shell: ${shell}. Manual SSL Cert Setup Required for Holodeck.`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getCertInfo() {
|
|
30
|
+
let CERT_PATH = process.env.HOLODECK_SSL_CERT_PATH;
|
|
31
|
+
let KEY_PATH = process.env.HOLODECK_SSL_KEY_PATH;
|
|
12
32
|
|
|
13
|
-
|
|
33
|
+
if (!CERT_PATH) {
|
|
34
|
+
CERT_PATH = path.join(homedir(), 'holodeck-localhost.pem');
|
|
35
|
+
process.env.HOLODECK_SSL_CERT_PATH = CERT_PATH;
|
|
36
|
+
execSync(`echo '\nexport HOLODECK_SSL_CERT_PATH="${CERT_PATH}"' >> ${getShellConfigFilePath()}`);
|
|
37
|
+
console.log(`Added HOLODECK_SSL_CERT_PATH to ${getShellConfigFilePath()}`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (!KEY_PATH) {
|
|
41
|
+
KEY_PATH = path.join(homedir(), 'holodeck-localhost-key.pem');
|
|
42
|
+
process.env.HOLODECK_SSL_KEY_PATH = KEY_PATH;
|
|
43
|
+
execSync(`echo '\nexport HOLODECK_SSL_KEY_PATH="${KEY_PATH}"' >> ${getShellConfigFilePath()}`);
|
|
44
|
+
console.log(`Added HOLODECK_SSL_KEY_PATH to ${getShellConfigFilePath()}`);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (!fs.existsSync(CERT_PATH) || !fs.existsSync(KEY_PATH)) {
|
|
48
|
+
console.log('SSL certificate or key not found, generating new ones...');
|
|
49
|
+
|
|
50
|
+
execSync(`mkcert -install`);
|
|
51
|
+
execSync(`mkcert -key-file ${KEY_PATH} -cert-file ${CERT_PATH} localhost`);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
CERT_PATH,
|
|
56
|
+
KEY_PATH,
|
|
57
|
+
CERT: fs.readFileSync(CERT_PATH),
|
|
58
|
+
KEY: fs.readFileSync(KEY_PATH),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
14
61
|
|
|
15
62
|
const DEFAULT_PORT = 1135;
|
|
16
63
|
const BROTLI_OPTIONS = {
|
|
@@ -211,13 +258,15 @@ export function createServer(options) {
|
|
|
211
258
|
);
|
|
212
259
|
app.all('*', createTestHandler(options.projectRoot));
|
|
213
260
|
|
|
261
|
+
const { CERT, KEY } = getCertInfo();
|
|
262
|
+
|
|
214
263
|
serve({
|
|
215
264
|
fetch: app.fetch,
|
|
216
265
|
createServer: (_, requestListener) => {
|
|
217
266
|
return http2.createSecureServer(
|
|
218
267
|
{
|
|
219
|
-
key:
|
|
220
|
-
cert:
|
|
268
|
+
key: KEY,
|
|
269
|
+
cert: CERT,
|
|
221
270
|
},
|
|
222
271
|
requestListener
|
|
223
272
|
);
|
|
@@ -225,4 +274,8 @@ export function createServer(options) {
|
|
|
225
274
|
port: options.port ?? DEFAULT_PORT,
|
|
226
275
|
hostname: 'localhost',
|
|
227
276
|
});
|
|
277
|
+
|
|
278
|
+
console.log(
|
|
279
|
+
`\tMock server running at ${chalk.magenta('https://localhost:') + chalk.yellow(options.port ?? DEFAULT_PORT)}`
|
|
280
|
+
);
|
|
228
281
|
}
|
package/server/CERT.md
DELETED
package/server/localhost-key.pem
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
-----BEGIN PRIVATE KEY-----
|
|
2
|
-
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCz8yulPBPYYZH+
|
|
3
|
-
M+kBVOCSj4EmN7Texxd/DXjOJTTpDI8aophZhfaXZSnTFhLxTEuAUVboU7yGR/JJ
|
|
4
|
-
JzL1nTVujR/gjJFrc4PVDeLzWMTJsTQcagdtku9suKC6M74/GlTI4yQC5p+IKRuv
|
|
5
|
-
ZisQhacyjpj5s4RoBR2n2aOscIncYtuKTJ570CIt9SFxEaV/WW3PlAG5LGEuqqJR
|
|
6
|
-
MwFTXz10IaKOVc/sxV2sYVS1tARydAx27IHKf23FilAu30nnc0ipGZNqFvHNvNed
|
|
7
|
-
Ggye+aaCh0WtX99HXs+JKPTfvV4sCDb7KIZq3WjRk7PAaSr6e999kvHuhZpXDUJL
|
|
8
|
-
Ynu0FYBZAgMBAAECggEBAJXcluWWAeT7ZO0x6AOe3yPPdTwRuoSpg4zg+FGdtNG9
|
|
9
|
-
DtScwooTwchVjJ5pzL69zkb/9oOncOLXuhRoG81m7l+yEfEcv+KfohPl67LDo6dg
|
|
10
|
-
90gOmT8M1m5R2DEZ9H9y+1cNqyjrTcLEkXTifkzVMegtz4JsmYFTeV4XJ3LtijJJ
|
|
11
|
-
j0b8X4d22DiNtQrx2zrcUF64UJSAxdRHW3nYlnjVxiXjUCO6TcrZvA+rqYNhX+QJ
|
|
12
|
-
lX9EwyVOdBtGsNMMECviFgrr4DPxkh77WptO6suIZ1X//UOAYEQp7rOsAf6sXRkp
|
|
13
|
-
seVp/TvhbjDk/XuRiv8zLaf0W4pFwt90XsCmkEzsH10CgYEA6beK8o2r5CA+mTJO
|
|
14
|
-
fb4MyqKhv6v5RXfG69IXf01gvARcXwjOMD5cV38UsI7YEw9RCXGRXzeH3MvW28aD
|
|
15
|
-
ADJYd+516vb0VwZwFYrUVKuBcjvvShPCk9HtOCqCEbRPBPJE7/mODHmL8u+61Rq/
|
|
16
|
-
l1n6GmYGLmJy2HaVDDnWi9jb0I8CgYEAxRtOKrkkdt36iUYlQ7wkWtDcN1gYVpuB
|
|
17
|
-
e2G/6BmDwIBTX/WoVlJrL9S3hFTjFc+0UJBpmmfFGFtp0tZFtjY7SaTj2whK4ZU7
|
|
18
|
-
VI90CUgExdsjf7yw+OeCgqdkiuRoFn39tL0h/pM4UcAKz9UB9yxvrfQRCXD3O6w2
|
|
19
|
-
TzbEv3VAxJcCgYBlnHvXeoqqEu7EUh/YAWG0U8K4/37PmgStEFlQ6oZNGCRE2SIz
|
|
20
|
-
zVj+XWzUWjZNCxKzZWHLoOv7rc/LG2JnGnxmIBG6RwXyNAVVCFfKPAp6bN5bOX4W
|
|
21
|
-
IGXfTnPgWKEmSGJ6ZuhAOjQDOgDjl86GcgMPqR202u6Nd/jTKO5DPNRMtwKBgHNu
|
|
22
|
-
JjzG6B/kp5A00CX2zKOSpSSUJsyxjQagnC5kos/dVvZfexHyemsse7y3qbVgSgzU
|
|
23
|
-
RcPy+W3mOvcKHRE0eUwLkJT5KkEpj/FZgW7eCk2EpClua4WYrsmtFihw0rQ5XJa4
|
|
24
|
-
HGxl8xmNCcfkyp3iHBUXVdLdoSwFElkZjedB14hJAoGAeeX+Rg4Y5a9/GNgxgsBU
|
|
25
|
-
o9MM/6qmjAJAb4iln9jHaEYZBd7EyogYuzqiKlASutIovGHj+P0RH3kvVlmVt1g/
|
|
26
|
-
45zmwVVrobCi5dqGQ1oPYvZpGCi85aYciTlfuH0mJqouXEkcO8kZQbc8ylR7WZS/
|
|
27
|
-
U9Mf1mB0yw8kupDasZ+uJ5c=
|
|
28
|
-
-----END PRIVATE KEY-----
|
package/server/localhost.pem
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
-----BEGIN CERTIFICATE-----
|
|
2
|
-
MIIEfzCCAuegAwIBAgIQWxpBRFaerCiZ6Gh6L9VAqjANBgkqhkiG9w0BAQsFADCB
|
|
3
|
-
qzEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMUAwPgYDVQQLDDdjdGhv
|
|
4
|
-
YnVybkBDaHJpcy1UaG9idXJuLUs1MFEzMEQ3NjEubG9jYWwgKENocmlzIFRob2J1
|
|
5
|
-
cm4pMUcwRQYDVQQDDD5ta2NlcnQgY3Rob2J1cm5AQ2hyaXMtVGhvYnVybi1LNTBR
|
|
6
|
-
MzBENzYxLmxvY2FsIChDaHJpcyBUaG9idXJuKTAeFw0yMzEwMDkwOTE1MDZaFw0y
|
|
7
|
-
NjAxMDkxMDE1MDZaMGsxJzAlBgNVBAoTHm1rY2VydCBkZXZlbG9wbWVudCBjZXJ0
|
|
8
|
-
aWZpY2F0ZTFAMD4GA1UECww3Y3Rob2J1cm5AQ2hyaXMtVGhvYnVybi1LNTBRMzBE
|
|
9
|
-
NzYxLmxvY2FsIChDaHJpcyBUaG9idXJuKTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
|
10
|
-
ADCCAQoCggEBALPzK6U8E9hhkf4z6QFU4JKPgSY3tN7HF38NeM4lNOkMjxqimFmF
|
|
11
|
-
9pdlKdMWEvFMS4BRVuhTvIZH8kknMvWdNW6NH+CMkWtzg9UN4vNYxMmxNBxqB22S
|
|
12
|
-
72y4oLozvj8aVMjjJALmn4gpG69mKxCFpzKOmPmzhGgFHafZo6xwidxi24pMnnvQ
|
|
13
|
-
Ii31IXERpX9Zbc+UAbksYS6qolEzAVNfPXQhoo5Vz+zFXaxhVLW0BHJ0DHbsgcp/
|
|
14
|
-
bcWKUC7fSedzSKkZk2oW8c28150aDJ75poKHRa1f30dez4ko9N+9XiwINvsohmrd
|
|
15
|
-
aNGTs8BpKvp7332S8e6FmlcNQktie7QVgFkCAwEAAaNeMFwwDgYDVR0PAQH/BAQD
|
|
16
|
-
AgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFPvg1+9/Kqq1KAXH
|
|
17
|
-
lhQsaJhmqOd1MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOC
|
|
18
|
-
AYEAx2seTuq9JRa2sdio17IJO+9ns35zl8TymSIV9U6YGgiW3m/bsfmZic6Kzn9R
|
|
19
|
-
+lj6rBAGIefrQEmfF3RGL3n7FOW0gwSXSeKmG1r7TBXYrkKF9i41C/VRUZ8iKZfl
|
|
20
|
-
ja5P9BFXWUeMQDLv6p3X/ynZMsw1HOIy2r5OJoxLjfN4NvnAnQxbMtVSsCHMesj1
|
|
21
|
-
U44mT09CeGTLTsbqFNZ7TX/Gm1I4ic7z8PGFpWDgliNARNH5Yf6Quh/ryY+jXc4F
|
|
22
|
-
yoC3JwhmRfi4vNCP6wmUzpLmS+psJkCjU1SnUmzjX219F22Y5vFUJrWhQq+qs/yx
|
|
23
|
-
t9PPlf+dt2MfoPsNIE096E9z8yBWcyggCQvyH0kv+a7HKOOHORtd8SuCNGtTEl4Q
|
|
24
|
-
Q8eheMGoIa4dsiMyJeWUOtxdInPkZNBxjQLkC2wCqSuN5+3iTuFfniRSoamqSVYo
|
|
25
|
-
/TtgXWM5tTUOHHisy+u9HR6fZpSlvplYIjVcmK5bObIlRx7MCOFiyXjJf7Xjv1ji
|
|
26
|
-
6JQn
|
|
27
|
-
-----END CERTIFICATE-----
|