@researchdatabox/redbox-core 0.0.0-bootstrap.0 → 0.0.1-beta.9018

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/dist/IntegrationAuditParams.d.ts +11 -0
  2. package/dist/IntegrationAuditParams.js +14 -0
  3. package/dist/RecordAuditParams.d.ts +2 -0
  4. package/dist/RecordAuditParams.d.ts.map +1 -1
  5. package/dist/RecordAuditParams.js +3 -1
  6. package/dist/RecordsService.d.ts +14 -0
  7. package/dist/RecordsService.d.ts.map +1 -1
  8. package/dist/StorageService.d.ts +3 -0
  9. package/dist/StorageService.d.ts.map +1 -1
  10. package/dist/config/agendaQueue.config.d.ts.map +1 -1
  11. package/dist/config/agendaQueue.config.js +10 -1
  12. package/dist/config/auth.config.d.ts.map +1 -1
  13. package/dist/config/auth.config.js +2 -1
  14. package/dist/config/brandingConfigurationDefaults.config.d.ts +3 -0
  15. package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
  16. package/dist/config/brandingConfigurationDefaults.config.js +154 -3
  17. package/dist/config/figshareDev.config.d.ts +12 -0
  18. package/dist/config/figshareDev.config.js +9 -0
  19. package/dist/config/index.d.ts +4 -16
  20. package/dist/config/index.d.ts.map +1 -1
  21. package/dist/config/index.js +4 -13
  22. package/dist/config/recordtype.config.d.ts.map +1 -1
  23. package/dist/config/recordtype.config.js +17 -1
  24. package/dist/config/routes.config.d.ts.map +1 -1
  25. package/dist/config/routes.config.js +47 -43
  26. package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
  27. package/dist/configmodels/AdminSidebarConfig.js +3 -2
  28. package/dist/configmodels/AuthorizedDomainsEmails.d.ts +48 -0
  29. package/dist/configmodels/AuthorizedDomainsEmails.d.ts.map +1 -1
  30. package/dist/configmodels/AuthorizedDomainsEmails.js +50 -2
  31. package/dist/configmodels/ConfigModels.d.ts +7 -1
  32. package/dist/configmodels/ConfigModels.d.ts.map +1 -1
  33. package/dist/configmodels/ConfigModels.js +25 -1
  34. package/dist/configmodels/DoiPublishing.d.ts +4711 -0
  35. package/dist/configmodels/DoiPublishing.js +639 -0
  36. package/dist/configmodels/FigsharePublishing.d.ts +1376 -0
  37. package/dist/configmodels/FigsharePublishing.js +630 -0
  38. package/dist/configmodels/SystemMessage.d.ts +32 -0
  39. package/dist/configmodels/SystemMessage.d.ts.map +1 -1
  40. package/dist/configmodels/SystemMessage.js +34 -2
  41. package/dist/controllers/AppConfigController.js +3 -3
  42. package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
  43. package/dist/controllers/FormVocabularyController.js +4 -1
  44. package/dist/controllers/RecordAuditController.d.ts +29 -14
  45. package/dist/controllers/RecordAuditController.d.ts.map +1 -1
  46. package/dist/controllers/RecordAuditController.js +455 -57
  47. package/dist/controllers/RecordController.d.ts +1 -16
  48. package/dist/controllers/RecordController.d.ts.map +1 -1
  49. package/dist/controllers/RecordController.js +20 -39
  50. package/dist/controllers/index.d.ts.map +1 -1
  51. package/dist/controllers/index.js +4 -1
  52. package/dist/controllers/webservice/AppConfigController.js +3 -3
  53. package/dist/controllers/webservice/IntegrationAuditController.d.ts +10 -0
  54. package/dist/controllers/webservice/IntegrationAuditController.js +98 -0
  55. package/dist/form-config/default-1.0-draft.d.ts.map +1 -1
  56. package/dist/form-config/default-1.0-draft.js +26 -2
  57. package/dist/form-config/index.d.ts.map +1 -1
  58. package/dist/form-config/index.js +1 -1
  59. package/dist/index.d.ts +4 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +12 -2
  62. package/dist/model/storage/IntegrationAuditModel.d.ts +47 -0
  63. package/dist/model/storage/IntegrationAuditModel.js +104 -0
  64. package/dist/model/storage/index.d.ts +1 -0
  65. package/dist/model/storage/index.d.ts.map +1 -1
  66. package/dist/model/storage/index.js +7 -2
  67. package/dist/services/AppConfigService.d.ts +20 -2
  68. package/dist/services/AppConfigService.d.ts.map +1 -1
  69. package/dist/services/AppConfigService.js +129 -15
  70. package/dist/services/DoiService.d.ts +19 -25
  71. package/dist/services/DoiService.d.ts.map +1 -1
  72. package/dist/services/DoiService.js +258 -408
  73. package/dist/services/FigshareService.d.ts +35 -65
  74. package/dist/services/FigshareService.d.ts.map +1 -1
  75. package/dist/services/FigshareService.js +477 -2056
  76. package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
  77. package/dist/services/FormRecordConsistencyService.js +4 -2
  78. package/dist/services/FormsService.d.ts.map +1 -1
  79. package/dist/services/FormsService.js +4 -2
  80. package/dist/services/IntegrationAuditService.d.ts +100 -0
  81. package/dist/services/IntegrationAuditService.d.ts.map +1 -1
  82. package/dist/services/IntegrationAuditService.js +561 -0
  83. package/dist/services/RecordsService.d.ts +16 -0
  84. package/dist/services/RecordsService.d.ts.map +1 -1
  85. package/dist/services/RecordsService.js +54 -2
  86. package/dist/services/SolrSearchService.d.ts +1 -0
  87. package/dist/services/SolrSearchService.d.ts.map +1 -1
  88. package/dist/services/SolrSearchService.js +14 -3
  89. package/dist/services/VocabularyService.d.ts +1 -0
  90. package/dist/services/VocabularyService.d.ts.map +1 -1
  91. package/dist/services/VocabularyService.js +4 -1
  92. package/dist/services/doi-v2/audit.d.ts +7 -0
  93. package/dist/services/doi-v2/audit.js +30 -0
  94. package/dist/services/doi-v2/bindings.d.ts +8 -0
  95. package/dist/services/doi-v2/bindings.js +85 -0
  96. package/dist/services/doi-v2/config.d.ts +7 -0
  97. package/dist/services/doi-v2/config.js +51 -0
  98. package/dist/services/doi-v2/context.d.ts +18 -0
  99. package/dist/services/doi-v2/context.js +41 -0
  100. package/dist/services/doi-v2/http.d.ts +21 -0
  101. package/dist/services/doi-v2/http.js +88 -0
  102. package/dist/services/doi-v2/payload.d.ts +4 -0
  103. package/dist/services/doi-v2/payload.js +291 -0
  104. package/dist/services/doi-v2/profiles.d.ts +5 -0
  105. package/dist/services/doi-v2/profiles.js +31 -0
  106. package/dist/services/doi-v2/runtime.d.ts +16 -0
  107. package/dist/services/doi-v2/runtime.js +173 -0
  108. package/dist/services/doi-v2/types.d.ts +49 -0
  109. package/dist/services/doi-v2/types.js +3 -0
  110. package/dist/services/figshare-v2/assets.d.ts +5 -0
  111. package/dist/services/figshare-v2/assets.js +297 -0
  112. package/dist/services/figshare-v2/bindings.d.ts +6 -0
  113. package/dist/services/figshare-v2/bindings.js +60 -0
  114. package/dist/services/figshare-v2/config.d.ts +13 -0
  115. package/dist/services/figshare-v2/config.js +81 -0
  116. package/dist/services/figshare-v2/context.d.ts +4 -0
  117. package/dist/services/figshare-v2/context.js +20 -0
  118. package/dist/services/figshare-v2/embargo.d.ts +5 -0
  119. package/dist/services/figshare-v2/embargo.js +36 -0
  120. package/dist/services/figshare-v2/http.d.ts +25 -0
  121. package/dist/services/figshare-v2/http.js +270 -0
  122. package/dist/services/figshare-v2/metadata.d.ts +6 -0
  123. package/dist/services/figshare-v2/metadata.js +221 -0
  124. package/dist/services/figshare-v2/observability.d.ts +7 -0
  125. package/dist/services/figshare-v2/observability.js +85 -0
  126. package/dist/services/figshare-v2/plan.d.ts +5 -0
  127. package/dist/services/figshare-v2/plan.js +51 -0
  128. package/dist/services/figshare-v2/publish.d.ts +5 -0
  129. package/dist/services/figshare-v2/publish.js +20 -0
  130. package/dist/services/figshare-v2/queue.d.ts +4 -0
  131. package/dist/services/figshare-v2/queue.js +11 -0
  132. package/dist/services/figshare-v2/runtime.d.ts +11 -0
  133. package/dist/services/figshare-v2/runtime.js +116 -0
  134. package/dist/services/figshare-v2/types.d.ts +194 -0
  135. package/dist/services/figshare-v2/types.js +37 -0
  136. package/dist/services/figshare-v2/workflow.d.ts +3 -0
  137. package/dist/services/figshare-v2/workflow.js +7 -0
  138. package/dist/services/figshare-v2/writeback.d.ts +5 -0
  139. package/dist/services/figshare-v2/writeback.js +45 -0
  140. package/dist/services/index.d.ts +3 -0
  141. package/dist/services/index.d.ts.map +1 -1
  142. package/dist/services/index.js +7 -2
  143. package/dist/visitor/client.visitor.d.ts +3 -0
  144. package/dist/visitor/client.visitor.d.ts.map +1 -1
  145. package/dist/visitor/client.visitor.js +8 -1
  146. package/dist/visitor/construct.visitor.d.ts +3 -0
  147. package/dist/visitor/construct.visitor.d.ts.map +1 -1
  148. package/dist/visitor/construct.visitor.js +95 -70
  149. package/dist/visitor/data-value.visitor.d.ts +3 -0
  150. package/dist/visitor/data-value.visitor.d.ts.map +1 -1
  151. package/dist/visitor/data-value.visitor.js +5 -1
  152. package/dist/visitor/json-type-def.visitor.d.ts +3 -0
  153. package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
  154. package/dist/visitor/json-type-def.visitor.js +5 -1
  155. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +3 -0
  156. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
  157. package/dist/visitor/migrate-config-v4-v5.visitor.js +77 -64
  158. package/dist/visitor/template.visitor.d.ts +3 -0
  159. package/dist/visitor/template.visitor.d.ts.map +1 -1
  160. package/dist/visitor/template.visitor.js +5 -1
  161. package/dist/visitor/validator.visitor.d.ts +3 -1
  162. package/dist/visitor/validator.visitor.d.ts.map +1 -1
  163. package/dist/visitor/validator.visitor.js +6 -1
  164. package/dist/visitor/vocab-inline.visitor.d.ts +16 -1
  165. package/dist/visitor/vocab-inline.visitor.d.ts.map +1 -1
  166. package/dist/visitor/vocab-inline.visitor.js +109 -14
  167. package/package.json +26 -14
  168. package/dist/config/datacite.config.d.ts +0 -51
  169. package/dist/config/datacite.config.d.ts.map +0 -1
  170. package/dist/config/datacite.config.js +0 -44
  171. package/dist/config/figshareAPI.config.d.ts +0 -116
  172. package/dist/config/figshareAPI.config.d.ts.map +0 -1
  173. package/dist/config/figshareAPI.config.js +0 -857
  174. package/dist/config/figshareAPIEnv.config.d.ts +0 -11
  175. package/dist/config/figshareAPIEnv.config.d.ts.map +0 -1
  176. package/dist/config/figshareAPIEnv.config.js +0 -13
  177. package/dist/config/figshareRedboxFORMapping.config.d.ts +0 -15
  178. package/dist/config/figshareRedboxFORMapping.config.d.ts.map +0 -1
  179. package/dist/config/figshareRedboxFORMapping.config.js +0 -7458
  180. package/dist/config/relatedObjectsFormDefinition.config.d.ts.map +0 -1
  181. package/dist/form-config/dataPublication-1.0-draft.d.ts.map +0 -1
  182. package/dist/form-config/dataPublication-1.0-embargoed.d.ts.map +0 -1
  183. package/dist/form-config/dataPublication-1.0-published.d.ts.map +0 -1
  184. package/dist/form-config/dataPublication-1.0-queued.d.ts.map +0 -1
  185. package/dist/form-config/dataPublication-1.0-retired.d.ts.map +0 -1
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DoiRunContextTag = exports.DoiConfigTag = void 0;
37
+ exports.makeRuntimeLayer = makeRuntimeLayer;
38
+ exports.runCreateDoiProgram = runCreateDoiProgram;
39
+ exports.runUpdateDoiProgram = runUpdateDoiProgram;
40
+ exports.runDeleteDoiProgram = runDeleteDoiProgram;
41
+ exports.runChangeDoiStateProgram = runChangeDoiStateProgram;
42
+ const effect_1 = require("effect");
43
+ const Cause = __importStar(require("effect/Cause"));
44
+ const http_1 = require("./http");
45
+ const audit_1 = require("./audit");
46
+ const IntegrationAuditModel_1 = require("../../model/storage/IntegrationAuditModel");
47
+ exports.DoiConfigTag = effect_1.Context.GenericTag('redbox/DoiConfig');
48
+ exports.DoiRunContextTag = effect_1.Context.GenericTag('redbox/DoiRunContext');
49
+ function makeRuntimeLayer(config, runContext) {
50
+ return effect_1.Layer.mergeAll(effect_1.Layer.succeed(exports.DoiConfigTag, config), effect_1.Layer.succeed(exports.DoiRunContextTag, runContext), (0, http_1.makeClientLayer)(config, runContext));
51
+ }
52
+ async function runProgram(program) {
53
+ const exit = await effect_1.Effect.runPromiseExit(program);
54
+ if (exit._tag === 'Success') {
55
+ return exit.value;
56
+ }
57
+ const failure = Cause.failureOrCause(exit.cause);
58
+ if (failure._tag === 'Left') {
59
+ throw failure.left;
60
+ }
61
+ throw Cause.squash(failure.right);
62
+ }
63
+ function buildHttpRequestSummary(requestSummary, method, path) {
64
+ return {
65
+ ...(requestSummary ?? {}),
66
+ method,
67
+ path,
68
+ };
69
+ }
70
+ function isRecord(value) {
71
+ return value != null && typeof value === 'object' && !Array.isArray(value);
72
+ }
73
+ function toResponseSummary(value) {
74
+ if (isRecord(value)) {
75
+ return value;
76
+ }
77
+ return { rawResponseBody: value };
78
+ }
79
+ function extractDoiId(responseSummary, statusCode, operationName) {
80
+ const responseData = responseSummary['data'];
81
+ if (isRecord(responseData)) {
82
+ const id = responseData['id'];
83
+ if (typeof id === 'string' && id.trim() !== '') {
84
+ return id;
85
+ }
86
+ }
87
+ if (statusCode >= 200 && statusCode < 300) {
88
+ sails.log.warn(`${operationName} returned a successful response without a DOI id.`);
89
+ sails.log.warn(responseSummary);
90
+ }
91
+ return null;
92
+ }
93
+ async function runAuditedHttpOperation(auditAction, runContext, requestSummary, parentAuditContext, successMessage, failureMessage, operation) {
94
+ const auditCtx = (0, audit_1.startDoiAudit)(parentAuditContext?.redboxOid ?? runContext.recordOid, auditAction, runContext, requestSummary ?? {}, parentAuditContext);
95
+ try {
96
+ const result = await operation();
97
+ (0, audit_1.completeDoiAudit)(auditCtx, {
98
+ message: successMessage,
99
+ httpStatusCode: result.statusCode,
100
+ requestSummary,
101
+ responseSummary: result.responseSummary,
102
+ });
103
+ return result;
104
+ }
105
+ catch (error) {
106
+ (0, audit_1.failDoiAudit)(auditCtx, error, {
107
+ message: failureMessage,
108
+ requestSummary,
109
+ httpStatusCode: error instanceof Error && 'statusCode' in error ? error.statusCode : undefined,
110
+ responseSummary: error instanceof Error && 'responseBody' in error ? error.responseBody : undefined,
111
+ });
112
+ throw error;
113
+ }
114
+ }
115
+ async function runCreateDoiProgram(config, runContext, payload, options = {}) {
116
+ return runAuditedHttpOperation(IntegrationAuditModel_1.IntegrationAuditAction.createDoiRequest, runContext, buildHttpRequestSummary(options.requestSummary, 'post', '/dois'), options.auditContext, 'DataCite create DOI request completed.', 'DataCite create DOI request failed.', async () => {
117
+ const program = effect_1.Effect.gen(function* () {
118
+ const client = yield* http_1.DoiClientTag;
119
+ const response = yield* effect_1.Effect.promise(() => client.createDoi(payload));
120
+ const responseSummary = toResponseSummary(response.data);
121
+ return {
122
+ doi: extractDoiId(responseSummary, response.statusCode, 'DataCite create DOI request'),
123
+ statusCode: response.statusCode,
124
+ responseSummary,
125
+ };
126
+ }).pipe(effect_1.Effect.provide(makeRuntimeLayer(config, runContext)));
127
+ return runProgram(program);
128
+ });
129
+ }
130
+ async function runUpdateDoiProgram(config, runContext, doi, payload, options = {}) {
131
+ return runAuditedHttpOperation(IntegrationAuditModel_1.IntegrationAuditAction.updateDoiRequest, runContext, buildHttpRequestSummary(options.requestSummary, 'patch', `/dois/${encodeURIComponent(doi)}`), options.auditContext, 'DataCite update DOI request completed.', 'DataCite update DOI request failed.', async () => {
132
+ const program = effect_1.Effect.gen(function* () {
133
+ const client = yield* http_1.DoiClientTag;
134
+ const response = yield* effect_1.Effect.promise(() => client.updateDoi(doi, payload));
135
+ const responseSummary = toResponseSummary(response.data);
136
+ return {
137
+ doi: extractDoiId(responseSummary, response.statusCode, 'DataCite update DOI request') ?? doi,
138
+ statusCode: response.statusCode,
139
+ responseSummary,
140
+ };
141
+ }).pipe(effect_1.Effect.provide(makeRuntimeLayer(config, runContext)));
142
+ return runProgram(program);
143
+ });
144
+ }
145
+ async function runDeleteDoiProgram(config, runContext, doi, options = {}) {
146
+ return runAuditedHttpOperation(IntegrationAuditModel_1.IntegrationAuditAction.deleteDoiRequest, runContext, buildHttpRequestSummary(options.requestSummary, 'delete', `/dois/${encodeURIComponent(doi)}`), options.auditContext, 'DataCite delete DOI request completed.', 'DataCite delete DOI request failed.', async () => {
147
+ const program = effect_1.Effect.gen(function* () {
148
+ const client = yield* http_1.DoiClientTag;
149
+ const response = yield* effect_1.Effect.promise(() => client.deleteDoi(doi));
150
+ return {
151
+ doi,
152
+ statusCode: response.statusCode,
153
+ responseSummary: { deleted: response.statusCode === 204, doi }
154
+ };
155
+ }).pipe(effect_1.Effect.provide(makeRuntimeLayer(config, runContext)));
156
+ return runProgram(program);
157
+ });
158
+ }
159
+ async function runChangeDoiStateProgram(config, runContext, doi, event, options = {}) {
160
+ return runAuditedHttpOperation(IntegrationAuditModel_1.IntegrationAuditAction.changeDoiStateRequest, runContext, buildHttpRequestSummary(options.requestSummary, 'put', `/dois/${encodeURIComponent(doi)}`), options.auditContext, 'DataCite change DOI state request completed.', 'DataCite change DOI state request failed.', async () => {
161
+ const program = effect_1.Effect.gen(function* () {
162
+ const client = yield* http_1.DoiClientTag;
163
+ const response = yield* effect_1.Effect.promise(() => client.changeDoiState(doi, event));
164
+ return {
165
+ doi,
166
+ statusCode: response.statusCode,
167
+ responseSummary: { changed: response.statusCode === 200, doi, event }
168
+ };
169
+ }).pipe(effect_1.Effect.provide(makeRuntimeLayer(config, runContext)));
170
+ return runProgram(program);
171
+ });
172
+ }
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9kb2ktdjIvcnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsNENBTUM7QUE0RkQsa0RBMkJDO0FBRUQsa0RBNEJDO0FBRUQsa0RBMEJDO0FBRUQsNERBMkJDO0FBcE9ELG1DQUFnRDtBQUNoRCxvREFBc0M7QUFFdEMsaUNBQXVEO0FBRXZELG1DQUF3RTtBQUN4RSxxRkFBbUY7QUFFdEUsUUFBQSxZQUFZLEdBQUcsZ0JBQU8sQ0FBQyxVQUFVLENBQWdCLGtCQUFrQixDQUFDLENBQUM7QUFDckUsUUFBQSxnQkFBZ0IsR0FBRyxnQkFBTyxDQUFDLFVBQVUsQ0FBZ0Isc0JBQXNCLENBQUMsQ0FBQztBQU8xRixTQUFnQixnQkFBZ0IsQ0FBQyxNQUFxQixFQUFFLFVBQXlCO0lBQy9FLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FDbkIsY0FBSyxDQUFDLE9BQU8sQ0FBQyxvQkFBWSxFQUFFLE1BQU0sQ0FBQyxFQUNuQyxjQUFLLENBQUMsT0FBTyxDQUFDLHdCQUFnQixFQUFFLFVBQVUsQ0FBQyxFQUMzQyxJQUFBLHNCQUFlLEVBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUNwQyxDQUFDO0FBQ0osQ0FBQztBQUVELEtBQUssVUFBVSxVQUFVLENBQUksT0FBeUM7SUFDcEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxlQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELElBQUksT0FBTyxDQUFD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
@@ -0,0 +1,49 @@
1
+ import type { DoiProfile, DoiPublishingConfigData } from '../../configmodels/DoiPublishing';
2
+ export interface DoiRecordModel extends Record<string, unknown> {
3
+ redboxOid?: string;
4
+ id?: string;
5
+ branding?: string;
6
+ metaMetadata?: {
7
+ brandId?: string;
8
+ };
9
+ metadata: Record<string, unknown>;
10
+ }
11
+ export type DoiAction = 'create' | 'update';
12
+ export type DoiChangeEvent = 'draft' | 'register' | 'publish' | 'hide';
13
+ export interface DoiRunContext {
14
+ recordOid: string;
15
+ brandId: string;
16
+ correlationId: string;
17
+ triggerSource: string;
18
+ jobId?: string;
19
+ profileName?: string;
20
+ }
21
+ export interface DoiPublishing extends DoiPublishingConfigData {
22
+ }
23
+ export interface ResolvedDoiProfile {
24
+ name: string;
25
+ profile: DoiProfile;
26
+ }
27
+ export interface DoiBindingContext {
28
+ record: DoiRecordModel;
29
+ oid: string;
30
+ profile: DoiProfile;
31
+ now: string;
32
+ helpers: {
33
+ mapSubjectEntries: (items: unknown) => Array<Record<string, unknown>>;
34
+ };
35
+ }
36
+ export interface DoiBindingIterationContext extends DoiBindingContext {
37
+ item: Record<string, unknown>;
38
+ index: number;
39
+ }
40
+ export interface DoiHttpResult<T = Record<string, unknown>> {
41
+ statusCode: number;
42
+ data: T;
43
+ }
44
+ export interface DoiOperationResult {
45
+ doi?: string | null;
46
+ statusCode?: number;
47
+ responseSummary?: Record<string, unknown>;
48
+ }
49
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZG9pLXYyL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,5 @@
1
+ import { FigshareClient } from './http';
2
+ import { ResolvedFigsharePublishingConfigData } from './config';
3
+ import { RecordModel, FigshareArticle, FigshareSyncState, AssetSyncResult } from './types';
4
+ export declare function syncAssetsPhase(client: FigshareClient, config: ResolvedFigsharePublishingConfigData, record: RecordModel, article: FigshareArticle, syncState: FigshareSyncState): Promise<AssetSyncResult>;
5
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.syncAssetsPhase = syncAssetsPhase;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const check_disk_space_1 = __importDefault(require("check-disk-space"));
10
+ const RBValidationError_1 = require("../../model/RBValidationError");
11
+ const config_1 = require("./config");
12
+ const plan_1 = require("./plan");
13
+ const UNKNOWN_SIZE_STAGING_BUFFER_BYTES = 50 * 1024 * 1024;
14
+ const LINK_FILE_CREATE_RETRY_COUNT = 3;
15
+ const FIGSHARE_UPLOAD_PENDING_STATUS = 'created';
16
+ function getTempDir(config) {
17
+ const configDir = config.assets.staging.tempDir;
18
+ if (configDir)
19
+ return configDir;
20
+ return '/tmp';
21
+ }
22
+ function getRecordOid(record) {
23
+ return record.redboxOid ?? record.id ?? '';
24
+ }
25
+ function getDatastreamService() {
26
+ const recordConfig = sails.config.record;
27
+ const serviceName = String(recordConfig?.datastreamService ?? '');
28
+ return serviceName ? sails.services?.[serviceName] : undefined;
29
+ }
30
+ function validationError(message) {
31
+ return new RBValidationError_1.RBValidationError({
32
+ message,
33
+ displayErrors: [{ title: message, detail: message }]
34
+ });
35
+ }
36
+ async function getAttachmentStream(oid, fileId) {
37
+ const datastreamService = getDatastreamService();
38
+ if (datastreamService == null) {
39
+ throw new Error('Datastream service is not configured');
40
+ }
41
+ const response = await datastreamService.getDatastream(oid, fileId);
42
+ if (response?.readstream == null) {
43
+ throw new Error(`Unable to read datastream '${fileId}' for record '${oid}'`);
44
+ }
45
+ return response;
46
+ }
47
+ async function stageAttachmentToDisk(response, filePath) {
48
+ await fs_1.default.promises.mkdir(path_1.default.dirname(filePath), { recursive: true });
49
+ const readStream = response.readstream;
50
+ await new Promise((resolve, reject) => {
51
+ const writeStream = fs_1.default.createWriteStream(filePath);
52
+ readStream.on('error', reject);
53
+ writeStream.on('error', reject);
54
+ writeStream.on('close', () => resolve());
55
+ readStream.pipe(writeStream);
56
+ });
57
+ const stat = await fs_1.default.promises.stat(filePath);
58
+ return stat.size;
59
+ }
60
+ function sanitizePathComponent(value) {
61
+ return value.replace(/[^A-Za-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'item';
62
+ }
63
+ async function listArticleFiles(client, articleId) {
64
+ const currentFiles = [];
65
+ let page = 1;
66
+ const pageSize = 20;
67
+ while (true) {
68
+ const pageResults = await client.listArticleFiles(articleId, page, pageSize);
69
+ if (!Array.isArray(pageResults) || pageResults.length === 0) {
70
+ break;
71
+ }
72
+ currentFiles.push(...pageResults);
73
+ if (pageResults.length < pageSize) {
74
+ break;
75
+ }
76
+ page++;
77
+ }
78
+ return currentFiles;
79
+ }
80
+ function hasPendingUploads(files) {
81
+ return files.some((entry) => String(entry.status ?? '').toLowerCase() === FIGSHARE_UPLOAD_PENDING_STATUS);
82
+ }
83
+ async function uploadAttachment(client, config, articleId, oid, attachment) {
84
+ const fileId = attachment.fileId ?? '';
85
+ const fileName = attachment.name ?? '';
86
+ if (fileId === '' || fileName === '') {
87
+ throw validationError('Attachment entry is missing fileId or name');
88
+ }
89
+ const tempDir = getTempDir(config);
90
+ const resolvedTempDir = path_1.default.resolve(tempDir);
91
+ const safeFileName = path_1.default.basename(fileName).trim();
92
+ if (safeFileName === '') {
93
+ throw validationError(`Attachment '${fileName}' does not contain a valid file name`);
94
+ }
95
+ await fs_1.default.promises.mkdir(resolvedTempDir, { recursive: true });
96
+ const stagingDir = await fs_1.default.promises.mkdtemp(path_1.default.join(resolvedTempDir, `${sanitizePathComponent(articleId)}-${sanitizePathComponent(oid)}-${sanitizePathComponent(fileId)}-`));
97
+ const filePath = path_1.default.resolve(stagingDir, safeFileName);
98
+ if (!filePath.startsWith(`${stagingDir}${path_1.default.sep}`) && filePath !== path_1.default.join(stagingDir, safeFileName)) {
99
+ throw validationError(`Attachment '${fileName}' resolves outside the staging directory`);
100
+ }
101
+ const datastream = await getAttachmentStream(oid, fileId);
102
+ const expectedSize = Number(datastream.size ?? 0);
103
+ if (expectedSize > 0) {
104
+ const diskSpace = await (0, check_disk_space_1.default)(tempDir);
105
+ if (diskSpace.free < expectedSize + config.assets.staging.diskSpaceThresholdBytes) {
106
+ throw validationError(`Not enough free disk space to upload '${fileName}'`);
107
+ }
108
+ }
109
+ else {
110
+ const diskSpace = await (0, check_disk_space_1.default)(tempDir);
111
+ const requiredBytes = config.assets.staging.diskSpaceThresholdBytes + UNKNOWN_SIZE_STAGING_BUFFER_BYTES;
112
+ if (diskSpace.free < requiredBytes) {
113
+ throw validationError(`Not enough free disk space to upload '${fileName}'`);
114
+ }
115
+ }
116
+ let uploadSucceeded = false;
117
+ try {
118
+ const stagedSize = await stageAttachmentToDisk(datastream, filePath);
119
+ if (expectedSize <= 0) {
120
+ const diskSpace = await (0, check_disk_space_1.default)(tempDir);
121
+ if (diskSpace.free < stagedSize + config.assets.staging.diskSpaceThresholdBytes) {
122
+ throw validationError(`Not enough free disk space to upload '${fileName}'`);
123
+ }
124
+ }
125
+ const uploadInit = await client.createArticleFile(articleId, {
126
+ name: fileName,
127
+ size: stagedSize
128
+ });
129
+ const uploadDescriptor = await client.getLocation(uploadInit.location);
130
+ const uploadUrl = uploadDescriptor.upload_url;
131
+ const figshareFileId = String(uploadDescriptor.id);
132
+ const partsDescriptor = await client.getLocation(uploadUrl);
133
+ const parts = partsDescriptor.parts ?? [];
134
+ for (const part of parts) {
135
+ const readStream = fs_1.default.createReadStream(filePath, {
136
+ start: part.startOffset,
137
+ end: part.endOffset
138
+ });
139
+ await client.uploadFilePart(uploadUrl, part.partNo, readStream);
140
+ }
141
+ await client.completeFileUpload(articleId, figshareFileId, {});
142
+ const uploadedFile = await client.getLocation(uploadInit.location);
143
+ uploadSucceeded = true;
144
+ return uploadedFile;
145
+ }
146
+ finally {
147
+ const shouldDeleteStagingDir = !uploadSucceeded || config.assets.staging.cleanupPolicy === 'deleteAfterSuccess';
148
+ if (shouldDeleteStagingDir && fs_1.default.existsSync(stagingDir)) {
149
+ await fs_1.default.promises.rm(stagingDir, { recursive: true, force: true });
150
+ }
151
+ }
152
+ }
153
+ async function syncLinkOnlyFiles(client, articleId, selectedUrls, currentFiles) {
154
+ const existingLinkFiles = currentFiles.filter((entry) => entry.is_link_only === true);
155
+ const uploadedUrls = [];
156
+ const creationErrors = [];
157
+ for (const entry of selectedUrls) {
158
+ if (entry.ignore === true) {
159
+ continue;
160
+ }
161
+ let responseLocation = null;
162
+ let attempt = 0;
163
+ while (attempt < LINK_FILE_CREATE_RETRY_COUNT) {
164
+ attempt += 1;
165
+ try {
166
+ responseLocation = await client.createArticleFile(articleId, {
167
+ link: entry.location ?? ''
168
+ });
169
+ break;
170
+ }
171
+ catch (error) {
172
+ if (attempt >= LINK_FILE_CREATE_RETRY_COUNT) {
173
+ creationErrors.push(error instanceof Error ? error : new Error(String(error)));
174
+ }
175
+ }
176
+ }
177
+ if (responseLocation != null) {
178
+ try {
179
+ const uploadedFile = await client.getLocation(responseLocation.location);
180
+ uploadedUrls.push({
181
+ id: uploadedFile.id,
182
+ article_id: articleId,
183
+ name: entry.name ?? entry.originalFileName ?? String(entry.location ?? ''),
184
+ status: uploadedFile.status,
185
+ download_url: uploadedFile.download_url,
186
+ is_link_only: true
187
+ });
188
+ }
189
+ catch (error) {
190
+ creationErrors.push(error instanceof Error ? error : new Error(String(error)));
191
+ }
192
+ }
193
+ }
194
+ if (creationErrors.length > 0) {
195
+ throw validationError(`Failed to create ${creationErrors.length} Figshare link file(s); existing link files were not deleted`);
196
+ }
197
+ for (const file of existingLinkFiles) {
198
+ await client.deleteArticleFile(articleId, String(file.id));
199
+ }
200
+ return uploadedUrls;
201
+ }
202
+ function toFixtureFigshareFile(entry, articleId, index, isLinkOnly) {
203
+ const derivedName = entry.name ?? entry.originalFileName ?? (isLinkOnly ? `link-${index + 1}` : `attachment-${index + 1}`);
204
+ return {
205
+ id: `fixture-${isLinkOnly ? 'url' : 'attachment'}-${index + 1}`,
206
+ name: derivedName,
207
+ article_id: articleId,
208
+ status: 'available',
209
+ size: 0,
210
+ is_link_only: isLinkOnly,
211
+ download_url: isLinkOnly ? String(entry.location ?? '') : String(entry.download_url ?? ''),
212
+ computed_md5: 'fixture-md5'
213
+ };
214
+ }
215
+ async function syncAssetsPhase(client, config, record, article, syncState) {
216
+ const selectedDataLocations = (0, plan_1.getSelectedDataLocations)(config, record);
217
+ const selectedAttachments = selectedDataLocations.filter((entry) => entry.type === 'attachment');
218
+ const selectedUrls = selectedDataLocations.filter((entry) => entry.type === 'url');
219
+ const articleId = String(article.id);
220
+ const attachmentCount = selectedAttachments.length;
221
+ const urlCount = selectedUrls.length;
222
+ const currentFiles = await listArticleFiles(client, articleId);
223
+ if (hasPendingUploads(currentFiles)) {
224
+ throw validationError(`Figshare file uploads are already in progress for article '${articleId}'`);
225
+ }
226
+ if (config.runtime.mode === 'fixture') {
227
+ const uploadsComplete = !(attachmentCount > 0 && config.article.publishMode === 'afterUploadsComplete');
228
+ syncState.status = attachmentCount > 0 && config.article.publishMode === 'afterUploadsComplete'
229
+ ? 'awaiting_upload_completion'
230
+ : 'syncing';
231
+ syncState.partialProgress = {
232
+ articleId,
233
+ attachmentCount,
234
+ urlCount,
235
+ uploadsComplete,
236
+ uploadedAttachmentCount: attachmentCount,
237
+ uploadedUrlCount: urlCount
238
+ };
239
+ (0, config_1.setSyncState)(config, record, syncState);
240
+ return {
241
+ articleId,
242
+ attachmentCount,
243
+ urlCount,
244
+ uploadsComplete,
245
+ uploadedAttachments: selectedAttachments.map((entry, index) => toFixtureFigshareFile(entry, articleId, index, false)),
246
+ uploadedUrls: selectedUrls.map((entry, index) => toFixtureFigshareFile(entry, articleId, index, true)),
247
+ dataLocations: selectedDataLocations
248
+ };
249
+ }
250
+ const oid = getRecordOid(record);
251
+ const uploadedAttachments = [];
252
+ let uploadedAttachmentCountThisRun = 0;
253
+ if (config.assets.enableHostedFiles) {
254
+ for (const attachment of selectedAttachments) {
255
+ const fileName = attachment.name ?? '';
256
+ const alreadyUploaded = currentFiles.find((entry) => entry.name === fileName);
257
+ if (alreadyUploaded != null) {
258
+ uploadedAttachments.push(alreadyUploaded);
259
+ continue;
260
+ }
261
+ uploadedAttachments.push(await uploadAttachment(client, config, articleId, oid, attachment));
262
+ uploadedAttachmentCountThisRun += 1;
263
+ }
264
+ }
265
+ const uploadedUrls = config.assets.enableLinkFiles
266
+ ? await syncLinkOnlyFiles(client, articleId, selectedUrls, currentFiles)
267
+ : [];
268
+ const refreshedFiles = attachmentCount > 0 ? await listArticleFiles(client, articleId) : currentFiles;
269
+ const uploadsComplete = attachmentCount === 0
270
+ ? true
271
+ : config.article.publishMode === 'afterUploadsComplete' && uploadedAttachmentCountThisRun > 0
272
+ ? false
273
+ : !hasPendingUploads(refreshedFiles);
274
+ syncState.status = attachmentCount > 0 && config.article.publishMode === 'afterUploadsComplete'
275
+ ? 'awaiting_upload_completion'
276
+ : 'syncing';
277
+ syncState.partialProgress = {
278
+ articleId,
279
+ attachmentCount,
280
+ urlCount,
281
+ uploadsComplete,
282
+ uploadedAttachmentCountThisRun,
283
+ uploadedAttachmentCount: uploadedAttachments.length,
284
+ uploadedUrlCount: uploadedUrls.length
285
+ };
286
+ (0, config_1.setSyncState)(config, record, syncState);
287
+ return {
288
+ articleId,
289
+ attachmentCount,
290
+ urlCount,
291
+ uploadsComplete,
292
+ uploadedAttachments,
293
+ uploadedUrls,
294
+ dataLocations: selectedDataLocations
295
+ };
296
+ }
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ZpZ3NoYXJlLXYyL2Fzc2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXdQQSwwQ0ErRkM7QUF2VkQsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4Qix3RUFBOEM7QUFHOUMscUVBQWtFO0FBV2xFLHFDQUF3QztBQUN4QyxpQ0FBa0Q7QUFFbEQsTUFBTSxpQ0FBaUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMzRCxNQUFNLDRCQUE0QixHQUFHLENBQUMsQ0FBQztBQUN2QyxNQUFNLDhCQUE4QixHQUFHLFNBQVMsQ0FBQztBQUVqRCxTQUFTLFVBQVUsQ0FBQyxNQUFvQztJQUN0RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDaEQsSUFBSSxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDaEMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE1BQW1CO0lBQ3ZDLE9BQU8sTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxvQkFBb0I7SUFDM0IsTUFBTSxZQUFZLEdBQUksS0FBSyxDQUFDLE1BQWtDLENBQUMsTUFBNkMsQ0FBQztJQUM3RyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBRSxLQUFLLENBQUMsUUFBb0MsRUFBRSxDQUFDLFdBQVcsQ0FBd0MsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JJLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFlO0lBQ3RDLE9BQU8sSUFBSSxxQ0FBaUIsQ0FBQztRQUMzQixP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
@@ -0,0 +1,6 @@
1
+ import { ValueBinding } from '../../configmodels/FigsharePublishing';
2
+ import { AnyRecord } from './types';
3
+ export declare function ensureHandlebarsHelpersRegistered(): void;
4
+ export declare function validateHandlebarsTemplate(template: string): void;
5
+ export declare function evaluateBinding(binding: ValueBinding | undefined, record: AnyRecord): Promise<unknown>;
6
+ //# sourceMappingURL=bindings.d.ts.map
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ensureHandlebarsHelpersRegistered = ensureHandlebarsHelpersRegistered;
7
+ exports.validateHandlebarsTemplate = validateHandlebarsTemplate;
8
+ exports.evaluateBinding = evaluateBinding;
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ const jsonata_1 = __importDefault(require("jsonata"));
11
+ const handlebars_1 = __importDefault(require("handlebars"));
12
+ const sails_ng_common_1 = require("@researchdatabox/sails-ng-common");
13
+ let handlebarsHelpersRegistered = false;
14
+ function ensureHandlebarsHelpersRegistered() {
15
+ if (!handlebarsHelpersRegistered) {
16
+ (0, sails_ng_common_1.registerSharedHandlebarsHelpers)(handlebars_1.default);
17
+ handlebarsHelpersRegistered = true;
18
+ }
19
+ }
20
+ function validateHandlebarsTemplate(template) {
21
+ const allowedHelpers = new Set(['default', 'join', 'lower', 'upper', 'trim', 'formatDate']);
22
+ const tagPattern = /{{{?\s*([#/!>]?)\s*([A-Za-z_][A-Za-z0-9_]*)?/g;
23
+ let match;
24
+ while ((match = tagPattern.exec(template)) != null) {
25
+ const sigil = match[1];
26
+ const token = match[2];
27
+ if (sigil === '!' || sigil === '>' || !token) {
28
+ continue;
29
+ }
30
+ if (sigil === '#') {
31
+ throw new Error(`Unsupported Handlebars block helper '${token}' in Figshare binding`);
32
+ }
33
+ const afterToken = template.slice(tagPattern.lastIndex).trimStart();
34
+ const isSimpleLookup = afterToken.startsWith('}}') || afterToken.startsWith('}}}') || afterToken.startsWith('.');
35
+ if (isSimpleLookup || allowedHelpers.has(token)) {
36
+ continue;
37
+ }
38
+ throw new Error(`Unsupported Handlebars helper '${token}' in Figshare binding`);
39
+ }
40
+ }
41
+ async function evaluateBinding(binding, record) {
42
+ if (binding == null) {
43
+ return undefined;
44
+ }
45
+ if (binding.kind === 'path') {
46
+ return lodash_1.default.get(record, binding.path, binding.defaultValue);
47
+ }
48
+ if (binding.kind === 'handlebars') {
49
+ ensureHandlebarsHelpersRegistered();
50
+ validateHandlebarsTemplate(binding.template);
51
+ const compiled = handlebars_1.default.compile(binding.template);
52
+ const value = compiled(record);
53
+ return value === '' ? binding.defaultValue : value;
54
+ }
55
+ const compiled = (0, jsonata_1.default)(binding.expression);
56
+ compiled.registerFunction('eval', () => undefined);
57
+ const value = await compiled.evaluate(record);
58
+ return value ?? binding.defaultValue;
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZmlnc2hhcmUtdjIvYmluZGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSw4RUFLQztBQUVELGdFQW9CQztBQUVELDBDQXFCQztBQTNERCxvREFBdUI7QUFDdkIsc0RBQThCO0FBQzlCLDREQUFvQztBQUNwQyxzRUFBbUY7QUFJbkYsSUFBSSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFFeEMsU0FBZ0IsaUNBQWlDO0lBQy9DLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ2pDLElBQUEsaURBQStCLEVBQUMsb0JBQVUsQ0FBQyxDQUFDO1FBQzVDLDJCQUEyQixHQUFHLElBQUksQ0FBQztJQUNyQyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQWdCLDBCQUEwQixDQUFDLFFBQWdCO0lBQ3pELE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sVUFBVSxHQUFHLCtDQUErQyxDQUFDO0lBQ25FLElBQUksS0FBNkIsQ0FBQztJQUNsQyxPQUFPLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0MsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxLQUFLLHVCQUF1QixDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BFLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pILElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxTQUFTO1FBQ1gsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLEtBQUssdUJBQXVCLENBQUMsQ0FBQztJQUNsRixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxlQUFlLENBQUMsT0FBaUMsRUFBRSxNQUFpQjtJQUN4RixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNwQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE9BQU8sZ0JBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDbEMsaUNBQWlDLEVBQUUsQ0FBQztRQUNwQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixPQUFPLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBQSxpQkFBTyxFQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxPQUFPLEtBQUssSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQ3ZDLENBQUMifQ==