@api-client/ui 0.2.11 → 0.2.12
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/build/src/elements/http/CertificateAdd.element.d.ts.map +1 -1
- package/build/src/elements/http/CertificateAdd.element.js +2 -5
- package/build/src/elements/http/CertificateAdd.element.js.map +1 -1
- package/build/src/elements/user/internals/UserAvatar.styles.d.ts.map +1 -1
- package/build/src/elements/user/internals/UserAvatar.styles.js +0 -1
- package/build/src/elements/user/internals/UserAvatar.styles.js.map +1 -1
- package/package.json +2 -2
- package/src/elements/http/CertificateAdd.element.ts +2 -5
- package/src/elements/user/internals/UserAvatar.styles.ts +0 -1
- package/build/src/lib/UserCache.d.ts +0 -13
- package/build/src/lib/UserCache.d.ts.map +0 -1
- package/build/src/lib/UserCache.js +0 -30
- package/build/src/lib/UserCache.js.map +0 -1
- package/src/lib/UserCache.ts +0 -33
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CertificateAdd.element.d.ts","sourceRoot":"","sources":["../../../../src/elements/http/CertificateAdd.element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAQ,OAAO,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAG9D,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,8CAA8C,CAAA;AAGhG,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAGzC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,4DAA4D,CAAA;AAKjH,OAAO,kDAAkD,CAAA;AACzD,OAAO,sDAAsD,CAAA;AAC7D,OAAO,6CAA6C,CAAA;AACpD,OAAO,mCAAmC,CAAA;AAC1C,OAAO,qCAAqC,CAAA;AAC5C,OAAO,2CAA2C,CAAA;AAClD,OAAO,2BAA2B,CAAA;AAClC,OAAO,kCAAkC,CAAA;AAEzC,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,WAAW,CAAA;CACtB;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU;IACpD,WAAoB,MAAM,IAAI,SAAS,EAAE,CAExC;IAED;;;OAGG;IACyB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAQ;IAExE;;;OAGG;IACyB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAE/D;;;OAGG;IACyB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAE9D;;OAEG;IACM,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAA;IAErC,QAAQ,CAAC,eAAe,EAAE,eAAe,GAAG,SAAS,CAAA;IAErD,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,CAAA;IAEtD;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IAElC,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,2BAA2B,IAAI,OAAO,CAEzC;IAED,SAAS,CAAC,mBAAmB,CAAC,CAAC,EAAE,WAAW,CAAC,+BAA+B,CAAC,GAAG,IAAI;IAWpF,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAK1C,SAAS,CAAC,+BAA+B,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAKzD,SAAS,CAAC,uBAAuB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAKjD,SAAS,CAAC,uBAAuB,IAAI,IAAI;IAIzC,SAAS,CAAC,eAAe,IAAI,IAAI;IAI3B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CtC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCpC,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO;IAKtD,SAAS,CAAC,mBAAmB,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAWjD,SAAS,CAAC,mBAAmB,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAWjD,SAAS,CAAC,kBAAkB,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAUhD,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAgBtC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhF,SAAS,CAAC,YAAY,IAAI,IAAI;IAI9B,SAAS,CAAC,YAAY,IAAI,IAAI;IAIxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"CertificateAdd.element.d.ts","sourceRoot":"","sources":["../../../../src/elements/http/CertificateAdd.element.ts"],"names":[],"mappings":"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"}
|
|
@@ -293,14 +293,11 @@ let CertificateAdd = (() => {
|
|
|
293
293
|
if (invalid) {
|
|
294
294
|
return;
|
|
295
295
|
}
|
|
296
|
-
const { certificateFile, certificateName, certificatePassword, keyFile, keyPassword,
|
|
297
|
-
if (!space) {
|
|
298
|
-
throw new Error(`The workspace key is not set on the certificate import element.`);
|
|
299
|
-
}
|
|
296
|
+
const { certificateFile, certificateName, certificatePassword, keyFile, keyPassword, folder } = this;
|
|
300
297
|
const cert = this.importType === 'p12'
|
|
301
298
|
? Certificate.fromP12(certificateFile?.contents, certificateName, certificatePassword)
|
|
302
299
|
: Certificate.fromPem(certificateFile?.contents, keyFile?.contents, certificateName, keyPassword);
|
|
303
|
-
const file = CertificateFile.fromCertificate(cert
|
|
300
|
+
const file = CertificateFile.fromCertificate(cert);
|
|
304
301
|
await Events.Store.File.create(file.toJSON(), cert.toJSON(), { parent: folder }, this);
|
|
305
302
|
this.handleCancel();
|
|
306
303
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CertificateAdd.element.js","sourceRoot":"","sources":["../../../../src/elements/http/CertificateAdd.element.ts"],"names":[],"mappings":"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","sourcesContent":["import { CSSResult, html, nothing, TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { live } from 'lit/directives/live.js'\nimport { Certificate, type CertificateType } from '@api-client/core/models/ClientCertificate.js'\nimport { CertificateFile } from '@api-client/core/models/CertificateFile.js'\nimport { Events } from '../../events/Events.js'\nimport ApiElement from '../ApiElement.js'\nimport styles from './CertificateAdd.styles.js'\nimport { getFileName } from '../../lib/files/Utils.js'\nimport type { ISegmentedButtonSelectionDetail } from '../../md/segmented-button/internals/SegmentedButtonsSet.js'\nimport type SegmentedButton from '../../md/segmented-button/internals/SegmentedButton.js'\nimport type Input from '../../md/input/Input.js'\n// import type { IFileFilter, IOpenFileDialogInit } from '../../bindings/base/FileBindings.js'\nimport { SnackNotifications } from '../../md/notification/SnackNotifications.js'\nimport '../../md/segmented-button/ui-segmented-button.js'\nimport '../../md/segmented-button/ui-segmented-button-set.js'\nimport '../../md/text-field/ui-filled-text-field.js'\nimport '../../md/button/ui-text-button.js'\nimport '../../md/button/ui-filled-button.js'\nimport '../../md/button/ui-filled-tonal-button.js'\nimport '../../md/icons/ui-icon.js'\nimport '../../md/progress/ui-progress.js'\n\ninterface CertificateInfo {\n fileName: string\n contents: ArrayBuffer\n}\n\n/**\n * An element that renders a certificate import UI.\n *\n * Notes for implementation:\n * - `p12` is a single file, may have a passphrase\n * - `pem` is 2 files: the certificate and the key\n * - `pem` may have a `passphrase` on the key but not on the certificate.\n */\nexport default class CertificateAdd extends ApiElement {\n static override get styles(): CSSResult[] {\n return styles\n }\n\n /**\n * The type of the certificate to import.\n * @attribute\n */\n @property({ type: String }) accessor importType: CertificateType = 'pem'\n\n /**\n * The parent folder where to insert the imported certificate.\n * @attribute\n */\n @property({ type: String }) accessor folder: string | undefined\n\n /**\n * The current workspace for the file.\n * @attribute\n */\n @property({ type: String }) accessor space: string | undefined\n\n /**\n * When an IO operation is in progress.\n */\n @state() accessor working: boolean | undefined\n\n @state() accessor certificateFile: CertificateInfo | undefined\n\n @state() accessor keyFile: CertificateInfo | undefined\n\n /**\n * The password for the certificate\n */\n certificatePassword?: string\n\n /**\n * The password for the key.\n */\n keyPassword?: string\n\n /**\n * The user entered certificate name.\n */\n protected certificateName?: string\n\n get hasKeyImport(): boolean {\n return this.importType === 'pem'\n }\n\n get hasCertificatePasswordInput(): boolean {\n return this.importType === 'p12'\n }\n\n protected handleViewSelection(e: CustomEvent<ISegmentedButtonSelectionDetail>): void {\n if (!e.detail.selected) {\n return\n }\n const button = e.detail.button as SegmentedButton\n const type = button.dataset.value as CertificateType | undefined\n if (type) {\n this.importType = type\n }\n }\n\n protected handleNameChange(e: Event): void {\n const input = e.target as Input\n this.certificateName = input.value\n }\n\n protected handleCertificatePasswordChange(e: Event): void {\n const input = e.target as Input\n this.certificatePassword = input.value\n }\n\n protected handleKeyPasswordChange(e: Event): void {\n const input = e.target as Input\n this.keyPassword = input.value\n }\n\n protected handleSelectCertificate(): void {\n this.selectCertificateFLow()\n }\n\n protected handleSelectKey(): void {\n this.selectKeyFLow()\n }\n\n async selectCertificateFLow(): Promise<void> {\n throw new Error(`Not yet implemented`)\n // this.working = true\n // const options: IOpenFileDialogInit = {\n // multiple: false,\n // title: 'Select a certificate file',\n // filters: [\n // {\n // description: 'Certificate files',\n // accept: {},\n // },\n // ],\n // }\n // const filters = options.filters as IFileFilter[]\n // if (this.importType === 'p12') {\n // filters[0].accept = {\n // 'application/x-pkcs12': ['.p12', '.pfx'],\n // }\n // } else {\n // filters[0].accept = {\n // 'application/x-pem-file': ['.pem', '.crt', '.cer', '.key'],\n // }\n // }\n // const pickResult = await Events.Filesystem.requestOpenFile(options, this)\n // if (!pickResult || pickResult.canceled) {\n // this.working = false\n // return\n // }\n // const [path] = pickResult.filePath as string[]\n // const readResult = await Events.Filesystem.readFile(path, { returnType: 'buffer', dispose: true }, this)\n // if (!readResult) {\n // this.working = false\n // return\n // }\n\n // const fileName = getFileName.getFileName(path)\n // this.certificateFile = {\n // fileName,\n // contents: readResult as ArrayBuffer,\n // }\n // this.working = false\n }\n\n async selectKeyFLow(): Promise<void> {\n throw new Error(`Not yet implemented`)\n // this.working = true\n // const options: IOpenFileDialogInit = {\n // multiple: false,\n // title: 'Select a key file',\n // filters: [\n // {\n // description: 'Certificate key files',\n // accept: {\n // 'application/x-pem-file': ['.pem', '.crt', '.cer', '.key'],\n // },\n // },\n // ],\n // }\n // const pickResult = await Events.Filesystem.requestOpenFile(options, this)\n // if (!pickResult || pickResult.canceled) {\n // this.working = false\n // return\n // }\n // const [path] = pickResult.filePath as string[]\n // const readResult = await Events.Filesystem.readFile(path, { returnType: 'buffer', dispose: true }, this)\n // if (!readResult) {\n // this.working = false\n // return\n // }\n\n // const fileName = getFileName.getFileName(path)\n // this.keyFile = {\n // fileName,\n // contents: readResult as ArrayBuffer,\n // }\n // this.working = false\n }\n\n protected isValidDropTarget(dt: DataTransfer): boolean {\n const types = Array.from(dt.types)\n return types.includes('Files')\n }\n\n protected handleFileDragEnter(e: DragEvent): void {\n const dt = e.dataTransfer as DataTransfer\n if (!this.isValidDropTarget(dt)) {\n return\n }\n e.preventDefault()\n dt.dropEffect = 'copy'\n const node = e.currentTarget as HTMLElement\n node.classList.add('dragover')\n }\n\n protected handleFileDragLeave(e: DragEvent): void {\n const dt = e.dataTransfer as DataTransfer\n if (!this.isValidDropTarget(dt)) {\n return\n }\n e.preventDefault()\n dt.dropEffect = 'none'\n const node = e.currentTarget as HTMLElement\n node.classList.remove('dragover')\n }\n\n protected handleFileDragOver(e: DragEvent): void {\n const dt = e.dataTransfer as DataTransfer\n if (!this.isValidDropTarget(dt)) {\n return\n }\n e.preventDefault()\n const node = e.currentTarget as HTMLElement\n node.classList.add('dragover')\n }\n\n protected handleFileDrop(e: DragEvent): void {\n const dt = e.dataTransfer as DataTransfer\n e.preventDefault()\n const node = e.currentTarget as HTMLElement\n node.classList.remove('dragover')\n const file = dt.files[0]\n if (!file) {\n return\n }\n const { kind } = node.dataset\n if (!kind) {\n return\n }\n this.processDroppedFile(file, kind as 'certificate' | 'key')\n }\n\n async processDroppedFile(file: File, kind: 'certificate' | 'key'): Promise<void> {\n this.working = true\n const buff = await file.arrayBuffer()\n const fileName = getFileName(file.name)\n if (kind === 'certificate') {\n this.certificateFile = {\n fileName,\n contents: buff,\n }\n } else if (kind === 'key') {\n this.keyFile = {\n fileName,\n contents: buff,\n }\n }\n this.working = false\n }\n\n protected handleCancel(): void {\n this.dispatchEvent(new Event('close'))\n }\n\n protected handleImport(): void {\n this.submit()\n }\n\n async submit(): Promise<void> {\n const invalid = this.reportValidity()\n if (invalid) {\n return\n }\n const { certificateFile, certificateName, certificatePassword, keyFile, keyPassword, space, folder } = this\n if (!space) {\n throw new Error(`The workspace key is not set on the certificate import element.`)\n }\n const cert =\n this.importType === 'p12'\n ? Certificate.fromP12(certificateFile?.contents as ArrayBuffer, certificateName as string, certificatePassword)\n : Certificate.fromPem(\n certificateFile?.contents as ArrayBuffer,\n keyFile?.contents as ArrayBuffer,\n certificateName as string,\n keyPassword\n )\n const file = CertificateFile.fromCertificate(cert, space)\n await Events.Store.File.create(file.toJSON(), cert.toJSON(), { parent: folder }, this)\n this.handleCancel()\n }\n\n reportValidity(): boolean {\n const inputs = Array.from((this.shadowRoot as ShadowRoot).querySelectorAll('ui-filled-text-field'))\n let invalid = false\n inputs.forEach((input) => {\n const inputResult = input.reportValidity()\n if (!inputResult) {\n invalid = true\n }\n })\n\n if (!invalid) {\n if (!this.certificateFile) {\n invalid = true\n SnackNotifications.notify(`Certificate file is required.`)\n }\n if (!invalid && this.hasKeyImport && !this.keyFile) {\n invalid = true\n SnackNotifications.notify(`The key file is required.`)\n }\n }\n return invalid\n }\n\n protected override render(): TemplateResult {\n return html`\n <div class=\"form\">\n ${this.renderProgress()} ${this.renderViewToggle()} ${this.renderNameInput()} ${this.renderCertificateFile()}\n ${this.renderCertificatePasswordInput()} ${this.renderKeyFile()} ${this.renderKeyPasswordInput()}\n ${this.renderImportButton()}\n </div>\n `\n }\n\n protected renderViewToggle(): TemplateResult {\n const { importType } = this\n return html`\n <div class=\"view-toggle\">\n <ui-segmented-button-set @select=\"${this.handleViewSelection}\">\n <ui-segmented-button\n .selected=\"${importType === 'pem'}\"\n title=\"Import a certificate in PEM format\"\n data-value=\"pem\"\n >PEM</ui-segmented-button\n >\n <ui-segmented-button\n .selected=\"${importType === 'p12'}\"\n title=\"Import a bundled PFX or PKCS12 encoded private key and certificate\"\n data-value=\"p12\"\n >PFX or PKCS12</ui-segmented-button\n >\n </ui-segmented-button-set>\n </div>\n `\n }\n\n protected renderNameInput(): TemplateResult {\n const { certificateName = '' } = this\n return html`\n <div class=\"form-input\">\n <ui-filled-text-field\n required\n name=\"name\"\n .value=\"${live(certificateName)}\"\n label=\"Certificate name\"\n @change=\"${this.handleNameChange}\"\n invalidText=\"The name is required\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n protected renderCertificateFile(): TemplateResult {\n const { certificateFile } = this\n return html`\n <div\n class=\"cert-file\"\n data-kind=\"certificate\"\n @dragenter=\"${this.handleFileDragEnter}\"\n @dragleave=\"${this.handleFileDragLeave}\"\n @dragover=\"${this.handleFileDragOver}\"\n @drop=\"${this.handleFileDrop}\"\n >\n <p class=\"body-medium\">Select or drop a certificate file here.</p>\n <ui-filled-tonal-button @click=\"${this.handleSelectCertificate}\" class=\"select-button\"\n >Select certificate file</ui-filled-tonal-button\n >\n ${certificateFile\n ? html`<span class=\"cert-info body-medium\">${certificateFile.fileName}</span>`\n : html`<span class=\"missing body-medium\"\n ><ui-icon role=\"presentation\" icon=\"warning\" class=\"missing-icon\"></ui-icon>Certificate is not\n selected</span\n >`}\n </div>\n `\n }\n\n protected renderCertificatePasswordInput(): TemplateResult | typeof nothing {\n const { certificatePassword = '' } = this\n if (!this.hasCertificatePasswordInput) {\n return nothing\n }\n return html`\n <div class=\"form-input\">\n <ui-filled-text-field\n name=\"certificatePassword\"\n type=\"password\"\n .value=\"${live(certificatePassword)}\"\n label=\"Certificate password\"\n @change=\"${this.handleCertificatePasswordChange}\"\n supportingText=\"Optional password for the certificate\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n protected renderKeyFile(): TemplateResult | typeof nothing {\n if (!this.hasKeyImport) {\n return nothing\n }\n const { keyFile } = this\n return html`\n <div\n class=\"cert-file\"\n data-kind=\"key\"\n @dragenter=\"${this.handleFileDragEnter}\"\n @dragleave=\"${this.handleFileDragLeave}\"\n @dragover=\"${this.handleFileDragOver}\"\n @drop=\"${this.handleFileDrop}\"\n >\n <p class=\"body-medium\">Select or drop a key file here.</p>\n <ui-filled-tonal-button @click=\"${this.handleSelectKey}\" class=\"select-button\"\n >Select key file</ui-filled-tonal-button\n >\n ${keyFile\n ? html`<span class=\"cert-info body-medium\">${keyFile.fileName}</span>`\n : html`<span class=\"missing body-medium\"\n ><ui-icon role=\"presentation\" icon=\"warning\" class=\"missing-icon\"></ui-icon>Key is not selected</span\n >`}\n </div>\n `\n }\n\n protected renderKeyPasswordInput(): TemplateResult | typeof nothing {\n if (!this.hasKeyImport) {\n return nothing\n }\n const { keyPassword = '' } = this\n return html`\n <div class=\"form-input\">\n <ui-filled-text-field\n name=\"keyPassword\"\n type=\"password\"\n .value=\"${live(keyPassword)}\"\n label=\"Key password\"\n @change=\"${this.handleKeyPasswordChange}\"\n supportingText=\"Optional password for the key\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n protected renderImportButton(): TemplateResult {\n return html`\n <div class=\"form-action\">\n <ui-filled-button @click=\"${this.handleImport}\">Import</ui-filled-button>\n <ui-text-button @click=\"${this.handleCancel}\">Cancel</ui-text-button>\n </div>\n `\n }\n\n protected renderProgress(): TemplateResult | typeof nothing {\n if (!this.working) {\n return nothing\n }\n return html`<ui-progress indeterminate class=\"working\"></ui-progress>`\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CertificateAdd.element.js","sourceRoot":"","sources":["../../../../src/elements/http/CertificateAdd.element.ts"],"names":[],"mappings":"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","sourcesContent":["import { CSSResult, html, nothing, TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { live } from 'lit/directives/live.js'\nimport { Certificate, type CertificateType } from '@api-client/core/models/ClientCertificate.js'\nimport { CertificateFile } from '@api-client/core/models/CertificateFile.js'\nimport { Events } from '../../events/Events.js'\nimport ApiElement from '../ApiElement.js'\nimport styles from './CertificateAdd.styles.js'\nimport { getFileName } from '../../lib/files/Utils.js'\nimport type { ISegmentedButtonSelectionDetail } from '../../md/segmented-button/internals/SegmentedButtonsSet.js'\nimport type SegmentedButton from '../../md/segmented-button/internals/SegmentedButton.js'\nimport type Input from '../../md/input/Input.js'\n// import type { IFileFilter, IOpenFileDialogInit } from '../../bindings/base/FileBindings.js'\nimport { SnackNotifications } from '../../md/notification/SnackNotifications.js'\nimport '../../md/segmented-button/ui-segmented-button.js'\nimport '../../md/segmented-button/ui-segmented-button-set.js'\nimport '../../md/text-field/ui-filled-text-field.js'\nimport '../../md/button/ui-text-button.js'\nimport '../../md/button/ui-filled-button.js'\nimport '../../md/button/ui-filled-tonal-button.js'\nimport '../../md/icons/ui-icon.js'\nimport '../../md/progress/ui-progress.js'\n\ninterface CertificateInfo {\n fileName: string\n contents: ArrayBuffer\n}\n\n/**\n * An element that renders a certificate import UI.\n *\n * Notes for implementation:\n * - `p12` is a single file, may have a passphrase\n * - `pem` is 2 files: the certificate and the key\n * - `pem` may have a `passphrase` on the key but not on the certificate.\n */\nexport default class CertificateAdd extends ApiElement {\n static override get styles(): CSSResult[] {\n return styles\n }\n\n /**\n * The type of the certificate to import.\n * @attribute\n */\n @property({ type: String }) accessor importType: CertificateType = 'pem'\n\n /**\n * The parent folder where to insert the imported certificate.\n * @attribute\n */\n @property({ type: String }) accessor folder: string | undefined\n\n /**\n * The current workspace for the file.\n * @attribute\n */\n @property({ type: String }) accessor space: string | undefined\n\n /**\n * When an IO operation is in progress.\n */\n @state() accessor working: boolean | undefined\n\n @state() accessor certificateFile: CertificateInfo | undefined\n\n @state() accessor keyFile: CertificateInfo | undefined\n\n /**\n * The password for the certificate\n */\n certificatePassword?: string\n\n /**\n * The password for the key.\n */\n keyPassword?: string\n\n /**\n * The user entered certificate name.\n */\n protected certificateName?: string\n\n get hasKeyImport(): boolean {\n return this.importType === 'pem'\n }\n\n get hasCertificatePasswordInput(): boolean {\n return this.importType === 'p12'\n }\n\n protected handleViewSelection(e: CustomEvent<ISegmentedButtonSelectionDetail>): void {\n if (!e.detail.selected) {\n return\n }\n const button = e.detail.button as SegmentedButton\n const type = button.dataset.value as CertificateType | undefined\n if (type) {\n this.importType = type\n }\n }\n\n protected handleNameChange(e: Event): void {\n const input = e.target as Input\n this.certificateName = input.value\n }\n\n protected handleCertificatePasswordChange(e: Event): void {\n const input = e.target as Input\n this.certificatePassword = input.value\n }\n\n protected handleKeyPasswordChange(e: Event): void {\n const input = e.target as Input\n this.keyPassword = input.value\n }\n\n protected handleSelectCertificate(): void {\n this.selectCertificateFLow()\n }\n\n protected handleSelectKey(): void {\n this.selectKeyFLow()\n }\n\n async selectCertificateFLow(): Promise<void> {\n throw new Error(`Not yet implemented`)\n // this.working = true\n // const options: IOpenFileDialogInit = {\n // multiple: false,\n // title: 'Select a certificate file',\n // filters: [\n // {\n // description: 'Certificate files',\n // accept: {},\n // },\n // ],\n // }\n // const filters = options.filters as IFileFilter[]\n // if (this.importType === 'p12') {\n // filters[0].accept = {\n // 'application/x-pkcs12': ['.p12', '.pfx'],\n // }\n // } else {\n // filters[0].accept = {\n // 'application/x-pem-file': ['.pem', '.crt', '.cer', '.key'],\n // }\n // }\n // const pickResult = await Events.Filesystem.requestOpenFile(options, this)\n // if (!pickResult || pickResult.canceled) {\n // this.working = false\n // return\n // }\n // const [path] = pickResult.filePath as string[]\n // const readResult = await Events.Filesystem.readFile(path, { returnType: 'buffer', dispose: true }, this)\n // if (!readResult) {\n // this.working = false\n // return\n // }\n\n // const fileName = getFileName.getFileName(path)\n // this.certificateFile = {\n // fileName,\n // contents: readResult as ArrayBuffer,\n // }\n // this.working = false\n }\n\n async selectKeyFLow(): Promise<void> {\n throw new Error(`Not yet implemented`)\n // this.working = true\n // const options: IOpenFileDialogInit = {\n // multiple: false,\n // title: 'Select a key file',\n // filters: [\n // {\n // description: 'Certificate key files',\n // accept: {\n // 'application/x-pem-file': ['.pem', '.crt', '.cer', '.key'],\n // },\n // },\n // ],\n // }\n // const pickResult = await Events.Filesystem.requestOpenFile(options, this)\n // if (!pickResult || pickResult.canceled) {\n // this.working = false\n // return\n // }\n // const [path] = pickResult.filePath as string[]\n // const readResult = await Events.Filesystem.readFile(path, { returnType: 'buffer', dispose: true }, this)\n // if (!readResult) {\n // this.working = false\n // return\n // }\n\n // const fileName = getFileName.getFileName(path)\n // this.keyFile = {\n // fileName,\n // contents: readResult as ArrayBuffer,\n // }\n // this.working = false\n }\n\n protected isValidDropTarget(dt: DataTransfer): boolean {\n const types = Array.from(dt.types)\n return types.includes('Files')\n }\n\n protected handleFileDragEnter(e: DragEvent): void {\n const dt = e.dataTransfer as DataTransfer\n if (!this.isValidDropTarget(dt)) {\n return\n }\n e.preventDefault()\n dt.dropEffect = 'copy'\n const node = e.currentTarget as HTMLElement\n node.classList.add('dragover')\n }\n\n protected handleFileDragLeave(e: DragEvent): void {\n const dt = e.dataTransfer as DataTransfer\n if (!this.isValidDropTarget(dt)) {\n return\n }\n e.preventDefault()\n dt.dropEffect = 'none'\n const node = e.currentTarget as HTMLElement\n node.classList.remove('dragover')\n }\n\n protected handleFileDragOver(e: DragEvent): void {\n const dt = e.dataTransfer as DataTransfer\n if (!this.isValidDropTarget(dt)) {\n return\n }\n e.preventDefault()\n const node = e.currentTarget as HTMLElement\n node.classList.add('dragover')\n }\n\n protected handleFileDrop(e: DragEvent): void {\n const dt = e.dataTransfer as DataTransfer\n e.preventDefault()\n const node = e.currentTarget as HTMLElement\n node.classList.remove('dragover')\n const file = dt.files[0]\n if (!file) {\n return\n }\n const { kind } = node.dataset\n if (!kind) {\n return\n }\n this.processDroppedFile(file, kind as 'certificate' | 'key')\n }\n\n async processDroppedFile(file: File, kind: 'certificate' | 'key'): Promise<void> {\n this.working = true\n const buff = await file.arrayBuffer()\n const fileName = getFileName(file.name)\n if (kind === 'certificate') {\n this.certificateFile = {\n fileName,\n contents: buff,\n }\n } else if (kind === 'key') {\n this.keyFile = {\n fileName,\n contents: buff,\n }\n }\n this.working = false\n }\n\n protected handleCancel(): void {\n this.dispatchEvent(new Event('close'))\n }\n\n protected handleImport(): void {\n this.submit()\n }\n\n async submit(): Promise<void> {\n const invalid = this.reportValidity()\n if (invalid) {\n return\n }\n const { certificateFile, certificateName, certificatePassword, keyFile, keyPassword, folder } = this\n const cert =\n this.importType === 'p12'\n ? Certificate.fromP12(certificateFile?.contents as ArrayBuffer, certificateName as string, certificatePassword)\n : Certificate.fromPem(\n certificateFile?.contents as ArrayBuffer,\n keyFile?.contents as ArrayBuffer,\n certificateName as string,\n keyPassword\n )\n const file = CertificateFile.fromCertificate(cert)\n await Events.Store.File.create(file.toJSON(), cert.toJSON(), { parent: folder }, this)\n this.handleCancel()\n }\n\n reportValidity(): boolean {\n const inputs = Array.from((this.shadowRoot as ShadowRoot).querySelectorAll('ui-filled-text-field'))\n let invalid = false\n inputs.forEach((input) => {\n const inputResult = input.reportValidity()\n if (!inputResult) {\n invalid = true\n }\n })\n\n if (!invalid) {\n if (!this.certificateFile) {\n invalid = true\n SnackNotifications.notify(`Certificate file is required.`)\n }\n if (!invalid && this.hasKeyImport && !this.keyFile) {\n invalid = true\n SnackNotifications.notify(`The key file is required.`)\n }\n }\n return invalid\n }\n\n protected override render(): TemplateResult {\n return html`\n <div class=\"form\">\n ${this.renderProgress()} ${this.renderViewToggle()} ${this.renderNameInput()} ${this.renderCertificateFile()}\n ${this.renderCertificatePasswordInput()} ${this.renderKeyFile()} ${this.renderKeyPasswordInput()}\n ${this.renderImportButton()}\n </div>\n `\n }\n\n protected renderViewToggle(): TemplateResult {\n const { importType } = this\n return html`\n <div class=\"view-toggle\">\n <ui-segmented-button-set @select=\"${this.handleViewSelection}\">\n <ui-segmented-button\n .selected=\"${importType === 'pem'}\"\n title=\"Import a certificate in PEM format\"\n data-value=\"pem\"\n >PEM</ui-segmented-button\n >\n <ui-segmented-button\n .selected=\"${importType === 'p12'}\"\n title=\"Import a bundled PFX or PKCS12 encoded private key and certificate\"\n data-value=\"p12\"\n >PFX or PKCS12</ui-segmented-button\n >\n </ui-segmented-button-set>\n </div>\n `\n }\n\n protected renderNameInput(): TemplateResult {\n const { certificateName = '' } = this\n return html`\n <div class=\"form-input\">\n <ui-filled-text-field\n required\n name=\"name\"\n .value=\"${live(certificateName)}\"\n label=\"Certificate name\"\n @change=\"${this.handleNameChange}\"\n invalidText=\"The name is required\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n protected renderCertificateFile(): TemplateResult {\n const { certificateFile } = this\n return html`\n <div\n class=\"cert-file\"\n data-kind=\"certificate\"\n @dragenter=\"${this.handleFileDragEnter}\"\n @dragleave=\"${this.handleFileDragLeave}\"\n @dragover=\"${this.handleFileDragOver}\"\n @drop=\"${this.handleFileDrop}\"\n >\n <p class=\"body-medium\">Select or drop a certificate file here.</p>\n <ui-filled-tonal-button @click=\"${this.handleSelectCertificate}\" class=\"select-button\"\n >Select certificate file</ui-filled-tonal-button\n >\n ${certificateFile\n ? html`<span class=\"cert-info body-medium\">${certificateFile.fileName}</span>`\n : html`<span class=\"missing body-medium\"\n ><ui-icon role=\"presentation\" icon=\"warning\" class=\"missing-icon\"></ui-icon>Certificate is not\n selected</span\n >`}\n </div>\n `\n }\n\n protected renderCertificatePasswordInput(): TemplateResult | typeof nothing {\n const { certificatePassword = '' } = this\n if (!this.hasCertificatePasswordInput) {\n return nothing\n }\n return html`\n <div class=\"form-input\">\n <ui-filled-text-field\n name=\"certificatePassword\"\n type=\"password\"\n .value=\"${live(certificatePassword)}\"\n label=\"Certificate password\"\n @change=\"${this.handleCertificatePasswordChange}\"\n supportingText=\"Optional password for the certificate\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n protected renderKeyFile(): TemplateResult | typeof nothing {\n if (!this.hasKeyImport) {\n return nothing\n }\n const { keyFile } = this\n return html`\n <div\n class=\"cert-file\"\n data-kind=\"key\"\n @dragenter=\"${this.handleFileDragEnter}\"\n @dragleave=\"${this.handleFileDragLeave}\"\n @dragover=\"${this.handleFileDragOver}\"\n @drop=\"${this.handleFileDrop}\"\n >\n <p class=\"body-medium\">Select or drop a key file here.</p>\n <ui-filled-tonal-button @click=\"${this.handleSelectKey}\" class=\"select-button\"\n >Select key file</ui-filled-tonal-button\n >\n ${keyFile\n ? html`<span class=\"cert-info body-medium\">${keyFile.fileName}</span>`\n : html`<span class=\"missing body-medium\"\n ><ui-icon role=\"presentation\" icon=\"warning\" class=\"missing-icon\"></ui-icon>Key is not selected</span\n >`}\n </div>\n `\n }\n\n protected renderKeyPasswordInput(): TemplateResult | typeof nothing {\n if (!this.hasKeyImport) {\n return nothing\n }\n const { keyPassword = '' } = this\n return html`\n <div class=\"form-input\">\n <ui-filled-text-field\n name=\"keyPassword\"\n type=\"password\"\n .value=\"${live(keyPassword)}\"\n label=\"Key password\"\n @change=\"${this.handleKeyPasswordChange}\"\n supportingText=\"Optional password for the key\"\n ></ui-filled-text-field>\n </div>\n `\n }\n\n protected renderImportButton(): TemplateResult {\n return html`\n <div class=\"form-action\">\n <ui-filled-button @click=\"${this.handleImport}\">Import</ui-filled-button>\n <ui-text-button @click=\"${this.handleCancel}\">Cancel</ui-text-button>\n </div>\n `\n }\n\n protected renderProgress(): TemplateResult | typeof nothing {\n if (!this.working) {\n return nothing\n }\n return html`<ui-progress indeterminate class=\"working\"></ui-progress>`\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAvatar.styles.d.ts","sourceRoot":"","sources":["../../../../../src/elements/user/internals/UserAvatar.styles.ts"],"names":[],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"UserAvatar.styles.d.ts","sourceRoot":"","sources":["../../../../../src/elements/user/internals/UserAvatar.styles.ts"],"names":[],"mappings":";AAEA,wBAkHC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAvatar.styles.js","sourceRoot":"","sources":["../../../../../src/elements/user/internals/UserAvatar.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,eAAe,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"UserAvatar.styles.js","sourceRoot":"","sources":["../../../../../src/elements/user/internals/UserAvatar.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkHjB,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport default css`\n :host {\n display: inline-flex;\n outline: none;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n justify-content: center;\n height: 40px;\n width: 40px;\n\n --_focus-icon-color: var(--md-icon-button-focus-icon-color, var(--md-sys-color-on-surface-variant, #49454f));\n --_hover-icon-color: var(--md-icon-button-hover-icon-color, var(--md-sys-color-on-surface-variant, #49454f));\n --_hover-state-layer-color: var(\n --md-icon-button-hover-state-layer-color,\n var(--md-sys-color-on-surface-variant, #49454f)\n );\n --_hover-state-layer-opacity: var(--md-icon-button-hover-state-layer-opacity, 0.08);\n --_icon-color: var(--md-icon-button-icon-color, var(--md-sys-color-on-surface-variant, #49454f));\n --_pressed-icon-color: var(--md-icon-button-pressed-icon-color, var(--md-sys-color-on-surface-variant, #49454f));\n --_pressed-state-layer-color: var(\n --md-icon-button-pressed-state-layer-color,\n var(--md-sys-color-on-surface-variant, #49454f)\n );\n --_pressed-state-layer-opacity: var(--md-icon-button-pressed-state-layer-opacity, 0.12);\n --_state-layer-shape: var(--md-icon-button-state-layer-shape, var(--md-sys-shape-corner-full, 9999px));\n }\n\n .icon-button {\n background-color: rgba(0, 0, 0, 0);\n color: var(--_icon-color);\n place-items: center;\n background: none;\n border: none;\n box-sizing: border-box;\n cursor: pointer;\n display: flex;\n place-content: center;\n outline: none;\n padding: 0;\n position: relative;\n text-decoration: none;\n user-select: none;\n z-index: 0;\n flex: 1;\n border-radius: var(--_state-layer-shape);\n --md-ripple-hover-color: var(--_hover-state-layer-color);\n --md-ripple-hover-opacity: var(--_hover-state-layer-opacity);\n --md-ripple-pressed-color: var(--_pressed-state-layer-color);\n --md-ripple-pressed-opacity: var(--_pressed-state-layer-opacity);\n }\n\n .icon-button:hover {\n color: var(--_hover-icon-color);\n }\n\n .icon-button:focus {\n color: var(--_focus-icon-color);\n }\n\n .icon-button:active {\n color: var(--_pressed-icon-color);\n }\n\n md-focus-ring {\n --md-focus-ring-shape-start-start: var(--_state-layer-shape);\n --md-focus-ring-shape-start-end: var(--_state-layer-shape);\n --md-focus-ring-shape-end-end: var(--_state-layer-shape);\n --md-focus-ring-shape-end-start: var(--_state-layer-shape);\n }\n\n md-ripple {\n border-radius: var(--_state-layer-shape);\n }\n\n .icon {\n display: inline-flex;\n border-radius: var(--_state-layer-shape);\n overflow: hidden;\n }\n\n .touch {\n position: absolute;\n height: max(48px, 100%);\n width: max(48px, 100%);\n }\n\n .user-icon,\n .avatar-initials {\n background-color: var(--md-sys-color-primary-container, #9eeffe);\n color: var(--md-sys-color-on-primary-container, #001f24);\n }\n\n .avatar-initials {\n text-transform: uppercase;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .user-icon,\n .icon-button,\n .icon {\n height: inherit;\n width: inherit;\n }\n\n .avatar-background {\n fill: var(--md-sys-color-primary-container, #9eeffe);\n }\n\n .avatar-lines {\n fill: var(--md-sys-color-on-primary-container, #001f24);\n }\n`\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@api-client/ui",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.12",
|
|
4
4
|
"description": "Internal UI component library for the API Client ecosystem.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"main": "build/src/index.js",
|
|
@@ -159,7 +159,7 @@
|
|
|
159
159
|
}
|
|
160
160
|
},
|
|
161
161
|
"dependencies": {
|
|
162
|
-
"@api-client/core": "^0.
|
|
162
|
+
"@api-client/core": "^0.14.0",
|
|
163
163
|
"@api-client/graph": "^0.3.6",
|
|
164
164
|
"@api-client/json": "^0.2.0",
|
|
165
165
|
"@github/relative-time-element": "^4.4.6",
|
|
@@ -285,10 +285,7 @@ export default class CertificateAdd extends ApiElement {
|
|
|
285
285
|
if (invalid) {
|
|
286
286
|
return
|
|
287
287
|
}
|
|
288
|
-
const { certificateFile, certificateName, certificatePassword, keyFile, keyPassword,
|
|
289
|
-
if (!space) {
|
|
290
|
-
throw new Error(`The workspace key is not set on the certificate import element.`)
|
|
291
|
-
}
|
|
288
|
+
const { certificateFile, certificateName, certificatePassword, keyFile, keyPassword, folder } = this
|
|
292
289
|
const cert =
|
|
293
290
|
this.importType === 'p12'
|
|
294
291
|
? Certificate.fromP12(certificateFile?.contents as ArrayBuffer, certificateName as string, certificatePassword)
|
|
@@ -298,7 +295,7 @@ export default class CertificateAdd extends ApiElement {
|
|
|
298
295
|
certificateName as string,
|
|
299
296
|
keyPassword
|
|
300
297
|
)
|
|
301
|
-
const file = CertificateFile.fromCertificate(cert
|
|
298
|
+
const file = CertificateFile.fromCertificate(cert)
|
|
302
299
|
await Events.Store.File.create(file.toJSON(), cert.toJSON(), { parent: folder }, this)
|
|
303
300
|
this.handleCancel()
|
|
304
301
|
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { IUser } from '@api-client/core/models/store/User.js';
|
|
2
|
-
/**
|
|
3
|
-
* A class that caches user info in memory so the application reduces the number
|
|
4
|
-
* of requests to the backend requesting a user info.
|
|
5
|
-
*/
|
|
6
|
-
declare class UserCache {
|
|
7
|
-
protected cached: Map<string, IUser | undefined>;
|
|
8
|
-
getUser(organizationId: string, key: string): Promise<IUser | undefined>;
|
|
9
|
-
protected requestUser(organizationId: string, key: string): Promise<IUser | undefined>;
|
|
10
|
-
}
|
|
11
|
-
declare const instance: UserCache;
|
|
12
|
-
export default instance;
|
|
13
|
-
//# sourceMappingURL=UserCache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserCache.d.ts","sourceRoot":"","sources":["../../../src/lib/UserCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAA;AAGlE;;;GAGG;AACH,cAAM,SAAS;IACb,SAAS,CAAC,MAAM,iCAAuC;IAEjD,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;cAU9D,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;CAS7F;AAED,QAAA,MAAM,QAAQ,WAAkB,CAAA;AAChC,eAAe,QAAQ,CAAA"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Events } from '../events/Events.js';
|
|
2
|
-
/**
|
|
3
|
-
* A class that caches user info in memory so the application reduces the number
|
|
4
|
-
* of requests to the backend requesting a user info.
|
|
5
|
-
*/
|
|
6
|
-
class UserCache {
|
|
7
|
-
cached = new Map();
|
|
8
|
-
async getUser(organizationId, key) {
|
|
9
|
-
const existing = this.cached.get(key);
|
|
10
|
-
if (existing) {
|
|
11
|
-
return existing;
|
|
12
|
-
}
|
|
13
|
-
const read = await this.requestUser(organizationId, key);
|
|
14
|
-
this.cached.set(key, read);
|
|
15
|
-
return read;
|
|
16
|
-
}
|
|
17
|
-
async requestUser(organizationId, key) {
|
|
18
|
-
try {
|
|
19
|
-
const result = await Events.Store.User.read(organizationId, key);
|
|
20
|
-
return result;
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
// ....
|
|
24
|
-
}
|
|
25
|
-
return undefined;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
const instance = new UserCache();
|
|
29
|
-
export default instance;
|
|
30
|
-
//# sourceMappingURL=UserCache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserCache.js","sourceRoot":"","sources":["../../../src/lib/UserCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C;;;GAGG;AACH,MAAM,SAAS;IACH,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAA;IAEvD,KAAK,CAAC,OAAO,CAAC,cAAsB,EAAE,GAAW;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;QACxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAA;IACb,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,cAAsB,EAAE,GAAW;QAC7D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;YAChE,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;CACF;AAED,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAA;AAChC,eAAe,QAAQ,CAAA","sourcesContent":["import type { IUser } from '@api-client/core/models/store/User.js'\nimport { Events } from '../events/Events.js'\n\n/**\n * A class that caches user info in memory so the application reduces the number\n * of requests to the backend requesting a user info.\n */\nclass UserCache {\n protected cached = new Map<string, IUser | undefined>()\n\n async getUser(organizationId: string, key: string): Promise<IUser | undefined> {\n const existing = this.cached.get(key)\n if (existing) {\n return existing\n }\n const read = await this.requestUser(organizationId, key)\n this.cached.set(key, read)\n return read\n }\n\n protected async requestUser(organizationId: string, key: string): Promise<IUser | undefined> {\n try {\n const result = await Events.Store.User.read(organizationId, key)\n return result\n } catch {\n // ....\n }\n return undefined\n }\n}\n\nconst instance = new UserCache()\nexport default instance\n"]}
|
package/src/lib/UserCache.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { IUser } from '@api-client/core/models/store/User.js'
|
|
2
|
-
import { Events } from '../events/Events.js'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* A class that caches user info in memory so the application reduces the number
|
|
6
|
-
* of requests to the backend requesting a user info.
|
|
7
|
-
*/
|
|
8
|
-
class UserCache {
|
|
9
|
-
protected cached = new Map<string, IUser | undefined>()
|
|
10
|
-
|
|
11
|
-
async getUser(organizationId: string, key: string): Promise<IUser | undefined> {
|
|
12
|
-
const existing = this.cached.get(key)
|
|
13
|
-
if (existing) {
|
|
14
|
-
return existing
|
|
15
|
-
}
|
|
16
|
-
const read = await this.requestUser(organizationId, key)
|
|
17
|
-
this.cached.set(key, read)
|
|
18
|
-
return read
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
protected async requestUser(organizationId: string, key: string): Promise<IUser | undefined> {
|
|
22
|
-
try {
|
|
23
|
-
const result = await Events.Store.User.read(organizationId, key)
|
|
24
|
-
return result
|
|
25
|
-
} catch {
|
|
26
|
-
// ....
|
|
27
|
-
}
|
|
28
|
-
return undefined
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const instance = new UserCache()
|
|
33
|
-
export default instance
|