@verdocs/web-sdk 1.6.0 → 1.6.3
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/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/verdocs-auth.cjs.entry.js +13 -19
- package/dist/cjs/verdocs-auth.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-dropdown_12.cjs.entry.js +71 -53
- package/dist/cjs/verdocs-dropdown_12.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-sign.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-web-sdk.cjs.js +1 -1
- package/dist/collection/components/embeds/verdocs-auth/verdocs-auth.js +16 -22
- package/dist/collection/components/embeds/verdocs-auth/verdocs-auth.js.map +1 -1
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js.map +1 -1
- package/dist/collection/components/embeds/verdocs-view/verdocs-view.js +71 -53
- package/dist/collection/components/embeds/verdocs-view/verdocs-view.js.map +1 -1
- package/dist/collection/components/embeds/verdocs-view/verdocs-view.stories.js +2 -1
- package/dist/collection/components/embeds/verdocs-view/verdocs-view.stories.js.map +1 -1
- package/dist/components/verdocs-auth.js +14 -21
- package/dist/components/verdocs-auth.js.map +1 -1
- package/dist/components/verdocs-sign.js.map +1 -1
- package/dist/components/verdocs-view2.js +71 -53
- package/dist/components/verdocs-view2.js.map +1 -1
- package/dist/docs.json +2 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/verdocs-auth.entry.js +13 -19
- package/dist/esm/verdocs-auth.entry.js.map +1 -1
- package/dist/esm/verdocs-dropdown_12.entry.js +71 -53
- package/dist/esm/verdocs-dropdown_12.entry.js.map +1 -1
- package/dist/esm/verdocs-sign.entry.js.map +1 -1
- package/dist/esm/verdocs-web-sdk.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/loader.js.map +1 -1
- package/dist/esm-es5/verdocs-auth.entry.js +1 -1
- package/dist/esm-es5/verdocs-auth.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-dropdown_12.entry.js +2 -2
- package/dist/esm-es5/verdocs-dropdown_12.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-sign.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-web-sdk.js +1 -1
- package/dist/esm-es5/verdocs-web-sdk.js.map +1 -1
- package/dist/types/components/embeds/verdocs-auth/verdocs-auth.d.ts +0 -2
- package/dist/types/components/embeds/verdocs-view/verdocs-view.d.ts +3 -1
- package/dist/verdocs-web-sdk/p-10e49d23.entry.js.map +1 -1
- package/dist/verdocs-web-sdk/p-1dd229a2.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-1dd229a2.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-545eb938.system.entry.js.map +1 -1
- package/dist/verdocs-web-sdk/{p-ec757dab.entry.js → p-5c6bbb6c.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-5c6bbb6c.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-8f198f11.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-8f198f11.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-bb08e079.system.js +1 -1
- package/dist/verdocs-web-sdk/p-bb08e079.system.js.map +1 -1
- package/dist/verdocs-web-sdk/{p-85cd7ebf.system.entry.js → p-f3aee0fc.system.entry.js} +3 -3
- package/dist/verdocs-web-sdk/{p-ec757dab.entry.js.map → p-f3aee0fc.system.entry.js.map} +1 -1
- package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
- package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js.map +1 -1
- package/fixup-pdfjs.js +77 -0
- package/package.json +3 -3
- package/dist/verdocs-web-sdk/p-654d98ea.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-654d98ea.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-85cd7ebf.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-bdcc8115.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-bdcc8115.entry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdocs-sign.js","sourceRoot":"","sources":["../../../../src/components/embeds/verdocs-sign/verdocs-sign.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Host} from '@stencil/core';\nimport {VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {Documents} from '@verdocs/js-sdk/Documents';\nimport {getRGBA} from '@verdocs/js-sdk/Utils/Colors';\nimport {rescale} from '@verdocs/js-sdk/Utils/Fields';\nimport {Component, Prop, State, h} from '@stencil/core';\nimport {updateRecipientStatus} from '@verdocs/js-sdk/Documents/Recipients';\nimport {IPDFPageInfo, IPDFRenderEvent} from '../verdocs-view/verdocs-view';\nimport {IDocument, IDocumentField} from '@verdocs/js-sdk/Documents/Documents';\nimport {isValidEmail, isValidPhone} from '@verdocs/js-sdk/Templates/Validators';\n\n/**\n * Display a document signing experience.\n */\n@Component({\n tag: 'verdocs-sign',\n styleUrl: 'verdocs-sign.scss',\n})\nexport class VerdocsSign {\n /**\n * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.\n */\n @Prop() endpoint: VerdocsEndpoint = VerdocsEndpoint.getDefault();\n\n /**\n * If `source` is set to `verdocs-sign`, this should be set to a valid invitation code to activate a\n * signing session.\n */\n @Prop() documentid: string | null = null;\n\n /**\n * If `source` is set to `verdocs-sign`, this should be set to a valid invitation code to activate a\n * signing session.\n */\n @Prop() roleid: string | null = null;\n\n /**\n * If `source` is set to `verdocs-sign`, this should be set to a valid invitation code to activate a\n * signing session.\n */\n @Prop() invitecode: string | null = null;\n\n @State() recipient = null;\n\n @State() signerToken = null;\n @State() pdfUrl = null;\n @State() recipientIndex: number = -1;\n @State() document: IDocument | null = null;\n @State() fields: IDocumentField[] = [];\n @State() pdfPageInfo: IPDFRenderEvent;\n\n @State() hasSignature = false;\n\n @State() nextButtonLabel = 'Start';\n\n @State() focusedField = '';\n\n async componentDidLoad() {\n try {\n console.log('[SIGN] Processing invite code', this.documentid, this.roleid, this.invitecode);\n const {session, recipient, signerToken} = await Documents.getSigningSession(this.endpoint, {\n documentId: this.documentid,\n roleId: this.roleid,\n inviteCode: this.invitecode,\n });\n console.log('[SIGN] Got signing session', session);\n console.log('[SIGN] Recipient', recipient);\n this.recipient = recipient;\n this.signerToken = signerToken;\n this.endpoint.setToken(signerToken);\n\n if (this.recipient.agreed) {\n this.nextButtonLabel = 'Next';\n }\n\n const document = await Documents.getDocument(this.endpoint, this.documentid);\n this.document = document;\n console.log('[SIGN] Document', document);\n\n this.pdfUrl = `${this.endpoint.getBaseURL()}/documents/${this.documentid}/envelope_documents/${document.envelope_document_id}?file=true`;\n\n this.recipientIndex = this.document.recipients.findIndex(recipient => recipient.role_name == this.roleid);\n if (this.recipientIndex > -1) {\n console.log('Found recipient', this.document.recipients[this.recipientIndex]);\n }\n\n this.fields = this.document.fields.filter(field => field.recipient_role === this.roleid);\n console.log('Loaded fields', this.fields);\n\n // TODO: Fix service to allow this?\n // const sigs = await getSignatures();\n // console.log('sigs', sigs);\n } catch (e) {\n console.log('Error with signing session', e);\n }\n }\n\n handleClickAgree() {\n console.log('agree clicked');\n updateRecipientStatus(this.endpoint, this.documentid, this.roleid, 'update', {agreed: true})\n .then(r => {\n console.log('update result', r);\n this.nextButtonLabel = 'Next';\n this.recipient = r;\n })\n .catch(e => {\n console.log('update failure', e);\n });\n }\n\n async savePDF() {\n const fileName = `${this.document.name} - ${this.document.updated_at.split('T')[0]}.pdf`;\n const data = await Documents.getDocumentFile(this.endpoint, this.documentid, this.document.envelope_document_id);\n\n // This is better in React than doing window.href= or similar to trigger a download. For a description of the technique\n // see https://stackoverflow.com/questions/8126623/downloading-canvas-element-to-an-image\n let xhr = new XMLHttpRequest();\n xhr.responseType = 'blob';\n xhr.onload = function () {\n let a = document.createElement('a');\n a.href = window.URL.createObjectURL(xhr.response);\n a.download = fileName;\n a.style.display = 'none';\n document.body.appendChild(a);\n a.click();\n a.remove();\n };\n\n const url = `data:application/pdf;base64,${data}`;\n console.log('url', url.length, url);\n xhr.open('GET', `data:application/pdf;base64,${data}`);\n xhr.send();\n }\n\n async handleOptionSelected(e) {\n switch (e.detail.id) {\n case 'later':\n // this.router.navigate([`view/sign/${this.envelopeId}/role/${this.roleName}/saved`]);\n if (!window?.['STORYBOOK_ENV']) {\n window.alert('User intends to sign later.');\n }\n break;\n case 'claim':\n break;\n case 'decline':\n break;\n case 'print':\n break;\n case 'download':\n this.savePDF().catch(() => {});\n break;\n }\n }\n\n async handleFieldChange(field: IDocumentField, e: any, optionId?: string) {\n console.log('fieldChange', field, e.detail);\n switch (field.type) {\n case 'textbox':\n Documents.updateDocumentField(this.endpoint, this.documentid, field.name, {prepared: false, value: e.detail})\n .then(r => console.log('Update result', r))\n .catch(e => console.log('Error updating', e));\n break;\n\n case 'checkbox_group':\n Documents.updateDocumentField(this.endpoint, this.documentid, field.name, {prepared: false, value: {options: [{id: optionId, checked: e.detail}]}})\n .then(r => console.log('Update result', r))\n .catch(e => console.log('Error updating', e));\n break;\n\n case 'radio_button_group':\n const options = field.settings.options.map(option => ({id: option.id, selected: optionId === option.id}));\n Documents.updateDocumentField(this.endpoint, this.documentid, field.name, {prepared: false, value: {options}})\n .then(r => console.log('Update result', r))\n .catch(e => console.log('Error updating', e));\n break;\n\n case 'dropdown':\n Documents.updateDocumentField(this.endpoint, this.documentid, field.name, {prepared: false, value: e.detail})\n .then(r => console.log('Update result', r))\n .catch(e => console.log('Error updating', e));\n break;\n\n case 'initial':\n console.log('Got initial', e.detail);\n break;\n\n case 'signature':\n console.log('Got signature', e.detail);\n break;\n }\n }\n\n renderCheckboxGroupOption(page: IPDFPageInfo, field: IDocumentField, option: any, index: number) {\n const left = rescale(page.xRatio, option.x);\n const bottom = rescale(page.yRatio, option.y);\n\n const style = {\n left: `${left}px`,\n bottom: `${bottom}px`,\n position: 'absolute',\n transform: `scale(${page.xRatio}, ${page.yRatio})`,\n backgroundColor: getRGBA(this.recipientIndex),\n } as any;\n\n return <verdocs-field-checkbox style={style} order={index} value={option.checked} onFieldChange={e => this.handleFieldChange(field, e, option.id)} />;\n }\n\n renderRadioGroupOption(page: IPDFPageInfo, field: IDocumentField, option: any, index: number) {\n const left = rescale(page.xRatio, option.x);\n const bottom = rescale(page.yRatio, option.y);\n\n const style = {\n left: `${left}px`,\n bottom: `${bottom}px`,\n position: 'absolute',\n transform: `scale(${page.xRatio}, ${page.yRatio})`,\n backgroundColor: getRGBA(this.recipientIndex),\n } as any;\n\n return (\n <verdocs-field-radio-button\n style={style}\n order={index}\n value={option.id}\n name={field.name}\n checked={option.selected}\n onFieldChange={e => this.handleFieldChange(field, e, option.id)}\n />\n );\n }\n\n renderField(field: IDocumentField, index: number) {\n const {required = false, settings = {} as any} = field;\n const {x = 0, y = 0, base64 = '', placeholder = '', options = [], value = '', result = ''} = settings;\n\n const renderOnPage = this.pdfPageInfo.pages.find(page => page.pageNumber === field.page);\n if (!renderOnPage) {\n console.log('Unable to render invalid field', field);\n return <div class=\"invalid-field\">Invalid field.</div>;\n }\n\n const left = rescale(renderOnPage.xRatio, x);\n const bottom = rescale(renderOnPage.yRatio, y);\n\n const style = {\n left: `${left}px`,\n bottom: `${bottom}px`,\n position: 'absolute',\n transform: `scale(${renderOnPage.xRatio}, ${renderOnPage.yRatio})`,\n backgroundColor: field.settings.rgba || getRGBA(this.recipientIndex),\n } as any;\n\n if (field.settings.height) {\n style.height = `${field.settings.height}px`;\n }\n\n if (field.settings.width) {\n style.width = `${field.settings.width}px`;\n }\n\n console.log('rendering field', field.type, field);\n\n const id = `field-${field.name}`;\n switch (field.type) {\n case 'signature':\n return <verdocs-field-signature style={style} value={base64} required={required} id={id} />;\n case 'initial':\n return <verdocs-field-initial style={style} required={required} id={id} />;\n case 'textbox':\n return <verdocs-field-textbox style={style} order={index} value={result || ''} placeholder={placeholder} id={id} onFieldChange={e => this.handleFieldChange(field, e)} />;\n case 'textarea':\n return <verdocs-field-textarea style={style} placeholder={placeholder || ''} id={id} />;\n case 'date':\n return <verdocs-field-date style={style} order={index} value={result || ''} placeholder={placeholder} required={required} id={id} />;\n case 'dropdown':\n return <verdocs-field-dropdown style={style} options={options} value={value} required={required} id={id} onFieldChange={e => this.handleFieldChange(field, e)} />;\n case 'checkbox':\n return <verdocs-field-checkbox style={style} value={result || ''} id={id} />;\n case 'checkbox_group':\n return field.settings.options.map((option: any, index) => this.renderCheckboxGroupOption(renderOnPage, field, option, index));\n case 'radio_button_group':\n return field.settings.options.map((option: any, index) => this.renderRadioGroupOption(renderOnPage, field, option, index));\n case 'attachment':\n return <verdocs-field-attachment style={style} value={result || ''} id={id} />;\n case 'payment':\n return <verdocs-field-payment style={style} field={field} id={id} />;\n default:\n console.log('[SIGN] Skipping unsupported field type', field);\n }\n\n return <div style={{display: 'none'}}>Unsupported field type \"{field.type}\"</div>;\n }\n\n isFieldValid(field: IDocumentField) {\n switch (field.type) {\n case 'textbox':\n switch (field.settings?.validator || '') {\n case 'email':\n return isValidEmail(field.settings?.result || '');\n case 'phone':\n return isValidPhone(field.settings?.result || '');\n default:\n return !!field.settings?.result;\n }\n\n case 'signature':\n case 'initial':\n case 'textarea':\n case 'date':\n case 'attachment':\n return !!field.settings?.result;\n case 'dropdown':\n return !!field.settings?.value;\n case 'checkbox_group':\n const checked = (field.settings?.options?.filter(option => option.checked) || []).length;\n return checked >= (field.settings?.minimum_checked || 0) && checked <= (field.settings?.maximum_checked || 999);\n case 'radio_button_group':\n return (field.settings?.options?.filter(option => option.selected) || []).length > 0;\n // TODO\n // case 'checkbox':\n // return <verdocs-field-checkbox style={style} value={result || ''} id={id} />;\n // case 'payment':\n // return <verdocs-field-payment style={style} field={field} id={id} />;\n default:\n return false;\n }\n }\n\n handleDocumentRendered(e) {\n console.log('[SIGN] Document rendered', e.detail);\n this.pdfPageInfo = e.detail;\n }\n\n handleNext() {\n // Find and focus the next incomplete required field\n const requiredFields = this.fields.filter(field => field.required);\n console.log('required Fields', requiredFields);\n\n const focusedIndex = requiredFields.findIndex(field => field.name === this.focusedField);\n console.log('focused Index', focusedIndex);\n\n let nextFocusedIndex = focusedIndex + 1;\n if (nextFocusedIndex >= requiredFields.length) {\n nextFocusedIndex = 0;\n }\n\n const nextRequiredField = requiredFields[nextFocusedIndex];\n console.log('next required fielod', nextRequiredField);\n\n if (nextRequiredField) {\n const el = document.getElementById(`field-${nextRequiredField.name}`) as any;\n el?.focusField();\n this.focusedField = nextRequiredField.name;\n }\n }\n\n render() {\n const menuOptions = [\n {id: 'later', label: 'Finish Later'}, //\n {id: 'claim', label: 'Claim the Document', disabled: true},\n {id: 'decline', label: 'Decline to Sign'},\n {id: 'print', label: 'Print Without Signing'},\n {id: 'download', label: 'Download'},\n ];\n\n return (\n <Host class={{storybook: !!window?.['STORYBOOK_ENV'], agreed: this.recipient?.agreed}}>\n <div class=\"header\">\n <div class=\"intro\">Please review and act on these documents.</div>\n <div class=\"toolbar\">\n <div class=\"tools\">\n <verdocs-dropdown options={menuOptions} onOptionSelected={e => this.handleOptionSelected(e)} />\n\n {!this.recipient?.agreed ? (\n <div class=\"agree\">\n <div class=\"agree-checkbox\">\n <input type=\"checkbox\" value=\"None\" id=\"agree-checkbox-element\" name=\"agree\" onChange={() => this.handleClickAgree()} />\n <label htmlFor=\"agree-checkbox-element\" />\n </div>\n <span>I agree to use electronic records and signatures.</span>\n </div>\n ) : (\n <div style={{flex: '1'}} />\n )}\n <verdocs-button size=\"small\" label={this.nextButtonLabel} disabled={!this.recipient?.agreed} onClick={() => this.handleNext()} />\n </div>\n </div>\n </div>\n\n {!this.recipient?.agreed ? <div class=\"cover\" /> : <div style={{display: 'none'}} />}\n\n <div class=\"document\">\n {this.pdfUrl ? <verdocs-view source={this.pdfUrl} endpoint={this.endpoint} onDocumentRendered={e => this.handleDocumentRendered(e)} /> : <verdocs-loader />}\n {(this.pdfPageInfo?.pages || []).map(page => (\n <div class=\"page-controls\" style={{height: `${page.height}px`, width: `${page.width}px`, top: `${page.canvasTop}px`, margin: '0 auto'}}>\n {this.pdfPageInfo?.numRendered > 0 ? (\n this.fields.filter(field => field.page === page.pageNumber).map((field, index) => this.renderField(field, index))\n ) : (\n <div style={{display: 'none'}}>Waiting for PDF to render...</div>\n )}\n </div>\n ))}\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"verdocs-sign.js","sourceRoot":"","sources":["../../../../src/components/embeds/verdocs-sign/verdocs-sign.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Host} from '@stencil/core';\nimport {VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {Documents} from '@verdocs/js-sdk/Documents';\nimport {getRGBA} from '@verdocs/js-sdk/Utils/Colors';\nimport {rescale} from '@verdocs/js-sdk/Utils/Fields';\nimport {Component, Prop, State, h} from '@stencil/core';\nimport {updateRecipientStatus} from '@verdocs/js-sdk/Documents/Recipients';\nimport {IPDFPageInfo, IPDFRenderEvent} from '../verdocs-view/verdocs-view';\nimport {IDocument, IDocumentField} from '@verdocs/js-sdk/Documents/Documents';\nimport {isValidEmail, isValidPhone} from '@verdocs/js-sdk/Templates/Validators';\n\n/**\n * Display a document signing experience.\n */\n@Component({\n tag: 'verdocs-sign',\n styleUrl: 'verdocs-sign.scss',\n shadow: false,\n})\nexport class VerdocsSign {\n /**\n * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.\n */\n @Prop() endpoint: VerdocsEndpoint = VerdocsEndpoint.getDefault();\n\n /**\n * If `source` is set to `verdocs-sign`, this should be set to a valid invitation code to activate a\n * signing session.\n */\n @Prop() documentid: string | null = null;\n\n /**\n * If `source` is set to `verdocs-sign`, this should be set to a valid invitation code to activate a\n * signing session.\n */\n @Prop() roleid: string | null = null;\n\n /**\n * If `source` is set to `verdocs-sign`, this should be set to a valid invitation code to activate a\n * signing session.\n */\n @Prop() invitecode: string | null = null;\n\n @State() recipient = null;\n\n @State() signerToken = null;\n @State() pdfUrl = null;\n @State() recipientIndex: number = -1;\n @State() document: IDocument | null = null;\n @State() fields: IDocumentField[] = [];\n @State() pdfPageInfo: IPDFRenderEvent;\n\n @State() hasSignature = false;\n\n @State() nextButtonLabel = 'Start';\n\n @State() focusedField = '';\n\n async componentDidLoad() {\n try {\n console.log('[SIGN] Processing invite code', this.documentid, this.roleid, this.invitecode);\n const {session, recipient, signerToken} = await Documents.getSigningSession(this.endpoint, {\n documentId: this.documentid,\n roleId: this.roleid,\n inviteCode: this.invitecode,\n });\n console.log('[SIGN] Got signing session', session);\n console.log('[SIGN] Recipient', recipient);\n this.recipient = recipient;\n this.signerToken = signerToken;\n this.endpoint.setToken(signerToken);\n\n if (this.recipient.agreed) {\n this.nextButtonLabel = 'Next';\n }\n\n const document = await Documents.getDocument(this.endpoint, this.documentid);\n this.document = document;\n console.log('[SIGN] Document', document);\n\n this.pdfUrl = `${this.endpoint.getBaseURL()}/documents/${this.documentid}/envelope_documents/${document.envelope_document_id}?file=true`;\n\n this.recipientIndex = this.document.recipients.findIndex(recipient => recipient.role_name == this.roleid);\n if (this.recipientIndex > -1) {\n console.log('Found recipient', this.document.recipients[this.recipientIndex]);\n }\n\n this.fields = this.document.fields.filter(field => field.recipient_role === this.roleid);\n console.log('Loaded fields', this.fields);\n\n // TODO: Fix service to allow this?\n // const sigs = await getSignatures();\n // console.log('sigs', sigs);\n } catch (e) {\n console.log('Error with signing session', e);\n }\n }\n\n handleClickAgree() {\n console.log('agree clicked');\n updateRecipientStatus(this.endpoint, this.documentid, this.roleid, 'update', {agreed: true})\n .then(r => {\n console.log('update result', r);\n this.nextButtonLabel = 'Next';\n this.recipient = r;\n })\n .catch(e => {\n console.log('update failure', e);\n });\n }\n\n async savePDF() {\n const fileName = `${this.document.name} - ${this.document.updated_at.split('T')[0]}.pdf`;\n const data = await Documents.getDocumentFile(this.endpoint, this.documentid, this.document.envelope_document_id);\n\n // This is better in React than doing window.href= or similar to trigger a download. For a description of the technique\n // see https://stackoverflow.com/questions/8126623/downloading-canvas-element-to-an-image\n let xhr = new XMLHttpRequest();\n xhr.responseType = 'blob';\n xhr.onload = function () {\n let a = document.createElement('a');\n a.href = window.URL.createObjectURL(xhr.response);\n a.download = fileName;\n a.style.display = 'none';\n document.body.appendChild(a);\n a.click();\n a.remove();\n };\n\n const url = `data:application/pdf;base64,${data}`;\n console.log('url', url.length, url);\n xhr.open('GET', `data:application/pdf;base64,${data}`);\n xhr.send();\n }\n\n async handleOptionSelected(e) {\n switch (e.detail.id) {\n case 'later':\n // this.router.navigate([`view/sign/${this.envelopeId}/role/${this.roleName}/saved`]);\n if (!window?.['STORYBOOK_ENV']) {\n window.alert('User intends to sign later.');\n }\n break;\n case 'claim':\n break;\n case 'decline':\n break;\n case 'print':\n break;\n case 'download':\n this.savePDF().catch(() => {});\n break;\n }\n }\n\n async handleFieldChange(field: IDocumentField, e: any, optionId?: string) {\n console.log('fieldChange', field, e.detail);\n switch (field.type) {\n case 'textbox':\n Documents.updateDocumentField(this.endpoint, this.documentid, field.name, {prepared: false, value: e.detail})\n .then(r => console.log('Update result', r))\n .catch(e => console.log('Error updating', e));\n break;\n\n case 'checkbox_group':\n Documents.updateDocumentField(this.endpoint, this.documentid, field.name, {prepared: false, value: {options: [{id: optionId, checked: e.detail}]}})\n .then(r => console.log('Update result', r))\n .catch(e => console.log('Error updating', e));\n break;\n\n case 'radio_button_group':\n const options = field.settings.options.map(option => ({id: option.id, selected: optionId === option.id}));\n Documents.updateDocumentField(this.endpoint, this.documentid, field.name, {prepared: false, value: {options}})\n .then(r => console.log('Update result', r))\n .catch(e => console.log('Error updating', e));\n break;\n\n case 'dropdown':\n Documents.updateDocumentField(this.endpoint, this.documentid, field.name, {prepared: false, value: e.detail})\n .then(r => console.log('Update result', r))\n .catch(e => console.log('Error updating', e));\n break;\n\n case 'initial':\n console.log('Got initial', e.detail);\n break;\n\n case 'signature':\n console.log('Got signature', e.detail);\n break;\n }\n }\n\n renderCheckboxGroupOption(page: IPDFPageInfo, field: IDocumentField, option: any, index: number) {\n const left = rescale(page.xRatio, option.x);\n const bottom = rescale(page.yRatio, option.y);\n\n const style = {\n left: `${left}px`,\n bottom: `${bottom}px`,\n position: 'absolute',\n transform: `scale(${page.xRatio}, ${page.yRatio})`,\n backgroundColor: getRGBA(this.recipientIndex),\n } as any;\n\n return <verdocs-field-checkbox style={style} order={index} value={option.checked} onFieldChange={e => this.handleFieldChange(field, e, option.id)} />;\n }\n\n renderRadioGroupOption(page: IPDFPageInfo, field: IDocumentField, option: any, index: number) {\n const left = rescale(page.xRatio, option.x);\n const bottom = rescale(page.yRatio, option.y);\n\n const style = {\n left: `${left}px`,\n bottom: `${bottom}px`,\n position: 'absolute',\n transform: `scale(${page.xRatio}, ${page.yRatio})`,\n backgroundColor: getRGBA(this.recipientIndex),\n } as any;\n\n return (\n <verdocs-field-radio-button\n style={style}\n order={index}\n value={option.id}\n name={field.name}\n checked={option.selected}\n onFieldChange={e => this.handleFieldChange(field, e, option.id)}\n />\n );\n }\n\n renderField(field: IDocumentField, index: number) {\n const {required = false, settings = {} as any} = field;\n const {x = 0, y = 0, base64 = '', placeholder = '', options = [], value = '', result = ''} = settings;\n\n const renderOnPage = this.pdfPageInfo.pages.find(page => page.pageNumber === field.page);\n if (!renderOnPage) {\n console.log('Unable to render invalid field', field);\n return <div class=\"invalid-field\">Invalid field.</div>;\n }\n\n const left = rescale(renderOnPage.xRatio, x);\n const bottom = rescale(renderOnPage.yRatio, y);\n\n const style = {\n left: `${left}px`,\n bottom: `${bottom}px`,\n position: 'absolute',\n transform: `scale(${renderOnPage.xRatio}, ${renderOnPage.yRatio})`,\n backgroundColor: field.settings.rgba || getRGBA(this.recipientIndex),\n } as any;\n\n if (field.settings.height) {\n style.height = `${field.settings.height}px`;\n }\n\n if (field.settings.width) {\n style.width = `${field.settings.width}px`;\n }\n\n console.log('rendering field', field.type, field);\n\n const id = `field-${field.name}`;\n switch (field.type) {\n case 'signature':\n return <verdocs-field-signature style={style} value={base64} required={required} id={id} />;\n case 'initial':\n return <verdocs-field-initial style={style} required={required} id={id} />;\n case 'textbox':\n return <verdocs-field-textbox style={style} order={index} value={result || ''} placeholder={placeholder} id={id} onFieldChange={e => this.handleFieldChange(field, e)} />;\n case 'textarea':\n return <verdocs-field-textarea style={style} placeholder={placeholder || ''} id={id} />;\n case 'date':\n return <verdocs-field-date style={style} order={index} value={result || ''} placeholder={placeholder} required={required} id={id} />;\n case 'dropdown':\n return <verdocs-field-dropdown style={style} options={options} value={value} required={required} id={id} onFieldChange={e => this.handleFieldChange(field, e)} />;\n case 'checkbox':\n return <verdocs-field-checkbox style={style} value={result || ''} id={id} />;\n case 'checkbox_group':\n return field.settings.options.map((option: any, index) => this.renderCheckboxGroupOption(renderOnPage, field, option, index));\n case 'radio_button_group':\n return field.settings.options.map((option: any, index) => this.renderRadioGroupOption(renderOnPage, field, option, index));\n case 'attachment':\n return <verdocs-field-attachment style={style} value={result || ''} id={id} />;\n case 'payment':\n return <verdocs-field-payment style={style} field={field} id={id} />;\n default:\n console.log('[SIGN] Skipping unsupported field type', field);\n }\n\n return <div style={{display: 'none'}}>Unsupported field type \"{field.type}\"</div>;\n }\n\n isFieldValid(field: IDocumentField) {\n switch (field.type) {\n case 'textbox':\n switch (field.settings?.validator || '') {\n case 'email':\n return isValidEmail(field.settings?.result || '');\n case 'phone':\n return isValidPhone(field.settings?.result || '');\n default:\n return !!field.settings?.result;\n }\n\n case 'signature':\n case 'initial':\n case 'textarea':\n case 'date':\n case 'attachment':\n return !!field.settings?.result;\n case 'dropdown':\n return !!field.settings?.value;\n case 'checkbox_group':\n const checked = (field.settings?.options?.filter(option => option.checked) || []).length;\n return checked >= (field.settings?.minimum_checked || 0) && checked <= (field.settings?.maximum_checked || 999);\n case 'radio_button_group':\n return (field.settings?.options?.filter(option => option.selected) || []).length > 0;\n // TODO\n // case 'checkbox':\n // return <verdocs-field-checkbox style={style} value={result || ''} id={id} />;\n // case 'payment':\n // return <verdocs-field-payment style={style} field={field} id={id} />;\n default:\n return false;\n }\n }\n\n handleDocumentRendered(e) {\n console.log('[SIGN] Document rendered', e.detail);\n this.pdfPageInfo = e.detail;\n }\n\n handleNext() {\n // Find and focus the next incomplete required field\n const requiredFields = this.fields.filter(field => field.required);\n console.log('required Fields', requiredFields);\n\n const focusedIndex = requiredFields.findIndex(field => field.name === this.focusedField);\n console.log('focused Index', focusedIndex);\n\n let nextFocusedIndex = focusedIndex + 1;\n if (nextFocusedIndex >= requiredFields.length) {\n nextFocusedIndex = 0;\n }\n\n const nextRequiredField = requiredFields[nextFocusedIndex];\n console.log('next required fielod', nextRequiredField);\n\n if (nextRequiredField) {\n const el = document.getElementById(`field-${nextRequiredField.name}`) as any;\n el?.focusField();\n this.focusedField = nextRequiredField.name;\n }\n }\n\n render() {\n const menuOptions = [\n {id: 'later', label: 'Finish Later'}, //\n {id: 'claim', label: 'Claim the Document', disabled: true},\n {id: 'decline', label: 'Decline to Sign'},\n {id: 'print', label: 'Print Without Signing'},\n {id: 'download', label: 'Download'},\n ];\n\n return (\n <Host class={{storybook: !!window?.['STORYBOOK_ENV'], agreed: this.recipient?.agreed}}>\n <div class=\"header\">\n <div class=\"intro\">Please review and act on these documents.</div>\n <div class=\"toolbar\">\n <div class=\"tools\">\n <verdocs-dropdown options={menuOptions} onOptionSelected={e => this.handleOptionSelected(e)} />\n\n {!this.recipient?.agreed ? (\n <div class=\"agree\">\n <div class=\"agree-checkbox\">\n <input type=\"checkbox\" value=\"None\" id=\"agree-checkbox-element\" name=\"agree\" onChange={() => this.handleClickAgree()} />\n <label htmlFor=\"agree-checkbox-element\" />\n </div>\n <span>I agree to use electronic records and signatures.</span>\n </div>\n ) : (\n <div style={{flex: '1'}} />\n )}\n <verdocs-button size=\"small\" label={this.nextButtonLabel} disabled={!this.recipient?.agreed} onClick={() => this.handleNext()} />\n </div>\n </div>\n </div>\n\n {!this.recipient?.agreed ? <div class=\"cover\" /> : <div style={{display: 'none'}} />}\n\n <div class=\"document\">\n {this.pdfUrl ? <verdocs-view source={this.pdfUrl} endpoint={this.endpoint} onDocumentRendered={e => this.handleDocumentRendered(e)} /> : <verdocs-loader />}\n {(this.pdfPageInfo?.pages || []).map(page => (\n <div class=\"page-controls\" style={{height: `${page.height}px`, width: `${page.width}px`, top: `${page.canvasTop}px`, margin: '0 auto'}}>\n {this.pdfPageInfo?.numRendered > 0 ? (\n this.fields.filter(field => field.page === page.pageNumber).map((field, index) => this.renderField(field, index))\n ) : (\n <div style={{display: 'none'}}>Waiting for PDF to render...</div>\n )}\n </div>\n ))}\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -6,14 +6,12 @@ import { integerSequence } from '../../../utils/utils';
|
|
|
6
6
|
const CANVAS_MARGIN = 15;
|
|
7
7
|
const PDF_WORKER_URL = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${PDFJSversion}/pdf.worker.min.js`;
|
|
8
8
|
const CMAPS_URL = `https://unpkg.com/pdfjs-dist@${PDFJSversion}/cmaps/`;
|
|
9
|
-
// https://unpkg.com/pdfjs-dist@2.0.550/cmaps/78-EUC-H.bcmap
|
|
10
9
|
console.log('[VIEW] Loading PDF-JS', { PDF_WORKER_URL, CMAPS_URL });
|
|
11
|
-
// pdf.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.6.347/pdf.worker.min.js';
|
|
12
10
|
pdf.GlobalWorkerOptions.workerSrc = PDF_WORKER_URL;
|
|
13
11
|
export class VerdocsView {
|
|
14
12
|
constructor() {
|
|
15
13
|
this.numPages = 1;
|
|
16
|
-
this.
|
|
14
|
+
this.fingerprints = [];
|
|
17
15
|
/**
|
|
18
16
|
* The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.
|
|
19
17
|
*/
|
|
@@ -40,54 +38,68 @@ export class VerdocsView {
|
|
|
40
38
|
async renderPages() {
|
|
41
39
|
const pageNumbersToRender = integerSequence(1, this.numPages);
|
|
42
40
|
for await (let pageNumber of pageNumbersToRender) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const previousSibling = this.pagesRendered.filter(page => page.pageNumber < pageNumber).pop();
|
|
62
|
-
const canvasTop = ((previousSibling === null || previousSibling === void 0 ? void 0 : previousSibling.canvasBottom) || 0) + CANVAS_MARGIN;
|
|
63
|
-
const pageDetails = {
|
|
64
|
-
pageNumber,
|
|
65
|
-
width: canvasWidth,
|
|
66
|
-
height: canvasHeight,
|
|
67
|
-
originalWidth: this.isRotated(rotation) ? pageHeight : pageWidth,
|
|
68
|
-
originalHeight: this.isRotated(rotation) ? pageWidth : pageHeight,
|
|
69
|
-
xRatio: canvasWidth / pageWidth,
|
|
70
|
-
yRatio: canvasHeight / pageHeight,
|
|
71
|
-
canvasTop: canvasTop,
|
|
72
|
-
canvasLeft: CANVAS_MARGIN,
|
|
73
|
-
canvasRight: CANVAS_MARGIN + canvasWidth,
|
|
74
|
-
canvasBottom: canvasTop + canvasHeight,
|
|
75
|
-
};
|
|
76
|
-
if (this.pagesRendered[index]) {
|
|
77
|
-
this.pagesRendered[index] = pageDetails;
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
this.pagesRendered.push(pageDetails);
|
|
81
|
-
}
|
|
82
|
-
const eventData = { pages: this.pagesRendered, numPages: this.numPages, numRendered: this.pagesRendered.length, canvasContainer: this.pdfContainer };
|
|
83
|
-
this.pageRendered.emit(eventData);
|
|
84
|
-
if (pageNumber >= this.numPages) {
|
|
85
|
-
console.log('[VIEW] Done rendering');
|
|
41
|
+
try {
|
|
42
|
+
const index = pageNumber - 1;
|
|
43
|
+
console.log('[VIEW] Rendering page', pageNumber);
|
|
44
|
+
const page = await this.pdfDocument.getPage(pageNumber);
|
|
45
|
+
const [pageX0, pageY0, pageX1, pageY1] = page.view;
|
|
46
|
+
const rotation = page.rotate;
|
|
47
|
+
const viewport = page.getViewport({ scale: 1 / 0.75 });
|
|
48
|
+
// const viewport = page.getViewport({scale: 1.5});
|
|
49
|
+
const canvas = document.createElement('canvas');
|
|
50
|
+
canvas.height = viewport.height;
|
|
51
|
+
canvas.width = viewport.width;
|
|
52
|
+
const canvasContext = canvas.getContext('2d');
|
|
53
|
+
await page.render({ canvasContext, viewport });
|
|
54
|
+
this.pdfContainer.appendChild(canvas);
|
|
55
|
+
const canvasWidth = canvas.width;
|
|
56
|
+
const canvasHeight = canvas.height;
|
|
57
|
+
const pageWidth = pageX1 - pageX0;
|
|
58
|
+
const pageHeight = pageY1 - pageY0;
|
|
86
59
|
this.pagesRendered.sort((a, b) => a.pageNumber - b.pageNumber);
|
|
87
|
-
this.
|
|
60
|
+
const previousSibling = this.pagesRendered.filter(page => page.pageNumber < pageNumber).pop();
|
|
61
|
+
const canvasTop = ((previousSibling === null || previousSibling === void 0 ? void 0 : previousSibling.canvasBottom) || 0) + CANVAS_MARGIN;
|
|
62
|
+
const pageDetails = {
|
|
63
|
+
pageNumber,
|
|
64
|
+
width: canvasWidth,
|
|
65
|
+
height: canvasHeight,
|
|
66
|
+
originalWidth: this.isRotated(rotation) ? pageHeight : pageWidth,
|
|
67
|
+
originalHeight: this.isRotated(rotation) ? pageWidth : pageHeight,
|
|
68
|
+
xRatio: canvasWidth / pageWidth,
|
|
69
|
+
yRatio: canvasHeight / pageHeight,
|
|
70
|
+
canvasTop: canvasTop,
|
|
71
|
+
canvasLeft: CANVAS_MARGIN,
|
|
72
|
+
canvasRight: CANVAS_MARGIN + canvasWidth,
|
|
73
|
+
canvasBottom: canvasTop + canvasHeight,
|
|
74
|
+
};
|
|
75
|
+
if (this.pagesRendered[index]) {
|
|
76
|
+
this.pagesRendered[index] = pageDetails;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.pagesRendered.push(pageDetails);
|
|
80
|
+
}
|
|
81
|
+
const eventData = {
|
|
82
|
+
pages: this.pagesRendered,
|
|
83
|
+
numPages: this.numPages,
|
|
84
|
+
numRendered: this.pagesRendered.length,
|
|
85
|
+
canvasContainer: this.pdfContainer,
|
|
86
|
+
renderedPage: pageDetails,
|
|
87
|
+
};
|
|
88
|
+
this.pageRendered.emit(eventData);
|
|
89
|
+
if (pageNumber >= this.numPages) {
|
|
90
|
+
console.log('[VIEW] Done rendering');
|
|
91
|
+
this.pagesRendered.sort((a, b) => a.pageNumber - b.pageNumber);
|
|
92
|
+
this.documentRendered.emit(eventData);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
console.warn('[VIEW] Rendering error', e);
|
|
88
97
|
}
|
|
89
98
|
}
|
|
90
99
|
}
|
|
100
|
+
componentWillLoad() {
|
|
101
|
+
this.endpoint.loadSession();
|
|
102
|
+
}
|
|
91
103
|
componentDidLoad() {
|
|
92
104
|
this.pdfContainer = document.getElementById('verdocs-pdf-viewer-container');
|
|
93
105
|
if (this.source) {
|
|
@@ -95,31 +107,37 @@ export class VerdocsView {
|
|
|
95
107
|
}
|
|
96
108
|
}
|
|
97
109
|
onProgress(progress) {
|
|
110
|
+
console.log(`[VIEW] Progress ${Math.floor((progress.loaded / progress.total) * 100)} (${progress.loaded} / ${progress.total})`);
|
|
98
111
|
this.loadProgress = Math.floor((100 * progress.loaded) / progress.total);
|
|
99
112
|
}
|
|
100
113
|
loadAndRender(src) {
|
|
101
114
|
console.log('[VIEW] Loading', src);
|
|
102
|
-
console.log('this', this);
|
|
103
115
|
const token = this.endpoint.getToken();
|
|
104
116
|
const httpHeaders = token ? { Authorization: `Bearer ${token}` } : {};
|
|
105
117
|
const source = {
|
|
106
118
|
url: src,
|
|
107
|
-
withCredentials: true,
|
|
108
119
|
cMapUrl: CMAPS_URL,
|
|
109
120
|
cMapPacked: true,
|
|
110
|
-
verbosity: VerbosityLevel.WARNINGS,
|
|
111
121
|
httpHeaders,
|
|
122
|
+
withCredentials: true,
|
|
123
|
+
verbosity: VerbosityLevel.INFOS,
|
|
124
|
+
// TODO
|
|
125
|
+
stopAtErrors: true,
|
|
112
126
|
};
|
|
113
127
|
// @ts-ignore
|
|
114
128
|
const loadingTask = pdf.getDocument(source, null, null, this.onProgress);
|
|
115
129
|
loadingTask.onProgress = this.onProgress;
|
|
116
|
-
loadingTask.promise
|
|
130
|
+
loadingTask.promise
|
|
131
|
+
.then((pdfDocument) => {
|
|
117
132
|
this.loadProgress = 100;
|
|
118
133
|
this.numPages = pdfDocument.numPages;
|
|
119
|
-
this.
|
|
120
|
-
console.log(`[VIEW] Got PDF document
|
|
134
|
+
this.fingerprints = pdfDocument.fingerprints;
|
|
135
|
+
console.log(`[VIEW] Got PDF document fingerprints "${this.fingerprints.join(', ')}", ${this.numPages} pages`);
|
|
121
136
|
this.pdfDocument = pdfDocument;
|
|
122
137
|
this.renderPages().catch(e => console.log('Rendering error', e));
|
|
138
|
+
})
|
|
139
|
+
.catch(e => {
|
|
140
|
+
console.log('[VIEW] Loading error', e);
|
|
123
141
|
});
|
|
124
142
|
}
|
|
125
143
|
render() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdocs-view.js","sourceRoot":"","sources":["../../../../src/components/embeds/verdocs-view/verdocs-view.tsx"],"names":[],"mappings":"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","sourcesContent":["import pdf from 'pdfjs-dist';\nimport {VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {PDFDocumentProxy, VerbosityLevel, version as PDFJSversion} from 'pdfjs-dist';\nimport {Component, h, Element, Event, Prop, Watch, EventEmitter, State} from '@stencil/core';\nimport {DocumentInitParameters, OnProgressParameters} from 'pdfjs-dist/types/src/display/api';\nimport {integerSequence} from '../../../utils/utils';\n\nconst CANVAS_MARGIN = 15;\nconst PDF_WORKER_URL = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${PDFJSversion}/pdf.worker.min.js`;\nconst CMAPS_URL = `https://unpkg.com/pdfjs-dist@${PDFJSversion}/cmaps/`;\n// https://unpkg.com/pdfjs-dist@2.0.550/cmaps/78-EUC-H.bcmap\n\nconsole.log('[VIEW] Loading PDF-JS', {PDF_WORKER_URL, CMAPS_URL});\n\n// pdf.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.6.347/pdf.worker.min.js';\npdf.GlobalWorkerOptions.workerSrc = PDF_WORKER_URL;\n\nexport interface IPDFPageInfo {\n height: number;\n width: number;\n originalHeight: number;\n originalWidth: number;\n xRatio: number;\n yRatio: number;\n pageNumber: number;\n canvasTop: number;\n canvasRight: number;\n canvasLeft: number;\n canvasBottom: number;\n}\n\nexport interface IPDFRenderEvent {\n numRendered: number;\n numPages: number;\n pages: IPDFPageInfo[];\n canvasContainer: HTMLDivElement;\n}\n\n@Component({\n tag: 'verdocs-view',\n styleUrl: 'verdocs-view.scss',\n shadow: false,\n})\nexport class VerdocsView {\n @Element() component: HTMLElement;\n\n private pdfDocument: any;\n private pdfContainer: HTMLDivElement;\n private numPages = 1;\n private fingerprint = null as string | null;\n\n /**\n * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.\n */\n @Prop() endpoint: VerdocsEndpoint = VerdocsEndpoint.getDefault();\n\n /**\n * Rotate the PDF in degrees\n */\n @Prop() rotation: 0 | 90 | 180 | 270 = 0;\n\n /**\n * Src of the PDF to load and render\n */\n @Prop() source: string;\n\n /**\n * Listen for changes to src\n */\n @Watch('source')\n doSrc(newValue: string | null, oldValue: string | null): void {\n if (newValue === oldValue) {\n return;\n }\n this.loadAndRender(newValue);\n }\n\n /**\n * Fired when a page has been rendered\n */\n @Event() pageRendered: EventEmitter<IPDFRenderEvent>;\n\n /**\n * Fired when a page has been changed\n */\n @Event() pageLoaded: EventEmitter<number>;\n\n /**\n * Fired when a page has been changed\n */\n @Event() pageChange: EventEmitter<number>;\n\n /**\n * Fired when a page has been initialized\n */\n @Event() pageInit: EventEmitter<number>;\n\n /**\n * Fired when a page has been scaled\n */\n @Event() scaleChange: EventEmitter<number>;\n\n /**\n * Fired when the document has completed rendered. The event will include the rendered page count.\n */\n @Event() documentRendered: EventEmitter<IPDFRenderEvent>;\n\n @State() loadProgress = 0;\n\n pagesRendered: IPDFPageInfo[] = [];\n\n isRotated(rotation) {\n return rotation !== 0 && rotation % 180 !== 0;\n }\n\n async renderPages(): Promise<void> {\n const pageNumbersToRender = integerSequence(1, this.numPages);\n\n for await (let pageNumber of pageNumbersToRender) {\n const index = pageNumber - 1;\n\n console.log('[VIEW] Rendering page', pageNumber);\n const page = await this.pdfDocument.getPage(pageNumber);\n const [pageX0, pageY0, pageX1, pageY1] = page.view;\n const rotation = page.rotate;\n\n const viewport = page.getViewport({scale: 1 / 0.75});\n // const viewport = page.getViewport({scale: 1.5});\n const canvas = document.createElement('canvas');\n const canvasContext = canvas.getContext('2d');\n canvas.height = viewport.height;\n canvas.width = viewport.width;\n\n await page.render({canvasContext, viewport});\n this.pdfContainer.appendChild(canvas);\n\n const canvasWidth = canvas.width;\n const canvasHeight = canvas.height;\n const pageWidth = pageX1 - pageX0;\n const pageHeight = pageY1 - pageY0;\n\n this.pagesRendered.sort((a, b) => a.pageNumber - b.pageNumber);\n const previousSibling = this.pagesRendered.filter(page => page.pageNumber < pageNumber).pop();\n const canvasTop = (previousSibling?.canvasBottom || 0) + CANVAS_MARGIN;\n\n const pageDetails = {\n pageNumber,\n width: canvasWidth,\n height: canvasHeight,\n originalWidth: this.isRotated(rotation) ? pageHeight : pageWidth,\n originalHeight: this.isRotated(rotation) ? pageWidth : pageHeight,\n xRatio: canvasWidth / pageWidth,\n yRatio: canvasHeight / pageHeight,\n canvasTop: canvasTop,\n canvasLeft: CANVAS_MARGIN,\n canvasRight: CANVAS_MARGIN + canvasWidth,\n canvasBottom: canvasTop + canvasHeight,\n } as IPDFPageInfo;\n\n if (this.pagesRendered[index]) {\n this.pagesRendered[index] = pageDetails;\n } else {\n this.pagesRendered.push(pageDetails);\n }\n\n const eventData = {pages: this.pagesRendered, numPages: this.numPages, numRendered: this.pagesRendered.length, canvasContainer: this.pdfContainer} as IPDFRenderEvent;\n this.pageRendered.emit(eventData);\n\n if (pageNumber >= this.numPages) {\n console.log('[VIEW] Done rendering');\n this.pagesRendered.sort((a, b) => a.pageNumber - b.pageNumber);\n this.documentRendered.emit(eventData);\n }\n }\n }\n\n componentDidLoad(): void {\n this.pdfContainer = document.getElementById('verdocs-pdf-viewer-container') as HTMLDivElement;\n\n if (this.source) {\n this.loadAndRender(this.source);\n }\n }\n\n onProgress(progress: OnProgressParameters) {\n this.loadProgress = Math.floor((100 * progress.loaded) / progress.total);\n }\n\n loadAndRender(src: string): void {\n console.log('[VIEW] Loading', src);\n console.log('this', this);\n const token = this.endpoint.getToken();\n const httpHeaders = token ? {Authorization: `Bearer ${token}`} : {};\n\n const source = {\n url: src,\n withCredentials: true,\n cMapUrl: CMAPS_URL,\n cMapPacked: true,\n verbosity: VerbosityLevel.WARNINGS,\n httpHeaders,\n } as DocumentInitParameters;\n\n // @ts-ignore\n const loadingTask = pdf.getDocument(source, null, null, this.onProgress);\n loadingTask.onProgress = this.onProgress;\n loadingTask.promise.then((pdfDocument: PDFDocumentProxy) => {\n this.loadProgress = 100;\n this.numPages = pdfDocument.numPages;\n this.fingerprint = pdfDocument.fingerprints[0];\n console.log(`[VIEW] Got PDF document fingerprint \"${this.fingerprint}, ${this.numPages} pages`, pdfDocument);\n\n this.pdfDocument = pdfDocument;\n this.renderPages().catch(e => console.log('Rendering error', e));\n });\n }\n\n render() {\n return (\n <div class=\"container\">\n {this.loadProgress < 100 ? <verdocs-loader /> : <div style={{display: 'none'}} />}\n <div id=\"verdocs-pdf-viewer-container\" />\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"verdocs-view.js","sourceRoot":"","sources":["../../../../src/components/embeds/verdocs-view/verdocs-view.tsx"],"names":[],"mappings":"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","sourcesContent":["import pdf from 'pdfjs-dist';\nimport {VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {PDFDocumentProxy, VerbosityLevel, version as PDFJSversion} from 'pdfjs-dist';\nimport {Component, h, Element, Event, Prop, Watch, EventEmitter, State} from '@stencil/core';\nimport {DocumentInitParameters, OnProgressParameters} from 'pdfjs-dist/types/src/display/api';\nimport {integerSequence} from '../../../utils/utils';\n\nconst CANVAS_MARGIN = 15;\nconst PDF_WORKER_URL = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${PDFJSversion}/pdf.worker.min.js`;\nconst CMAPS_URL = `https://unpkg.com/pdfjs-dist@${PDFJSversion}/cmaps/`;\n\nconsole.log('[VIEW] Loading PDF-JS', {PDF_WORKER_URL, CMAPS_URL});\npdf.GlobalWorkerOptions.workerSrc = PDF_WORKER_URL;\n\nexport interface IPDFPageInfo {\n height: number;\n width: number;\n originalHeight: number;\n originalWidth: number;\n xRatio: number;\n yRatio: number;\n pageNumber: number;\n canvasTop: number;\n canvasRight: number;\n canvasLeft: number;\n canvasBottom: number;\n}\n\nexport interface IPDFRenderEvent {\n numRendered: number;\n numPages: number;\n pages: IPDFPageInfo[];\n canvasContainer: HTMLDivElement;\n renderedPage: IPDFPageInfo;\n}\n\n@Component({\n tag: 'verdocs-view',\n styleUrl: 'verdocs-view.scss',\n shadow: false,\n})\nexport class VerdocsView {\n @Element() component: HTMLElement;\n\n private pdfDocument: any;\n private pdfContainer: HTMLDivElement;\n private numPages = 1;\n private fingerprints = [] as string[];\n\n /**\n * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.\n */\n @Prop() endpoint: VerdocsEndpoint = VerdocsEndpoint.getDefault();\n\n /**\n * Rotate the PDF in degrees\n */\n @Prop() rotation: 0 | 90 | 180 | 270 = 0;\n\n /**\n * Src of the PDF to load and render\n */\n @Prop() source: string;\n\n /**\n * Listen for changes to src\n */\n @Watch('source')\n doSrc(newValue: string | null, oldValue: string | null): void {\n if (newValue === oldValue) {\n return;\n }\n this.loadAndRender(newValue);\n }\n\n /**\n * Fired when a page has been rendered\n */\n @Event() pageRendered: EventEmitter<IPDFRenderEvent>;\n\n /**\n * Fired when a page has been changed\n */\n @Event() pageLoaded: EventEmitter<number>;\n\n /**\n * Fired when a page has been changed\n */\n @Event() pageChange: EventEmitter<number>;\n\n /**\n * Fired when a page has been initialized\n */\n @Event() pageInit: EventEmitter<number>;\n\n /**\n * Fired when a page has been scaled\n */\n @Event() scaleChange: EventEmitter<number>;\n\n /**\n * Fired when the document has completed rendered. The event will include the rendered page count.\n */\n @Event() documentRendered: EventEmitter<IPDFRenderEvent>;\n\n @State() loadProgress = 0;\n\n pagesRendered: IPDFPageInfo[] = [];\n\n isRotated(rotation) {\n return rotation !== 0 && rotation % 180 !== 0;\n }\n\n async renderPages(): Promise<void> {\n const pageNumbersToRender = integerSequence(1, this.numPages);\n\n for await (let pageNumber of pageNumbersToRender) {\n try {\n const index = pageNumber - 1;\n\n console.log('[VIEW] Rendering page', pageNumber);\n const page = await this.pdfDocument.getPage(pageNumber);\n const [pageX0, pageY0, pageX1, pageY1] = page.view;\n const rotation = page.rotate;\n\n const viewport = page.getViewport({scale: 1 / 0.75});\n // const viewport = page.getViewport({scale: 1.5});\n const canvas = document.createElement('canvas');\n canvas.height = viewport.height;\n canvas.width = viewport.width;\n\n const canvasContext = canvas.getContext('2d');\n await page.render({canvasContext, viewport});\n this.pdfContainer.appendChild(canvas);\n\n const canvasWidth = canvas.width;\n const canvasHeight = canvas.height;\n const pageWidth = pageX1 - pageX0;\n const pageHeight = pageY1 - pageY0;\n\n this.pagesRendered.sort((a, b) => a.pageNumber - b.pageNumber);\n const previousSibling = this.pagesRendered.filter(page => page.pageNumber < pageNumber).pop();\n const canvasTop = (previousSibling?.canvasBottom || 0) + CANVAS_MARGIN;\n\n const pageDetails: IPDFPageInfo = {\n pageNumber,\n width: canvasWidth,\n height: canvasHeight,\n originalWidth: this.isRotated(rotation) ? pageHeight : pageWidth,\n originalHeight: this.isRotated(rotation) ? pageWidth : pageHeight,\n xRatio: canvasWidth / pageWidth,\n yRatio: canvasHeight / pageHeight,\n canvasTop: canvasTop,\n canvasLeft: CANVAS_MARGIN,\n canvasRight: CANVAS_MARGIN + canvasWidth,\n canvasBottom: canvasTop + canvasHeight,\n };\n\n if (this.pagesRendered[index]) {\n this.pagesRendered[index] = pageDetails;\n } else {\n this.pagesRendered.push(pageDetails);\n }\n\n const eventData: IPDFRenderEvent = {\n pages: this.pagesRendered,\n numPages: this.numPages,\n numRendered: this.pagesRendered.length,\n canvasContainer: this.pdfContainer,\n renderedPage: pageDetails,\n };\n\n this.pageRendered.emit(eventData);\n\n if (pageNumber >= this.numPages) {\n console.log('[VIEW] Done rendering');\n this.pagesRendered.sort((a, b) => a.pageNumber - b.pageNumber);\n this.documentRendered.emit(eventData);\n }\n } catch (e) {\n console.warn('[VIEW] Rendering error', e);\n }\n }\n }\n\n componentWillLoad(): void {\n this.endpoint.loadSession();\n }\n\n componentDidLoad(): void {\n this.pdfContainer = document.getElementById('verdocs-pdf-viewer-container') as HTMLDivElement;\n\n if (this.source) {\n this.loadAndRender(this.source);\n }\n }\n\n onProgress(progress: OnProgressParameters) {\n console.log(`[VIEW] Progress ${Math.floor((progress.loaded / progress.total) * 100)} (${progress.loaded} / ${progress.total})`);\n this.loadProgress = Math.floor((100 * progress.loaded) / progress.total);\n }\n\n loadAndRender(src: string): void {\n console.log('[VIEW] Loading', src);\n\n const token = this.endpoint.getToken();\n const httpHeaders = token ? {Authorization: `Bearer ${token}`} : {};\n\n const source = {\n url: src,\n cMapUrl: CMAPS_URL,\n cMapPacked: true,\n httpHeaders,\n withCredentials: true,\n verbosity: VerbosityLevel.INFOS,\n\n // TODO\n stopAtErrors: true,\n } as DocumentInitParameters;\n\n // @ts-ignore\n const loadingTask = pdf.getDocument(source, null, null, this.onProgress);\n loadingTask.onProgress = this.onProgress;\n loadingTask.promise\n .then((pdfDocument: PDFDocumentProxy) => {\n this.loadProgress = 100;\n this.numPages = pdfDocument.numPages;\n this.fingerprints = pdfDocument.fingerprints;\n console.log(`[VIEW] Got PDF document fingerprints \"${this.fingerprints.join(', ')}\", ${this.numPages} pages`);\n\n this.pdfDocument = pdfDocument;\n this.renderPages().catch(e => console.log('Rendering error', e));\n })\n .catch(e => {\n console.log('[VIEW] Loading error', e);\n });\n }\n\n render() {\n return (\n <div class=\"container\">\n {this.loadProgress < 100 ? <verdocs-loader /> : <div style={{display: 'none'}} />}\n <div id=\"verdocs-pdf-viewer-container\" />\n </div>\n );\n }\n}\n"]}
|
|
@@ -3,7 +3,8 @@ import { html } from 'lit-html';
|
|
|
3
3
|
// const templateId = "c3fc6310-bf9d-47a1-b0ad-daf2bbf657c2";
|
|
4
4
|
// const documentId = "ed117472-4d4e-4c62-9386-af047a3373a2";
|
|
5
5
|
// const pdfurl = `https://api.verdocs.com/templates/${templateId}/documents/${documentId}?file=true`;
|
|
6
|
-
const localSource = 'https://
|
|
6
|
+
const localSource = 'https://stage-api.verdocs.com/envelopes/64d7eb5a-a4fb-4044-accf-a0b9ba530e42/envelope_documents/bd92fcfa-63fd-4b94-856e-e7f4c7c0b2e1?file=true';
|
|
7
|
+
// const localSource = 'https://verdocs-public-assets.s3.amazonaws.com/i-9-paper-version.pdf';
|
|
7
8
|
// const localSource = '/i-9-paper-version.pdf';
|
|
8
9
|
export default {
|
|
9
10
|
title: 'Embeds/View',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdocs-view.stories.js","sourceRoot":"","sources":["../../../../src/components/embeds/verdocs-view/verdocs-view.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,UAAU,CAAC;AAE9B,mDAAmD;AAEnD,6DAA6D;AAC7D,6DAA6D;AAC7D,sGAAsG;AACtG,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"verdocs-view.stories.js","sourceRoot":"","sources":["../../../../src/components/embeds/verdocs-view/verdocs-view.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,UAAU,CAAC;AAE9B,mDAAmD;AAEnD,6DAA6D;AAC7D,6DAA6D;AAC7D,sGAAsG;AACtG,MAAM,WAAW,GAAG,gJAAgJ,CAAC;AACrK,8FAA8F;AAC9F,gDAAgD;AAEhD,eAAe;EACb,KAAK,EAAE,aAAa;EACpB,SAAS,EAAE,cAAc;EACzB,IAAI,EAAE;IACJ,MAAM,EAAE,WAAW;IACnB,4JAA4J;GAC7J;EACD,QAAQ,EAAE,EAAE;CACL,CAAC;AAEV,qBAAqB;AACrB,qBAAqB;AACrB,6BAA6B;AAC7B,OAAO;AACP,mBAAmB;AACnB,KAAK;AAEL,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,IAAI,CAAA,yBAAyB,MAAM,KAAK,CAAC","sourcesContent":["import {html} from 'lit-html';\nimport {Meta} from '@storybook/web-components';\n// import {action} from '@storybook/addon-actions';\n\n// const templateId = \"c3fc6310-bf9d-47a1-b0ad-daf2bbf657c2\";\n// const documentId = \"ed117472-4d4e-4c62-9386-af047a3373a2\";\n// const pdfurl = `https://api.verdocs.com/templates/${templateId}/documents/${documentId}?file=true`;\nconst localSource = 'https://stage-api.verdocs.com/envelopes/64d7eb5a-a4fb-4044-accf-a0b9ba530e42/envelope_documents/bd92fcfa-63fd-4b94-856e-e7f4c7c0b2e1?file=true';\n// const localSource = 'https://verdocs-public-assets.s3.amazonaws.com/i-9-paper-version.pdf';\n// const localSource = '/i-9-paper-version.pdf';\n\nexport default {\n title: 'Embeds/View',\n component: 'verdocs-view',\n args: {\n source: localSource,\n // source: 'https://stage-api.verdocs.com/envelopes/9f514766-e86e-46d0-9c31-a95eacc40c2e/envelope_documents/e2dea8fa-8a86-4d52-9aa9-28c263120190?file=true',\n },\n argTypes: {},\n} as Meta;\n\n// const listener = {\n// handleEvent(e) {\n// action('selected', e);\n// },\n// capture: true,\n// };\n\nexport const View = ({source}) => html`<verdocs-view .source=${source} />`;\n"]}
|
|
@@ -28,6 +28,10 @@ const VerdocsAuth$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
28
28
|
super();
|
|
29
29
|
this.__registerHost();
|
|
30
30
|
this.authenticated = createEvent(this, "authenticated", 7);
|
|
31
|
+
/**
|
|
32
|
+
* The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.
|
|
33
|
+
*/
|
|
34
|
+
this.endpoint = VerdocsEndpoint.getDefault();
|
|
31
35
|
/**
|
|
32
36
|
* Normally, if the user has a valid session, this embed will be invisible, otherwise it will display
|
|
33
37
|
* login / signup forms. If this is set to false, this embed will be invisible in both cases. Apps may
|
|
@@ -53,24 +57,14 @@ const VerdocsAuth$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
53
57
|
this.loggingIn = false;
|
|
54
58
|
this.activeSession = null;
|
|
55
59
|
this.loginError = null;
|
|
56
|
-
this._endpoint = VerdocsEndpoint.getDefault();
|
|
57
|
-
}
|
|
58
|
-
componentWillLoad() {
|
|
59
|
-
if (this.endpoint) {
|
|
60
|
-
console.log('Using user-supplied endpoint', this.endpoint);
|
|
61
|
-
this._endpoint = this.endpoint;
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
console.log('Using default endpoint', this._endpoint);
|
|
65
|
-
}
|
|
66
60
|
}
|
|
67
61
|
componentDidLoad() {
|
|
68
62
|
console.log('loaded', this);
|
|
69
|
-
this.
|
|
70
|
-
if (this.
|
|
63
|
+
this.endpoint.loadSession();
|
|
64
|
+
if (this.endpoint.session) {
|
|
71
65
|
this.isAuthenticated = true;
|
|
72
|
-
this.activeSession = this.
|
|
73
|
-
this.authenticated.emit({ authenticated: true, session: this.
|
|
66
|
+
this.activeSession = this.endpoint.session;
|
|
67
|
+
this.authenticated.emit({ authenticated: true, session: this.endpoint.session });
|
|
74
68
|
}
|
|
75
69
|
else {
|
|
76
70
|
this.authenticated.emit({ authenticated: false, session: null });
|
|
@@ -82,13 +76,13 @@ const VerdocsAuth$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
82
76
|
// }
|
|
83
77
|
handleLogin() {
|
|
84
78
|
this.loggingIn = true;
|
|
85
|
-
authenticateUser(this.
|
|
79
|
+
authenticateUser(this.endpoint, { username: this.username, password: this.password })
|
|
86
80
|
.then(r => {
|
|
87
81
|
this.loggingIn = false;
|
|
88
|
-
this.
|
|
89
|
-
this.activeSession = this.
|
|
82
|
+
this.endpoint.setToken(r.accessToken);
|
|
83
|
+
this.activeSession = this.endpoint.session;
|
|
90
84
|
this.isAuthenticated = true;
|
|
91
|
-
this.authenticated.emit({ authenticated: true, session: this.
|
|
85
|
+
this.authenticated.emit({ authenticated: true, session: this.endpoint.session });
|
|
92
86
|
})
|
|
93
87
|
.catch(e => {
|
|
94
88
|
var _a;
|
|
@@ -102,7 +96,7 @@ const VerdocsAuth$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
102
96
|
});
|
|
103
97
|
}
|
|
104
98
|
handleLogout() {
|
|
105
|
-
this.
|
|
99
|
+
this.endpoint.clearSession();
|
|
106
100
|
this.isAuthenticated = false;
|
|
107
101
|
this.authenticated.emit({ authenticated: false, session: null });
|
|
108
102
|
}
|
|
@@ -136,8 +130,7 @@ const VerdocsAuth$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
136
130
|
"password": [32],
|
|
137
131
|
"loggingIn": [32],
|
|
138
132
|
"activeSession": [32],
|
|
139
|
-
"loginError": [32]
|
|
140
|
-
"_endpoint": [32]
|
|
133
|
+
"loginError": [32]
|
|
141
134
|
}]);
|
|
142
135
|
function defineCustomElement$1() {
|
|
143
136
|
if (typeof customElements === "undefined") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"verdocs-auth.js","mappings":"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","names":["VerdocsAuth","Auth.authenticateUser"],"sources":["./node_modules/@verdocs/js-sdk/Users/Auth.js","./src/components/embeds/verdocs-auth/verdocs-auth.scss?tag=verdocs-auth","./src/components/embeds/verdocs-auth/verdocs-auth.tsx"],"sourcesContent":["/**\n * Authenticate to Verdocs via user/password authentication\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n * import {Transport} from '@verdocs/js-sdk/HTTP';\n *\n * const {accessToken} = await Auth.authenticateUser({ username: 'test@test.com', password: 'PASSWORD' });\n * Transport.setAuthToken(accessToken);\n * ```\n */\nexport var authenticateUser = function (endpoint, params) {\n return endpoint.api //\n .post('/authentication/login', params)\n .then(function (r) { return r.data; });\n};\n/**\n * Authenticate to Verdocs via client ID / Secret authentication. **NOTE: This is only suitable for\n * NodeJS server-side applications. Never expose your Client Secret in a Web or Mobile app!** Also note\n * that access tokens may be cached by server-side apps (and this is recommended) but do expire after 2\n * hours. This expiration may change based on future security needs. Application developers are encouraged\n * to check the `exp` expiration field in the response accessToken and renew tokens after they expire.\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n * import {Transport} from '@verdocs/js-sdk/HTTP';\n *\n * const {accessToken} = await Auth.authenticateApp({ client_id: 'CLIENTID', client_secret: 'SECRET' });\n * Transport.setAuthToken(accessToken);\n * ```\n */\nexport var authenticateApp = function (endpoint, params) {\n return endpoint.api //\n .post('/authentication/login_client', {}, { headers: params })\n .then(function (r) { return r.data; });\n};\n/**\n * Validate a token. Only Verdocs tokens will be accepted. Most applications can decode tokens locally,\n * because tokens will be validated when API calls are made anyway. However, high-security applications\n * may use this endpoint to check if a token has been revoked.\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n *\n * const {valid} = await Auth.validateToken({ token });\n * if (!valid) {\n * window.alert('Session invalid or expired. Please re-authenticate.');\n * }\n * ```\n */\nexport var validateToken = function (endpoint, params) {\n return endpoint.api //\n .post('/token/isValid', params)\n .then(function (r) { return r.data; });\n};\n/**\n * If called before the session expires, this will refresh the caller's session and tokens.\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n * import {Transport} from '@verdocs/js-sdk/HTTP';\n *\n * const {accessToken} = await Auth.refreshTokens();\n * Transport.setAuthToken(accessToken);\n * ```\n */\nexport var refreshTokens = function (endpoint) {\n return endpoint.api //\n .get('/token')\n .then(function (r) { return r.data; });\n};\n/**\n * Update the caller's password. To help prevent CSRF attack vectors, the user's old password and email address are required.\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n *\n * const {status, message} = await Auth.updatePassword({ email, oldPassword, newPassword });\n * if (status !== 'OK') {\n * window.alert(`Password reset error: ${message}`);\n * }\n * ```\n */\nexport var updatePassword = function (endpoint, params) {\n return endpoint.api //\n .put('/user/update_password', params)\n .then(function (r) { return r.data; });\n};\n/**\n * Update the caller's email address.\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n *\n * const {profiles} = await Auth.updateEmail({ email: newEmail });\n * ```\n */\nexport var updateEmail = function (endpoint, params) {\n return endpoint.api //\n .put('/user/update_email', params)\n .then(function (r) { return r.data; });\n};\n","@import '../../../theme.scss';\n\nverdocs-auth {\n font-family: $verdocs-primary-font;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n .login-form,\n .signup-form {\n background: $verdocs-grey-4;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n display: flex;\n padding: 20px;\n width: 300px;\n max-width: 100%;\n }\n\n .logo {\n margin: 20px 0 30px;\n width: 128px;\n max-width: 100%;\n }\n\n h3 {\n text-align: center;\n font-weight: 400;\n font-size: 16px;\n line-height: 1.75;\n margin: 0;\n }\n\n h4 {\n text-align: center;\n font-weight: 400;\n font-size: 14px;\n line-height: 1.43;\n margin: 0;\n }\n\n .status-result {\n display: none;\n\n &.debug {\n white-space: pre-wrap;\n font-size: 14px;\n background: #fff;\n padding: 10px;\n display: block;\n flex-direction: row;\n justify-content: center;\n }\n }\n\n form {\n width: 100%;\n }\n\n verdocs-text-input {\n margin-bottom: 10px;\n }\n}\n","import {Auth} from '@verdocs/js-sdk/Users';\nimport {Component, Prop, State, h, Event, EventEmitter} from '@stencil/core';\nimport {VerdocsEndpoint, TSession} from '@verdocs/js-sdk';\n\nexport interface IAuthStatus {\n authenticated: boolean;\n session: TSession;\n}\n\n/**\n * Display an authentication dialog that allows the user to login or sign up. Callbacks are provided for events that\n * occur during the process (especially successful completion). The success callback will be fired immediately if the\n * user is already authenticated with a valid session, so this component may not always display visibly.\n *\n * To simplify some types of authentication flows, a visibility flag can force this component to never display. This\n * allows you to susbcribe to notifications from the\n *\n * This embed is responsive / mobile-friendly, but the calling application should provide at least a 300px wide\n * container to allow sufficient space for the required forms.\n *\n * As noted below, the primary event is `authenticated`. This will always be fired at least once, immediately after\n * the widget is rendered and the user's status has been checked. It may be fired again as the user completes (or\n * cancels) authentication steps.\n *\n * Authentication is required to demonstrate this Element. You may do this in Storybook by using the Auth\n * embed. This Element will reuse the same session produced by logging in via that Embed.\n *\n * ```typescript\n * interface IAuthStatus {\n * // If true, the user is authenticated with a valid session\n * authenticated: boolean;\n *\n * // Details for the user's session\n * session: IActiveSession | null;\n * }\n * ```\n */\n@Component({\n tag: 'verdocs-auth',\n styleUrl: 'verdocs-auth.scss',\n})\nexport class VerdocsAuth {\n /**\n * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.\n */\n @Prop() endpoint: VerdocsEndpoint;\n\n /**\n * Normally, if the user has a valid session, this embed will be invisible, otherwise it will display\n * login / signup forms. If this is set to false, this embed will be invisible in both cases. Apps may\n * use this to verify if a user has a valid session without needing a separate call to Verdocs JS SDK.\n */\n @Prop() visible: boolean = true;\n\n /**\n * By default, a Verdocs logo will be displayed above the login/signup forms. This may be used to\n * override its source. (Alternatively, you may simply hide it via CSS overrides.) Logos should be\n * in SVG format for best results.\n */\n @Prop() logo: string = 'https://verdocs.com/assets/blue-logo.svg';\n\n /**\n * If the user is authenticated, this embed will normally render invisibly. If debug is set true, a summary\n * if the user's session details will be displayed instead. This may be useful while debugging authentication\n * flows in new applications.\n */\n @Prop() debug: boolean = false;\n\n /**\n * Event fired when session authentication process has completed. Check the event contents for completion status.\n */\n @Event({composed: true}) authenticated: EventEmitter<IAuthStatus>;\n\n @State() isAuthenticated: boolean = false;\n @State() displayMode: string = 'login';\n @State() username: string = '';\n @State() password: string = '';\n @State() loggingIn: boolean = false;\n @State() activeSession: TSession = null;\n @State() loginError: string | null = null;\n @State() _endpoint = VerdocsEndpoint.getDefault();\n\n componentWillLoad() {\n if (this.endpoint) {\n console.log('Using user-supplied endpoint', this.endpoint);\n this._endpoint = this.endpoint;\n } else {\n console.log('Using default endpoint', this._endpoint);\n }\n }\n\n componentDidLoad() {\n console.log('loaded', this);\n this._endpoint.loadSession();\n if (this._endpoint.session) {\n this.isAuthenticated = true;\n this.activeSession = this._endpoint.session;\n this.authenticated.emit({authenticated: true, session: this._endpoint.session});\n } else {\n this.authenticated.emit({authenticated: false, session: null});\n }\n }\n\n // handleSelectOption(option: IMenuOption) {\n // this.isAuthenticated = false;\n // this.authenticated.emit(option);\n // }\n\n handleLogin() {\n this.loggingIn = true;\n Auth.authenticateUser(this._endpoint, {username: this.username, password: this.password})\n .then(r => {\n this.loggingIn = false;\n this._endpoint.setToken(r.accessToken);\n this.activeSession = this._endpoint.session;\n this.isAuthenticated = true;\n this.authenticated.emit({authenticated: true, session: this._endpoint.session});\n })\n .catch(e => {\n console.log('[VERDOCS] Login error', e.response, JSON.stringify(e));\n this.loggingIn = false;\n this.activeSession = null;\n this.authenticated.emit({authenticated: false, session: null});\n\n if (e?.response?.status === 403) {\n this.loginError = 'Please check your username and password and try again.';\n }\n });\n }\n\n handleLogout() {\n this._endpoint.clearSession();\n this.isAuthenticated = false;\n this.authenticated.emit({authenticated: false, session: null});\n }\n\n handleClearError() {\n this.loginError = null;\n }\n\n render() {\n if (!this.visible) {\n return <div style={{display: 'none'}}>Verdocs Auth Placeholder</div>;\n }\n\n if (this.isAuthenticated) {\n if (this.debug) {\n return (\n <div class=\"status-result debug\">\n <verdocs-button label=\"Logout\" disabled={this.loggingIn} onPress={() => this.handleLogout()} />\n </div>\n );\n }\n\n return <div class=\"status-result\">Authenticated</div>;\n }\n\n if (this.displayMode === 'signup') {\n return (\n <div class=\"signup-form\">\n <img src={this.logo} alt=\"Verdocs Logo\" class=\"logo\" />\n\n <h3>Sign up for an account</h3>\n <h4>\n Already have an account?\n <verdocs-button label=\"Log In\" variant=\"text\" onClick={() => (this.displayMode = 'login')} disabled={this.loggingIn} />\n </h4>\n\n <form onSubmit={() => this.handleLogin()}>\n <verdocs-text-input label=\"Email\" autocomplete=\"username\" value={this.username} onFieldInput={e => (this.username = e.detail)} disabled={this.loggingIn} />\n <verdocs-text-input\n label=\"Password\"\n type=\"password\"\n autocomplete=\"current-password\"\n value={this.password}\n onFieldInput={e => (this.password = e.detail)}\n disabled={this.loggingIn}\n />\n\n <verdocs-button\n label=\"Signup\"\n disabled={this.loggingIn}\n onPress={() => this.handleLogin()}\n style={{display: 'flex', justifyContent: 'center', margin: '30px auto 0'}}\n />\n </form>\n </div>\n );\n }\n\n return (\n <div class=\"login-form\">\n <img src={this.logo} alt=\"Verdocs Logo\" class=\"logo\" />\n\n <h3>Log in to your account</h3>\n <h4>\n Don't have an account?\n <verdocs-button label=\"Sign Up\" variant=\"text\" onClick={() => (this.displayMode = 'signup')} disabled={this.loggingIn} />\n </h4>\n\n <form onSubmit={() => this.handleLogin()}>\n <verdocs-text-input label=\"Email\" autocomplete=\"username\" value={this.username} onFieldInput={e => (this.username = e.detail)} disabled={this.loggingIn} />\n <verdocs-text-input\n label=\"Password\"\n type=\"password\"\n autocomplete=\"current-password\"\n value={this.password}\n onFieldInput={e => (this.password = e.detail)}\n disabled={this.loggingIn}\n />\n\n <verdocs-button\n label=\"Forgot Your Password?\"\n variant=\"text\"\n onClick={() => (this.displayMode = 'signup')}\n disabled={this.loggingIn}\n style={{display: 'flex', justifyContent: 'center', margin: '10px auto 20px'}}\n />\n\n <verdocs-button label=\"Login\" disabled={this.loggingIn} onPress={() => this.handleLogin()} style={{display: 'flex', justifyContent: 'center', margin: '10px auto 0'}} />\n </form>\n\n {this.loginError ? <verdocs-ok-dialog open={true} heading=\"Login Error\" message={this.loginError} onClosed={() => this.handleClearError()} /> : <div />}\n </div>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"verdocs-auth.js","mappings":"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","names":["VerdocsAuth","Auth.authenticateUser"],"sources":["./node_modules/@verdocs/js-sdk/Users/Auth.js","./src/components/embeds/verdocs-auth/verdocs-auth.scss?tag=verdocs-auth","./src/components/embeds/verdocs-auth/verdocs-auth.tsx"],"sourcesContent":["/**\n * Authenticate to Verdocs via user/password authentication\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n * import {Transport} from '@verdocs/js-sdk/HTTP';\n *\n * const {accessToken} = await Auth.authenticateUser({ username: 'test@test.com', password: 'PASSWORD' });\n * Transport.setAuthToken(accessToken);\n * ```\n */\nexport var authenticateUser = function (endpoint, params) {\n return endpoint.api //\n .post('/authentication/login', params)\n .then(function (r) { return r.data; });\n};\n/**\n * Authenticate to Verdocs via client ID / Secret authentication. **NOTE: This is only suitable for\n * NodeJS server-side applications. Never expose your Client Secret in a Web or Mobile app!** Also note\n * that access tokens may be cached by server-side apps (and this is recommended) but do expire after 2\n * hours. This expiration may change based on future security needs. Application developers are encouraged\n * to check the `exp` expiration field in the response accessToken and renew tokens after they expire.\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n * import {Transport} from '@verdocs/js-sdk/HTTP';\n *\n * const {accessToken} = await Auth.authenticateApp({ client_id: 'CLIENTID', client_secret: 'SECRET' });\n * Transport.setAuthToken(accessToken);\n * ```\n */\nexport var authenticateApp = function (endpoint, params) {\n return endpoint.api //\n .post('/authentication/login_client', {}, { headers: params })\n .then(function (r) { return r.data; });\n};\n/**\n * Validate a token. Only Verdocs tokens will be accepted. Most applications can decode tokens locally,\n * because tokens will be validated when API calls are made anyway. However, high-security applications\n * may use this endpoint to check if a token has been revoked.\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n *\n * const {valid} = await Auth.validateToken({ token });\n * if (!valid) {\n * window.alert('Session invalid or expired. Please re-authenticate.');\n * }\n * ```\n */\nexport var validateToken = function (endpoint, params) {\n return endpoint.api //\n .post('/token/isValid', params)\n .then(function (r) { return r.data; });\n};\n/**\n * If called before the session expires, this will refresh the caller's session and tokens.\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n * import {Transport} from '@verdocs/js-sdk/HTTP';\n *\n * const {accessToken} = await Auth.refreshTokens();\n * Transport.setAuthToken(accessToken);\n * ```\n */\nexport var refreshTokens = function (endpoint) {\n return endpoint.api //\n .get('/token')\n .then(function (r) { return r.data; });\n};\n/**\n * Update the caller's password. To help prevent CSRF attack vectors, the user's old password and email address are required.\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n *\n * const {status, message} = await Auth.updatePassword({ email, oldPassword, newPassword });\n * if (status !== 'OK') {\n * window.alert(`Password reset error: ${message}`);\n * }\n * ```\n */\nexport var updatePassword = function (endpoint, params) {\n return endpoint.api //\n .put('/user/update_password', params)\n .then(function (r) { return r.data; });\n};\n/**\n * Update the caller's email address.\n *\n * ```typescript\n * import {Auth} from '@verdocs/js-sdk/Auth';\n *\n * const {profiles} = await Auth.updateEmail({ email: newEmail });\n * ```\n */\nexport var updateEmail = function (endpoint, params) {\n return endpoint.api //\n .put('/user/update_email', params)\n .then(function (r) { return r.data; });\n};\n","@import '../../../theme.scss';\n\nverdocs-auth {\n font-family: $verdocs-primary-font;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n .login-form,\n .signup-form {\n background: $verdocs-grey-4;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n display: flex;\n padding: 20px;\n width: 300px;\n max-width: 100%;\n }\n\n .logo {\n margin: 20px 0 30px;\n width: 128px;\n max-width: 100%;\n }\n\n h3 {\n text-align: center;\n font-weight: 400;\n font-size: 16px;\n line-height: 1.75;\n margin: 0;\n }\n\n h4 {\n text-align: center;\n font-weight: 400;\n font-size: 14px;\n line-height: 1.43;\n margin: 0;\n }\n\n .status-result {\n display: none;\n\n &.debug {\n white-space: pre-wrap;\n font-size: 14px;\n background: #fff;\n padding: 10px;\n display: block;\n flex-direction: row;\n justify-content: center;\n }\n }\n\n form {\n width: 100%;\n }\n\n verdocs-text-input {\n margin-bottom: 10px;\n }\n}\n","import {Auth} from '@verdocs/js-sdk/Users';\nimport {Component, Prop, State, h, Event, EventEmitter} from '@stencil/core';\nimport {VerdocsEndpoint, TSession} from '@verdocs/js-sdk';\n\nexport interface IAuthStatus {\n authenticated: boolean;\n session: TSession;\n}\n\n/**\n * Display an authentication dialog that allows the user to login or sign up. Callbacks are provided for events that\n * occur during the process (especially successful completion). The success callback will be fired immediately if the\n * user is already authenticated with a valid session, so this component may not always display visibly.\n *\n * To simplify some types of authentication flows, a visibility flag can force this component to never display. This\n * allows you to susbcribe to notifications from the\n *\n * This embed is responsive / mobile-friendly, but the calling application should provide at least a 300px wide\n * container to allow sufficient space for the required forms.\n *\n * As noted below, the primary event is `authenticated`. This will always be fired at least once, immediately after\n * the widget is rendered and the user's status has been checked. It may be fired again as the user completes (or\n * cancels) authentication steps.\n *\n * Authentication is required to demonstrate this Element. You may do this in Storybook by using the Auth\n * embed. This Element will reuse the same session produced by logging in via that Embed.\n *\n * ```typescript\n * interface IAuthStatus {\n * // If true, the user is authenticated with a valid session\n * authenticated: boolean;\n *\n * // Details for the user's session\n * session: IActiveSession | null;\n * }\n * ```\n */\n@Component({\n tag: 'verdocs-auth',\n styleUrl: 'verdocs-auth.scss',\n shadow: false,\n})\nexport class VerdocsAuth {\n /**\n * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.\n */\n @Prop() endpoint: VerdocsEndpoint= VerdocsEndpoint.getDefault();\n\n /**\n * Normally, if the user has a valid session, this embed will be invisible, otherwise it will display\n * login / signup forms. If this is set to false, this embed will be invisible in both cases. Apps may\n * use this to verify if a user has a valid session without needing a separate call to Verdocs JS SDK.\n */\n @Prop() visible: boolean = true;\n\n /**\n * By default, a Verdocs logo will be displayed above the login/signup forms. This may be used to\n * override its source. (Alternatively, you may simply hide it via CSS overrides.) Logos should be\n * in SVG format for best results.\n */\n @Prop() logo: string = 'https://verdocs.com/assets/blue-logo.svg';\n\n /**\n * If the user is authenticated, this embed will normally render invisibly. If debug is set true, a summary\n * if the user's session details will be displayed instead. This may be useful while debugging authentication\n * flows in new applications.\n */\n @Prop() debug: boolean = false;\n\n /**\n * Event fired when session authentication process has completed. Check the event contents for completion status.\n */\n @Event({composed: true}) authenticated: EventEmitter<IAuthStatus>;\n\n @State() isAuthenticated: boolean = false;\n @State() displayMode: string = 'login';\n @State() username: string = '';\n @State() password: string = '';\n @State() loggingIn: boolean = false;\n @State() activeSession: TSession = null;\n @State() loginError: string | null = null;\n\n componentDidLoad() {\n console.log('loaded', this);\n this.endpoint.loadSession();\n if (this.endpoint.session) {\n this.isAuthenticated = true;\n this.activeSession = this.endpoint.session;\n this.authenticated.emit({authenticated: true, session: this.endpoint.session});\n } else {\n this.authenticated.emit({authenticated: false, session: null});\n }\n }\n\n // handleSelectOption(option: IMenuOption) {\n // this.isAuthenticated = false;\n // this.authenticated.emit(option);\n // }\n\n handleLogin() {\n this.loggingIn = true;\n Auth.authenticateUser(this.endpoint, {username: this.username, password: this.password})\n .then(r => {\n this.loggingIn = false;\n this.endpoint.setToken(r.accessToken);\n this.activeSession = this.endpoint.session;\n this.isAuthenticated = true;\n this.authenticated.emit({authenticated: true, session: this.endpoint.session});\n })\n .catch(e => {\n console.log('[VERDOCS] Login error', e.response, JSON.stringify(e));\n this.loggingIn = false;\n this.activeSession = null;\n this.authenticated.emit({authenticated: false, session: null});\n\n if (e?.response?.status === 403) {\n this.loginError = 'Please check your username and password and try again.';\n }\n });\n }\n\n handleLogout() {\n this.endpoint.clearSession();\n this.isAuthenticated = false;\n this.authenticated.emit({authenticated: false, session: null});\n }\n\n handleClearError() {\n this.loginError = null;\n }\n\n render() {\n if (!this.visible) {\n return <div style={{display: 'none'}}>Verdocs Auth Placeholder</div>;\n }\n\n if (this.isAuthenticated) {\n if (this.debug) {\n return (\n <div class=\"status-result debug\">\n <verdocs-button label=\"Logout\" disabled={this.loggingIn} onPress={() => this.handleLogout()} />\n </div>\n );\n }\n\n return <div class=\"status-result\">Authenticated</div>;\n }\n\n if (this.displayMode === 'signup') {\n return (\n <div class=\"signup-form\">\n <img src={this.logo} alt=\"Verdocs Logo\" class=\"logo\" />\n\n <h3>Sign up for an account</h3>\n <h4>\n Already have an account?\n <verdocs-button label=\"Log In\" variant=\"text\" onClick={() => (this.displayMode = 'login')} disabled={this.loggingIn} />\n </h4>\n\n <form onSubmit={() => this.handleLogin()}>\n <verdocs-text-input label=\"Email\" autocomplete=\"username\" value={this.username} onFieldInput={e => (this.username = e.detail)} disabled={this.loggingIn} />\n <verdocs-text-input\n label=\"Password\"\n type=\"password\"\n autocomplete=\"current-password\"\n value={this.password}\n onFieldInput={e => (this.password = e.detail)}\n disabled={this.loggingIn}\n />\n\n <verdocs-button\n label=\"Signup\"\n disabled={this.loggingIn}\n onPress={() => this.handleLogin()}\n style={{display: 'flex', justifyContent: 'center', margin: '30px auto 0'}}\n />\n </form>\n </div>\n );\n }\n\n return (\n <div class=\"login-form\">\n <img src={this.logo} alt=\"Verdocs Logo\" class=\"logo\" />\n\n <h3>Log in to your account</h3>\n <h4>\n Don't have an account?\n <verdocs-button label=\"Sign Up\" variant=\"text\" onClick={() => (this.displayMode = 'signup')} disabled={this.loggingIn} />\n </h4>\n\n <form onSubmit={() => this.handleLogin()}>\n <verdocs-text-input label=\"Email\" autocomplete=\"username\" value={this.username} onFieldInput={e => (this.username = e.detail)} disabled={this.loggingIn} />\n <verdocs-text-input\n label=\"Password\"\n type=\"password\"\n autocomplete=\"current-password\"\n value={this.password}\n onFieldInput={e => (this.password = e.detail)}\n disabled={this.loggingIn}\n />\n\n <verdocs-button\n label=\"Forgot Your Password?\"\n variant=\"text\"\n onClick={() => (this.displayMode = 'signup')}\n disabled={this.loggingIn}\n style={{display: 'flex', justifyContent: 'center', margin: '10px auto 20px'}}\n />\n\n <verdocs-button label=\"Login\" disabled={this.loggingIn} onPress={() => this.handleLogin()} style={{display: 'flex', justifyContent: 'center', margin: '10px auto 0'}} />\n </form>\n\n {this.loginError ? <verdocs-ok-dialog open={true} heading=\"Login Error\" message={this.loginError} onClosed={() => this.handleClearError()} /> : <div />}\n </div>\n );\n }\n}\n"],"version":3}
|