@segmentstream/ontology 0.0.0-stage → 0.92.1
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/LICENSE +201 -0
- package/NOTICE +2 -0
- package/README.md +1655 -2
- package/dist/action.d.ts +193 -0
- package/dist/action.js +41 -0
- package/dist/agent-chat.d.ts +44 -0
- package/dist/agent-chat.js +91 -0
- package/dist/agent-task-contract.d.ts +64 -0
- package/dist/agent-task-contract.js +15 -0
- package/dist/agent-task.d.ts +39 -0
- package/dist/agent-task.js +112 -0
- package/dist/analyze.d.ts +215 -0
- package/dist/analyze.js +2438 -0
- package/dist/app-feedback.d.ts +167 -0
- package/dist/app-feedback.js +176 -0
- package/dist/authoring-input.d.ts +3 -0
- package/dist/authoring-input.js +107 -0
- package/dist/authoring-names.d.ts +4 -0
- package/dist/authoring-names.js +13 -0
- package/dist/authoring-records.d.ts +35 -0
- package/dist/authoring-records.js +264 -0
- package/dist/authoring.d.ts +15 -0
- package/dist/authoring.js +331 -0
- package/dist/bin/check.d.ts +30 -0
- package/dist/bin/check.js +99 -0
- package/dist/bin/load.d.ts +48 -0
- package/dist/bin/load.js +139 -0
- package/dist/bin/main.d.ts +31 -0
- package/dist/bin/main.js +121 -0
- package/dist/bin/migrate.d.ts +57 -0
- package/dist/bin/migrate.js +170 -0
- package/dist/bin/output.d.ts +31 -0
- package/dist/bin/output.js +84 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +31 -0
- package/dist/blob.d.ts +52 -0
- package/dist/blob.js +87 -0
- package/dist/channel-session.d.ts +16 -0
- package/dist/channel-session.js +16 -0
- package/dist/chat.d.ts +43 -0
- package/dist/chat.js +34 -0
- package/dist/confirmation.d.ts +46 -0
- package/dist/confirmation.js +41 -0
- package/dist/connection.d.ts +213 -0
- package/dist/connection.js +289 -0
- package/dist/deployment.d.ts +35 -0
- package/dist/deployment.js +76 -0
- package/dist/diagnostics.d.ts +27 -0
- package/dist/diagnostics.js +106 -0
- package/dist/emails.d.ts +70 -0
- package/dist/emails.js +221 -0
- package/dist/entity.d.ts +331 -0
- package/dist/entity.js +153 -0
- package/dist/errors.d.ts +154 -0
- package/dist/errors.js +109 -0
- package/dist/feedback-config.d.ts +24 -0
- package/dist/feedback-config.js +126 -0
- package/dist/files.d.ts +39 -0
- package/dist/files.js +4 -0
- package/dist/groups.d.ts +95 -0
- package/dist/groups.js +280 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.js +70 -0
- package/dist/internal/diagnostics.js +594 -0
- package/dist/legacy.d.ts +160 -0
- package/dist/legacy.js +270 -0
- package/dist/manifest-compatibility.d.ts +8 -0
- package/dist/manifest-compatibility.js +87 -0
- package/dist/manifest.d.ts +3329 -0
- package/dist/manifest.js +757 -0
- package/dist/me.d.ts +46 -0
- package/dist/me.js +109 -0
- package/dist/metric-filters.d.ts +48 -0
- package/dist/metric-filters.js +252 -0
- package/dist/metric-routes.d.ts +132 -0
- package/dist/metric-routes.js +498 -0
- package/dist/metric.d.ts +172 -0
- package/dist/metric.js +132 -0
- package/dist/migrate/apply.d.ts +94 -0
- package/dist/migrate/apply.js +526 -0
- package/dist/migrate/errors.d.ts +46 -0
- package/dist/migrate/errors.js +38 -0
- package/dist/migrate/index.d.ts +10 -0
- package/dist/migrate/index.js +7 -0
- package/dist/migrate/model.d.ts +2311 -0
- package/dist/migrate/model.js +148 -0
- package/dist/migrate/plan.d.ts +51 -0
- package/dist/migrate/plan.js +1856 -0
- package/dist/migrate/preview.d.ts +13 -0
- package/dist/migrate/preview.js +65 -0
- package/dist/migrate/storage.d.ts +226 -0
- package/dist/migrate/storage.js +774 -0
- package/dist/model-metrics.d.ts +22 -0
- package/dist/model-metrics.js +545 -0
- package/dist/names.d.ts +49 -0
- package/dist/names.js +110 -0
- package/dist/navigation-artifact.d.ts +13 -0
- package/dist/navigation-artifact.js +11 -0
- package/dist/navigation-catalog.d.ts +55 -0
- package/dist/navigation-catalog.js +297 -0
- package/dist/nitro-navigation.d.ts +3 -0
- package/dist/nitro-navigation.js +64 -0
- package/dist/nitro-workflows.d.ts +108 -0
- package/dist/nitro-workflows.js +286 -0
- package/dist/nitro.d.ts +40 -0
- package/dist/nitro.js +50 -0
- package/dist/ontology.d.ts +41 -0
- package/dist/ontology.js +46 -0
- package/dist/permissions.d.ts +198 -0
- package/dist/permissions.js +272 -0
- package/dist/property.d.ts +188 -0
- package/dist/property.js +301 -0
- package/dist/query.d.ts +245 -0
- package/dist/query.js +615 -0
- package/dist/relationship.d.ts +99 -0
- package/dist/relationship.js +33 -0
- package/dist/render.d.ts +81 -0
- package/dist/render.js +512 -0
- package/dist/replication/baseline.d.ts +51 -0
- package/dist/replication/baseline.js +215 -0
- package/dist/replication/bigquery.d.ts +37 -0
- package/dist/replication/bigquery.js +211 -0
- package/dist/replication/coverage.d.ts +14 -0
- package/dist/replication/coverage.js +53 -0
- package/dist/replication/evolution.d.ts +25 -0
- package/dist/replication/evolution.js +184 -0
- package/dist/replication/identities.d.ts +6 -0
- package/dist/replication/identities.js +47 -0
- package/dist/replication/legacy-baseline.d.ts +27 -0
- package/dist/replication/legacy-baseline.js +109 -0
- package/dist/replication/legacy-store.d.ts +19 -0
- package/dist/replication/legacy-store.js +63 -0
- package/dist/replication/lineage.d.ts +36 -0
- package/dist/replication/lineage.js +72 -0
- package/dist/replication/migrate.d.ts +21 -0
- package/dist/replication/migrate.js +84 -0
- package/dist/replication/model.d.ts +52 -0
- package/dist/replication/model.js +99 -0
- package/dist/replication/scans.d.ts +34 -0
- package/dist/replication/scans.js +158 -0
- package/dist/replication/schema.d.ts +11 -0
- package/dist/replication/schema.js +226 -0
- package/dist/replication/shadow-schema.d.ts +4 -0
- package/dist/replication/shadow-schema.js +61 -0
- package/dist/replication/shadow.d.ts +127 -0
- package/dist/replication/shadow.js +614 -0
- package/dist/replication/source-replacement.d.ts +33 -0
- package/dist/replication/source-replacement.js +76 -0
- package/dist/replication/store.d.ts +36 -0
- package/dist/replication/store.js +382 -0
- package/dist/replication/transaction.d.ts +23 -0
- package/dist/replication/transaction.js +88 -0
- package/dist/role.d.ts +61 -0
- package/dist/role.js +76 -0
- package/dist/runtime/action-deadlocks.d.ts +21 -0
- package/dist/runtime/action-deadlocks.js +130 -0
- package/dist/runtime/action-transactions.d.ts +35 -0
- package/dist/runtime/action-transactions.js +54 -0
- package/dist/runtime/agent-counters.d.ts +26 -0
- package/dist/runtime/agent-counters.js +98 -0
- package/dist/runtime/agent-tasks.d.ts +63 -0
- package/dist/runtime/agent-tasks.js +120 -0
- package/dist/runtime/agents.d.ts +15 -0
- package/dist/runtime/agents.js +457 -0
- package/dist/runtime/batch-diagnostics.d.ts +22 -0
- package/dist/runtime/batch-diagnostics.js +89 -0
- package/dist/runtime/batch.d.ts +52 -0
- package/dist/runtime/batch.js +534 -0
- package/dist/runtime/channel-session-revocation.d.ts +3 -0
- package/dist/runtime/channel-session-revocation.js +5 -0
- package/dist/runtime/channel-sessions.d.ts +4 -0
- package/dist/runtime/channel-sessions.js +61 -0
- package/dist/runtime/confirmations.d.ts +29 -0
- package/dist/runtime/confirmations.js +57 -0
- package/dist/runtime/cursor.d.ts +23 -0
- package/dist/runtime/cursor.js +100 -0
- package/dist/runtime/deployment.d.ts +7 -0
- package/dist/runtime/deployment.js +4 -0
- package/dist/runtime/errors.d.ts +118 -0
- package/dist/runtime/errors.js +109 -0
- package/dist/runtime/federation-tables.d.ts +2 -0
- package/dist/runtime/federation-tables.js +20 -0
- package/dist/runtime/federation.d.ts +42 -0
- package/dist/runtime/federation.js +222 -0
- package/dist/runtime/files.d.ts +39 -0
- package/dist/runtime/files.js +44 -0
- package/dist/runtime/generated-actions.d.ts +37 -0
- package/dist/runtime/generated-actions.js +307 -0
- package/dist/runtime/history.d.ts +91 -0
- package/dist/runtime/history.js +77 -0
- package/dist/runtime/ids.d.ts +6 -0
- package/dist/runtime/ids.js +39 -0
- package/dist/runtime/member-tables.d.ts +8 -0
- package/dist/runtime/member-tables.js +33 -0
- package/dist/runtime/member-writes.d.ts +78 -0
- package/dist/runtime/member-writes.js +202 -0
- package/dist/runtime/metric-query.d.ts +19 -0
- package/dist/runtime/metric-query.js +411 -0
- package/dist/runtime/model.d.ts +67 -0
- package/dist/runtime/model.js +150 -0
- package/dist/runtime/new-user-hook.d.ts +6 -0
- package/dist/runtime/new-user-hook.js +37 -0
- package/dist/runtime/oauth.d.ts +9 -0
- package/dist/runtime/oauth.js +299 -0
- package/dist/runtime/pipeline.d.ts +155 -0
- package/dist/runtime/pipeline.js +597 -0
- package/dist/runtime/postgres-tls.d.ts +10 -0
- package/dist/runtime/postgres-tls.js +14 -0
- package/dist/runtime/principals.d.ts +302 -0
- package/dist/runtime/principals.js +1307 -0
- package/dist/runtime/reads.d.ts +55 -0
- package/dist/runtime/reads.js +313 -0
- package/dist/runtime/records.d.ts +42 -0
- package/dist/runtime/records.js +245 -0
- package/dist/runtime/resolve-agent-identity.d.ts +6 -0
- package/dist/runtime/resolve-agent-identity.js +181 -0
- package/dist/runtime/service-binding.d.ts +18 -0
- package/dist/runtime/service-binding.js +266 -0
- package/dist/runtime/sign-in-links.d.ts +68 -0
- package/dist/runtime/sign-in-links.js +147 -0
- package/dist/runtime/sql-runtime.d.ts +131 -0
- package/dist/runtime/sql-runtime.js +362 -0
- package/dist/runtime/statement.d.ts +18 -0
- package/dist/runtime/statement.js +31 -0
- package/dist/runtime/user-identities.d.ts +66 -0
- package/dist/runtime/user-identities.js +106 -0
- package/dist/runtime/user-identity-sql.d.ts +86 -0
- package/dist/runtime/user-identity-sql.js +297 -0
- package/dist/runtime/user-roles.d.ts +16 -0
- package/dist/runtime/user-roles.js +32 -0
- package/dist/runtime/validation.d.ts +16 -0
- package/dist/runtime/validation.js +26 -0
- package/dist/runtime/where.d.ts +57 -0
- package/dist/runtime/where.js +404 -0
- package/dist/runtime/workflow-admission.d.ts +49 -0
- package/dist/runtime/workflow-admission.js +92 -0
- package/dist/runtime/workflow-argument-codec.d.ts +10 -0
- package/dist/runtime/workflow-argument-codec.js +120 -0
- package/dist/runtime/workflow-arguments.d.ts +17 -0
- package/dist/runtime/workflow-arguments.js +99 -0
- package/dist/runtime/workflow-starts.d.ts +203 -0
- package/dist/runtime/workflow-starts.js +493 -0
- package/dist/runtime/workflow-users.d.ts +9 -0
- package/dist/runtime/workflow-users.js +17 -0
- package/dist/runtime/workload.d.ts +25 -0
- package/dist/runtime/workload.js +24 -0
- package/dist/runtime/writes.d.ts +108 -0
- package/dist/runtime/writes.js +491 -0
- package/dist/runtime-source.d.ts +22 -0
- package/dist/runtime-source.js +28 -0
- package/dist/runtime.d.ts +310 -0
- package/dist/runtime.js +31 -0
- package/dist/server.d.ts +23 -0
- package/dist/server.js +107 -0
- package/dist/service/agent/attachments.d.ts +33 -0
- package/dist/service/agent/attachments.js +228 -0
- package/dist/service/agent/authentication.d.ts +22 -0
- package/dist/service/agent/authentication.js +58 -0
- package/dist/service/agent/confirmations.d.ts +5 -0
- package/dist/service/agent/confirmations.js +73 -0
- package/dist/service/agent/conversation-routes.d.ts +14 -0
- package/dist/service/agent/conversation-routes.js +45 -0
- package/dist/service/agent/conversations.d.ts +40 -0
- package/dist/service/agent/conversations.js +69 -0
- package/dist/service/agent/files.d.ts +12 -0
- package/dist/service/agent/files.js +69 -0
- package/dist/service/agent/protocol.d.ts +90 -0
- package/dist/service/agent/protocol.js +114 -0
- package/dist/service/agent/server.d.ts +28 -0
- package/dist/service/agent/server.js +374 -0
- package/dist/service/agent/task-caller.d.ts +21 -0
- package/dist/service/agent/task-caller.js +35 -0
- package/dist/service/agent/task-start.d.ts +53 -0
- package/dist/service/agent/task-start.js +161 -0
- package/dist/service/agent/tasks.d.ts +40 -0
- package/dist/service/agent/tasks.js +155 -0
- package/dist/service/api.d.ts +50 -0
- package/dist/service/api.js +288 -0
- package/dist/service/authentication.d.ts +227 -0
- package/dist/service/authentication.js +767 -0
- package/dist/service/caller-context.d.ts +24 -0
- package/dist/service/caller-context.js +6 -0
- package/dist/service/catalog.d.ts +42 -0
- package/dist/service/catalog.js +66 -0
- package/dist/service/channel/provider.d.ts +10 -0
- package/dist/service/channel/provider.js +1 -0
- package/dist/service/channel/providers/telegram.d.ts +18 -0
- package/dist/service/channel/providers/telegram.js +108 -0
- package/dist/service/channel/sessions.d.ts +5 -0
- package/dist/service/channel/sessions.js +53 -0
- package/dist/service/channel/sign-in.d.ts +7 -0
- package/dist/service/channel/sign-in.js +78 -0
- package/dist/service/chat/archive.d.ts +64 -0
- package/dist/service/chat/archive.js +62 -0
- package/dist/service/chat/attribution.d.ts +26 -0
- package/dist/service/chat/attribution.js +28 -0
- package/dist/service/chat/delivery.d.ts +18 -0
- package/dist/service/chat/delivery.js +251 -0
- package/dist/service/chat/diagnostics.d.ts +2 -0
- package/dist/service/chat/diagnostics.js +35 -0
- package/dist/service/chat/envelope.d.ts +96 -0
- package/dist/service/chat/envelope.js +39 -0
- package/dist/service/chat/idempotency.d.ts +19 -0
- package/dist/service/chat/idempotency.js +37 -0
- package/dist/service/chat/providers/telegram.d.ts +36 -0
- package/dist/service/chat/providers/telegram.js +133 -0
- package/dist/service/chat/reads.d.ts +25 -0
- package/dist/service/chat/reads.js +75 -0
- package/dist/service/chat/resolve.d.ts +34 -0
- package/dist/service/chat/resolve.js +150 -0
- package/dist/service/chat/routes.d.ts +23 -0
- package/dist/service/chat/routes.js +75 -0
- package/dist/service/chat/schemas.d.ts +43 -0
- package/dist/service/chat/schemas.js +31 -0
- package/dist/service/config.d.ts +218 -0
- package/dist/service/config.js +265 -0
- package/dist/service/connection-stream.d.ts +10 -0
- package/dist/service/connection-stream.js +191 -0
- package/dist/service/connections.d.ts +60 -0
- package/dist/service/connections.js +271 -0
- package/dist/service/decisions.d.ts +35 -0
- package/dist/service/decisions.js +63 -0
- package/dist/service/descriptions.d.ts +8 -0
- package/dist/service/descriptions.js +20 -0
- package/dist/service/discovery-schemas.d.ts +92 -0
- package/dist/service/discovery-schemas.js +59 -0
- package/dist/service/discovery-search.d.ts +30 -0
- package/dist/service/discovery-search.js +95 -0
- package/dist/service/discovery.d.ts +37 -0
- package/dist/service/discovery.js +436 -0
- package/dist/service/docs.d.ts +9 -0
- package/dist/service/docs.js +197 -0
- package/dist/service/errors.d.ts +145 -0
- package/dist/service/errors.js +704 -0
- package/dist/service/federation-provider.d.ts +36 -0
- package/dist/service/federation-provider.js +110 -0
- package/dist/service/federation-server.d.ts +20 -0
- package/dist/service/federation-server.js +249 -0
- package/dist/service/federation-status.d.ts +40 -0
- package/dist/service/federation-status.js +151 -0
- package/dist/service/handlers.d.ts +18 -0
- package/dist/service/handlers.js +287 -0
- package/dist/service/mcp/confirmation.d.ts +68 -0
- package/dist/service/mcp/confirmation.js +178 -0
- package/dist/service/mcp/find-input.d.ts +12 -0
- package/dist/service/mcp/find-input.js +122 -0
- package/dist/service/mcp/input-schema.d.ts +6 -0
- package/dist/service/mcp/input-schema.js +126 -0
- package/dist/service/mcp/listing.d.ts +26 -0
- package/dist/service/mcp/listing.js +92 -0
- package/dist/service/mcp/metric-tools.d.ts +85 -0
- package/dist/service/mcp/metric-tools.js +258 -0
- package/dist/service/mcp/request-log.d.ts +5 -0
- package/dist/service/mcp/request-log.js +53 -0
- package/dist/service/mcp/runtime-policy.d.ts +27 -0
- package/dist/service/mcp/runtime-policy.js +62 -0
- package/dist/service/mcp/server.d.ts +52 -0
- package/dist/service/mcp/server.js +861 -0
- package/dist/service/mcp/tools.d.ts +99 -0
- package/dist/service/mcp/tools.js +938 -0
- package/dist/service/member-file-routes.d.ts +22 -0
- package/dist/service/member-file-routes.js +52 -0
- package/dist/service/member-files.d.ts +245 -0
- package/dist/service/member-files.js +258 -0
- package/dist/service/metric-query-platform.d.ts +77 -0
- package/dist/service/metric-query-platform.js +198 -0
- package/dist/service/metric-query-scopes.d.ts +43 -0
- package/dist/service/metric-query-scopes.js +147 -0
- package/dist/service/metric-query.d.ts +48 -0
- package/dist/service/metric-query.js +200 -0
- package/dist/service/name-suggestions.d.ts +3 -0
- package/dist/service/name-suggestions.js +38 -0
- package/dist/service/navigation-schemas.d.ts +80 -0
- package/dist/service/navigation-schemas.js +49 -0
- package/dist/service/navigation.d.ts +20 -0
- package/dist/service/navigation.js +165 -0
- package/dist/service/oauth/protocol.d.ts +70 -0
- package/dist/service/oauth/protocol.js +157 -0
- package/dist/service/oauth/refresh-replay.d.ts +2 -0
- package/dist/service/oauth/refresh-replay.js +20 -0
- package/dist/service/oauth/server.d.ts +28 -0
- package/dist/service/oauth/server.js +769 -0
- package/dist/service/operations.d.ts +170 -0
- package/dist/service/operations.js +392 -0
- package/dist/service/plan.d.ts +57 -0
- package/dist/service/plan.js +96 -0
- package/dist/service/rate-limit.d.ts +22 -0
- package/dist/service/rate-limit.js +52 -0
- package/dist/service/record-reads.d.ts +21 -0
- package/dist/service/record-reads.js +155 -0
- package/dist/service/replication.d.ts +5 -0
- package/dist/service/replication.js +39 -0
- package/dist/service/runtime-contract.d.ts +508 -0
- package/dist/service/runtime-contract.js +18 -0
- package/dist/service/runtime-identity.d.ts +71 -0
- package/dist/service/runtime-identity.js +122 -0
- package/dist/service/schemas.d.ts +961 -0
- package/dist/service/schemas.js +639 -0
- package/dist/service/service.d.ts +21 -0
- package/dist/service/service.js +526 -0
- package/dist/service/warehouse-platform.d.ts +17 -0
- package/dist/service/warehouse-platform.js +122 -0
- package/dist/service/warehouse-query.d.ts +24 -0
- package/dist/service/warehouse-query.js +280 -0
- package/dist/service/webhooks.d.ts +106 -0
- package/dist/service/webhooks.js +233 -0
- package/dist/service/workflow-admission-provider.d.ts +31 -0
- package/dist/service/workflow-admission-provider.js +205 -0
- package/dist/service/workflow-argument-serialization.d.ts +2 -0
- package/dist/service/workflow-argument-serialization.js +14 -0
- package/dist/service/workflow-callback.d.ts +22 -0
- package/dist/service/workflow-callback.js +75 -0
- package/dist/service/workflow-deployment.d.ts +8 -0
- package/dist/service/workflow-deployment.js +131 -0
- package/dist/service/workflow-diagnostics.d.ts +23 -0
- package/dist/service/workflow-diagnostics.js +263 -0
- package/dist/service/workflow-errors.d.ts +26 -0
- package/dist/service/workflow-errors.js +181 -0
- package/dist/service/workflow-logging.d.ts +2 -0
- package/dist/service/workflow-logging.js +50 -0
- package/dist/service/workflow-queue-fence.d.ts +6 -0
- package/dist/service/workflow-queue-fence.js +66 -0
- package/dist/service/workflows.d.ts +200 -0
- package/dist/service/workflows.js +1549 -0
- package/dist/sign-in.d.ts +58 -0
- package/dist/sign-in.js +57 -0
- package/dist/source.d.ts +30 -0
- package/dist/source.js +107 -0
- package/dist/start-recovery-contract.d.ts +49 -0
- package/dist/start-recovery-contract.js +26 -0
- package/dist/start-recovery.d.ts +27 -0
- package/dist/start-recovery.js +81 -0
- package/dist/storage/api.d.ts +4 -0
- package/dist/storage/api.js +40 -0
- package/dist/storage/attachments.d.ts +146 -0
- package/dist/storage/attachments.js +733 -0
- package/dist/storage/authorization.d.ts +38 -0
- package/dist/storage/authorization.js +83 -0
- package/dist/storage/file-access.d.ts +17 -0
- package/dist/storage/file-access.js +8 -0
- package/dist/storage/limits.d.ts +12 -0
- package/dist/storage/limits.js +17 -0
- package/dist/storage/maintenance-auth.d.ts +20 -0
- package/dist/storage/maintenance-auth.js +24 -0
- package/dist/storage/maintenance.d.ts +11 -0
- package/dist/storage/maintenance.js +67 -0
- package/dist/storage/neon.d.ts +4 -0
- package/dist/storage/neon.js +318 -0
- package/dist/storage/operator.d.ts +11 -0
- package/dist/storage/operator.js +30 -0
- package/dist/storage/provider.d.ts +93 -0
- package/dist/storage/provider.js +36 -0
- package/dist/storage/sessions.d.ts +184 -0
- package/dist/storage/sessions.js +688 -0
- package/dist/storage/tables.d.ts +54 -0
- package/dist/storage/tables.js +205 -0
- package/dist/storage/transfers.d.ts +16 -0
- package/dist/storage/transfers.js +153 -0
- package/dist/storage/writes.d.ts +7 -0
- package/dist/storage/writes.js +88 -0
- package/dist/telegram.d.ts +35 -0
- package/dist/telegram.js +173 -0
- package/dist/user-identity.d.ts +28 -0
- package/dist/user-identity.js +106 -0
- package/dist/user.d.ts +75 -0
- package/dist/user.js +111 -0
- package/dist/warehouse-backed.d.ts +6 -0
- package/dist/warehouse-backed.js +495 -0
- package/dist/webhook-token.d.ts +11 -0
- package/dist/webhook-token.js +18 -0
- package/dist/webhooks.d.ts +40 -0
- package/dist/webhooks.js +55 -0
- package/dist/wire.d.ts +10 -0
- package/dist/wire.js +35 -0
- package/dist/workflow-runtime.d.ts +116 -0
- package/dist/workflow-runtime.js +109 -0
- package/dist/workflow-topics.d.ts +28 -0
- package/dist/workflow-topics.js +28 -0
- package/dist/workflow.d.ts +284 -0
- package/dist/workflow.js +259 -0
- package/dist/workflows.d.ts +24 -0
- package/dist/workflows.js +18 -0
- package/package.json +127 -4
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
export const DIAGNOSTIC_CODES = [
|
|
3
|
+
"invalid-source",
|
|
4
|
+
"missing-column",
|
|
5
|
+
"invalid-column",
|
|
6
|
+
"invalid-scope",
|
|
7
|
+
"invalid-scope-path",
|
|
8
|
+
"scope-reads-all",
|
|
9
|
+
"scope-unused",
|
|
10
|
+
"scope-member-overlap",
|
|
11
|
+
"source-with-actions",
|
|
12
|
+
"source-with-index",
|
|
13
|
+
"invalid-metric",
|
|
14
|
+
"unknown-metric",
|
|
15
|
+
"circular-metric",
|
|
16
|
+
"invalid-join",
|
|
17
|
+
"missing-join",
|
|
18
|
+
"invalid-entity",
|
|
19
|
+
"invalid-property",
|
|
20
|
+
"invalid-relationship",
|
|
21
|
+
"invalid-actions",
|
|
22
|
+
"invalid-action",
|
|
23
|
+
"invalid-action-input",
|
|
24
|
+
"invalid-role",
|
|
25
|
+
"invalid-name",
|
|
26
|
+
"reserved-name",
|
|
27
|
+
"duplicate-name",
|
|
28
|
+
"invalid-entity-id",
|
|
29
|
+
"duplicate-entity-id",
|
|
30
|
+
"missing-label",
|
|
31
|
+
"missing-description",
|
|
32
|
+
"invalid-title",
|
|
33
|
+
"invalid-options",
|
|
34
|
+
"invalid-default",
|
|
35
|
+
"invalid-constraint",
|
|
36
|
+
"unknown-relationship-target",
|
|
37
|
+
"inverse-collision",
|
|
38
|
+
"invalid-on-delete",
|
|
39
|
+
"invalid-phrase",
|
|
40
|
+
"invalid-index",
|
|
41
|
+
"unknown-reference",
|
|
42
|
+
"invalid-renamed-from",
|
|
43
|
+
"earlier-name",
|
|
44
|
+
"invalid-guide",
|
|
45
|
+
"invalid-writes",
|
|
46
|
+
"generated-update-empty",
|
|
47
|
+
"managed-without-effect",
|
|
48
|
+
"missing-permissions",
|
|
49
|
+
"invalid-permission",
|
|
50
|
+
"unknown-permission",
|
|
51
|
+
"removed-allow",
|
|
52
|
+
"unreachable-action",
|
|
53
|
+
"wildcard-permission",
|
|
54
|
+
"invalid-sign-in",
|
|
55
|
+
"invalid-connection",
|
|
56
|
+
"invalid-feedback",
|
|
57
|
+
"invalid-discovery",
|
|
58
|
+
"invalid-email",
|
|
59
|
+
"feedback-unanswerable",
|
|
60
|
+
"unknown-connection",
|
|
61
|
+
"unused-connection",
|
|
62
|
+
"invalid-prepare",
|
|
63
|
+
"invalid-tool-name",
|
|
64
|
+
"invalid-alignment",
|
|
65
|
+
"single-entity-model-metric",
|
|
66
|
+
"invalid-workflow",
|
|
67
|
+
"workflow_role_unknown",
|
|
68
|
+
"workflow_role_is_member",
|
|
69
|
+
"workflow_role_grants_nothing",
|
|
70
|
+
"workflow_role_wildcard",
|
|
71
|
+
"workflow_role_scoped",
|
|
72
|
+
"workflow_cron_never_fires",
|
|
73
|
+
"workflow_input_invalid",
|
|
74
|
+
"workflow_cron_invalid",
|
|
75
|
+
"workflow_run_missing",
|
|
76
|
+
"invalid-trigger",
|
|
77
|
+
"trigger_action_unknown",
|
|
78
|
+
"trigger_function_async",
|
|
79
|
+
"workflow_trigger_limit_exceeded",
|
|
80
|
+
"workflow_webhook_duplicate",
|
|
81
|
+
"workflow_webhook_input_invalid",
|
|
82
|
+
"workflow_webhook_mixed_triggers",
|
|
83
|
+
"workflow_webhook_signature_invalid",
|
|
84
|
+
"workflow_webhook_verification_invalid",
|
|
85
|
+
"workflow_webhook_headers_invalid",
|
|
86
|
+
"workflow_webhook_limit_exceeded",
|
|
87
|
+
];
|
|
88
|
+
/** A problem `check` found in an ontology definition. */
|
|
89
|
+
export const Diagnostic = Schema.Struct({
|
|
90
|
+
severity: Schema.Literals(["error", "warning", "info"]),
|
|
91
|
+
code: Schema.Literals(DIAGNOSTIC_CODES),
|
|
92
|
+
/** Where the problem is, for example `lead.properties.status.options[1]`. */
|
|
93
|
+
path: Schema.String,
|
|
94
|
+
message: Schema.String,
|
|
95
|
+
});
|
|
96
|
+
/** `defineOntology` found errors. Every diagnostic, including warnings, is attached. */
|
|
97
|
+
export class InvalidOntology extends Schema.TaggedError()("InvalidOntology", {
|
|
98
|
+
message: Schema.String,
|
|
99
|
+
diagnostics: Schema.Array(Diagnostic),
|
|
100
|
+
}) {
|
|
101
|
+
}
|
|
102
|
+
export function formatDiagnostics(diagnostics) {
|
|
103
|
+
return diagnostics
|
|
104
|
+
.map((diagnostic) => `${diagnostic.severity} ${diagnostic.path}: ${diagnostic.message} [${diagnostic.code}]`)
|
|
105
|
+
.join("\n");
|
|
106
|
+
}
|
package/dist/emails.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { Diagnostic } from "./diagnostics.js";
|
|
2
|
+
/**
|
|
3
|
+
* An email the workspace writes and the platform sends with a sign-in link, named by
|
|
4
|
+
* `User.sendSignInLink`. Every field is plain text, in which `{{name}}` stands for a value the
|
|
5
|
+
* action passes, and `{{member.name}}`, `{{member.firstName}}` and `{{workspace.name}}` for the
|
|
6
|
+
* recipient and the workspace. The platform lays the fields out, escapes them and adds the
|
|
7
|
+
* plain-text part; `action` labels the one button, which signs the person in and opens the path
|
|
8
|
+
* the action names. A field whose text is empty once filled in is left out.
|
|
9
|
+
*/
|
|
10
|
+
export interface EmailTemplate {
|
|
11
|
+
readonly subject: string;
|
|
12
|
+
/** A short line above the heading, such as "Review requested". */
|
|
13
|
+
readonly eyebrow?: string;
|
|
14
|
+
readonly heading: string;
|
|
15
|
+
/** A box naming what the email is about: a title, and a line below it. */
|
|
16
|
+
readonly card?: {
|
|
17
|
+
readonly title: string;
|
|
18
|
+
readonly detail?: string;
|
|
19
|
+
};
|
|
20
|
+
/** A quoted message, such as the sender's own note. */
|
|
21
|
+
readonly note?: string;
|
|
22
|
+
readonly paragraphs?: ReadonlyArray<string>;
|
|
23
|
+
/** The button's label. */
|
|
24
|
+
readonly action: string;
|
|
25
|
+
/** Small print at the bottom, such as why the person received the email. */
|
|
26
|
+
readonly footer?: string;
|
|
27
|
+
/**
|
|
28
|
+
* The address replies go to, such as `legal@example.com`. Without it, replies go to the member
|
|
29
|
+
* whose action sent the email, if a member did. The email is always sent from the platform's
|
|
30
|
+
* address under the workspace's name.
|
|
31
|
+
*/
|
|
32
|
+
readonly replyTo?: string;
|
|
33
|
+
}
|
|
34
|
+
/** The values every email may use besides those the action passes. */
|
|
35
|
+
export declare const BUILT_IN_EMAIL_VALUES: readonly ["member.name", "member.firstName", "workspace.name"];
|
|
36
|
+
/**
|
|
37
|
+
* The query parameter of the callback a sign-in link is requested with, naming the queued email it
|
|
38
|
+
* delivers. The platform reads it from Neon Auth's link and leaves it out of the path the person
|
|
39
|
+
* lands on.
|
|
40
|
+
*/
|
|
41
|
+
export declare const SIGN_IN_EMAIL_PARAMETER = "sign_in_email";
|
|
42
|
+
/** The most emails an ontology declares. */
|
|
43
|
+
export declare const MAX_EMAILS = 50;
|
|
44
|
+
/** The longest subject, in characters. */
|
|
45
|
+
export declare const MAX_EMAIL_SUBJECT = 200;
|
|
46
|
+
/** The longest other field, and the longest value an action passes, in characters. */
|
|
47
|
+
export declare const MAX_EMAIL_TEXT = 2000;
|
|
48
|
+
/** The most paragraphs of one email. */
|
|
49
|
+
export declare const MAX_EMAIL_PARAGRAPHS = 20;
|
|
50
|
+
/** The most values one email takes. */
|
|
51
|
+
export declare const MAX_EMAIL_VALUES = 50;
|
|
52
|
+
/** The longest path a sign-in link returns to. */
|
|
53
|
+
export declare const MAX_RETURN_PATH = 1024;
|
|
54
|
+
type Report = (code: Diagnostic["code"], path: string, message: string, severity?: Diagnostic["severity"]) => void;
|
|
55
|
+
/** The values an action must pass for this email: its placeholders that are not built in. */
|
|
56
|
+
export declare function emailValueNames(template: EmailTemplate): ReadonlyArray<string>;
|
|
57
|
+
/** The text with each placeholder replaced by its value; a value it does not have is empty. */
|
|
58
|
+
export declare function fillEmailText(text: string, values: Readonly<Record<string, string>>): string;
|
|
59
|
+
/**
|
|
60
|
+
* The path a sign-in link may return to: a path of the app, with its query, at most
|
|
61
|
+
* {@link MAX_RETURN_PATH} characters. Anything else, such as another origin, is undefined.
|
|
62
|
+
*/
|
|
63
|
+
export declare function appReturnPath(value: string): string | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* The declared emails by wire name, each checked: its fields, their lengths and their
|
|
66
|
+
* placeholders. `wireName` turns a camelCase name into its wire form, reporting one that cannot
|
|
67
|
+
* round-trip.
|
|
68
|
+
*/
|
|
69
|
+
export declare function emailOptions(value: unknown, report: Report, wireName: (name: string, path: string) => string | undefined): Readonly<Record<string, EmailTemplate>>;
|
|
70
|
+
export {};
|
package/dist/emails.js
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { isRecord } from "./authoring-names.js";
|
|
2
|
+
/** The values every email may use besides those the action passes. */
|
|
3
|
+
export const BUILT_IN_EMAIL_VALUES = ["member.name", "member.firstName", "workspace.name"];
|
|
4
|
+
/**
|
|
5
|
+
* The query parameter of the callback a sign-in link is requested with, naming the queued email it
|
|
6
|
+
* delivers. The platform reads it from Neon Auth's link and leaves it out of the path the person
|
|
7
|
+
* lands on.
|
|
8
|
+
*/
|
|
9
|
+
export const SIGN_IN_EMAIL_PARAMETER = "sign_in_email";
|
|
10
|
+
/** The most emails an ontology declares. */
|
|
11
|
+
export const MAX_EMAILS = 50;
|
|
12
|
+
/** The longest subject, in characters. */
|
|
13
|
+
export const MAX_EMAIL_SUBJECT = 200;
|
|
14
|
+
/** The longest other field, and the longest value an action passes, in characters. */
|
|
15
|
+
export const MAX_EMAIL_TEXT = 2000;
|
|
16
|
+
/** The most paragraphs of one email. */
|
|
17
|
+
export const MAX_EMAIL_PARAGRAPHS = 20;
|
|
18
|
+
/** The most values one email takes. */
|
|
19
|
+
export const MAX_EMAIL_VALUES = 50;
|
|
20
|
+
/** The longest path a sign-in link returns to. */
|
|
21
|
+
export const MAX_RETURN_PATH = 1024;
|
|
22
|
+
const FIELDS = [
|
|
23
|
+
"subject",
|
|
24
|
+
"eyebrow",
|
|
25
|
+
"heading",
|
|
26
|
+
"card",
|
|
27
|
+
"note",
|
|
28
|
+
"paragraphs",
|
|
29
|
+
"action",
|
|
30
|
+
"footer",
|
|
31
|
+
"replyTo",
|
|
32
|
+
];
|
|
33
|
+
const REQUIRED = ["subject", "heading", "action"];
|
|
34
|
+
const OPTIONAL_TEXT = ["eyebrow", "note", "footer"];
|
|
35
|
+
const PLACEHOLDER = /\{\{\s*([^{}]*?)\s*\}\}/g;
|
|
36
|
+
const VALUE_NAME = /^[A-Za-z][A-Za-z0-9_]*$/;
|
|
37
|
+
const EMAIL_ADDRESS = /^[^\s@<>",;]+@[^\s@<>",;.]+(?:\.[^\s@<>",;.]+)+$/;
|
|
38
|
+
function isBuiltIn(name) {
|
|
39
|
+
return BUILT_IN_EMAIL_VALUES.includes(name);
|
|
40
|
+
}
|
|
41
|
+
/** Every text of an email, with the path of its field. */
|
|
42
|
+
function emailTexts(template) {
|
|
43
|
+
return [
|
|
44
|
+
["subject", template.subject],
|
|
45
|
+
...(template.eyebrow === undefined ? [] : [["eyebrow", template.eyebrow]]),
|
|
46
|
+
["heading", template.heading],
|
|
47
|
+
...(template.card === undefined ? [] : [["card.title", template.card.title]]),
|
|
48
|
+
...(template.card?.detail === undefined
|
|
49
|
+
? []
|
|
50
|
+
: [["card.detail", template.card.detail]]),
|
|
51
|
+
...(template.note === undefined ? [] : [["note", template.note]]),
|
|
52
|
+
...(template.paragraphs ?? []).map((text, index) => [`paragraphs.${index}`, text]),
|
|
53
|
+
["action", template.action],
|
|
54
|
+
...(template.footer === undefined ? [] : [["footer", template.footer]]),
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
/** The placeholders of one text, in order. */
|
|
58
|
+
function placeholders(text) {
|
|
59
|
+
return [...text.matchAll(PLACEHOLDER)].map((match) => match[1]);
|
|
60
|
+
}
|
|
61
|
+
/** The values an action must pass for this email: its placeholders that are not built in. */
|
|
62
|
+
export function emailValueNames(template) {
|
|
63
|
+
const names = new Set();
|
|
64
|
+
for (const [, text] of emailTexts(template)) {
|
|
65
|
+
for (const name of placeholders(text)) {
|
|
66
|
+
if (!isBuiltIn(name)) {
|
|
67
|
+
names.add(name);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return [...names];
|
|
72
|
+
}
|
|
73
|
+
/** The text with each placeholder replaced by its value; a value it does not have is empty. */
|
|
74
|
+
export function fillEmailText(text, values) {
|
|
75
|
+
return text.replace(PLACEHOLDER, (_, name) => Object.hasOwn(values, name) ? values[name] : "");
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The path a sign-in link may return to: a path of the app, with its query, at most
|
|
79
|
+
* {@link MAX_RETURN_PATH} characters. Anything else, such as another origin, is undefined.
|
|
80
|
+
*/
|
|
81
|
+
export function appReturnPath(value) {
|
|
82
|
+
if (value.length > MAX_RETURN_PATH ||
|
|
83
|
+
!value.startsWith("/") ||
|
|
84
|
+
value.startsWith("//") ||
|
|
85
|
+
value.startsWith("/\\") ||
|
|
86
|
+
/[\u0000-\u001f\u007f]/.test(value)) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
const url = URL.parse(value, "https://return-path.invalid");
|
|
90
|
+
return url?.origin === "https://return-path.invalid"
|
|
91
|
+
? `${url.pathname}${url.search}${url.hash}`
|
|
92
|
+
: undefined;
|
|
93
|
+
}
|
|
94
|
+
function checkText(text, path, limit, report) {
|
|
95
|
+
if (typeof text !== "string" || text.trim() === "") {
|
|
96
|
+
report("invalid-email", path, `${path} is a text.`);
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
if (text.length > limit) {
|
|
100
|
+
report("invalid-email", path, `${path} has at most ${limit} characters.`);
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
const rest = text.replace(PLACEHOLDER, "");
|
|
104
|
+
if (rest.includes("{{") || rest.includes("}}")) {
|
|
105
|
+
report("invalid-email", path, "Write {{ and }} only around a value, as in {{agreement}}.");
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
let valid = true;
|
|
109
|
+
for (const name of placeholders(text)) {
|
|
110
|
+
if (!isBuiltIn(name) && !VALUE_NAME.test(name)) {
|
|
111
|
+
report("invalid-email", path, `{{${name}}} is not a value: use a name the action passes, such as {{agreement}}, or ` +
|
|
112
|
+
`${BUILT_IN_EMAIL_VALUES.map((value) => `{{${value}}}`).join(", ")}.`);
|
|
113
|
+
valid = false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return valid;
|
|
117
|
+
}
|
|
118
|
+
function emailTemplate(value, path, report) {
|
|
119
|
+
if (!isRecord(value)) {
|
|
120
|
+
report("invalid-email", path, "An email is { subject, heading, action, … } in plain text.");
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
let valid = true;
|
|
124
|
+
for (const key of Object.keys(value)) {
|
|
125
|
+
if (!FIELDS.includes(key)) {
|
|
126
|
+
report("invalid-email", `${path}.${key}`, `Unknown email field ${key}; an email has ${FIELDS.join(", ")}.`);
|
|
127
|
+
valid = false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
for (const key of REQUIRED) {
|
|
131
|
+
const limit = key === "subject" ? MAX_EMAIL_SUBJECT : MAX_EMAIL_TEXT;
|
|
132
|
+
valid = checkText(value[key], `${path}.${key}`, limit, report) && valid;
|
|
133
|
+
}
|
|
134
|
+
for (const key of OPTIONAL_TEXT) {
|
|
135
|
+
if (value[key] !== undefined) {
|
|
136
|
+
valid = checkText(value[key], `${path}.${key}`, MAX_EMAIL_TEXT, report) && valid;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (value.card !== undefined) {
|
|
140
|
+
const card = value.card;
|
|
141
|
+
if (!isRecord(card) || Object.keys(card).some((key) => key !== "title" && key !== "detail")) {
|
|
142
|
+
report("invalid-email", `${path}.card`, "card is { title, detail }.");
|
|
143
|
+
valid = false;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
valid = checkText(card.title, `${path}.card.title`, MAX_EMAIL_TEXT, report) && valid;
|
|
147
|
+
if (card.detail !== undefined) {
|
|
148
|
+
valid = checkText(card.detail, `${path}.card.detail`, MAX_EMAIL_TEXT, report) && valid;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (value.replyTo !== undefined &&
|
|
153
|
+
(typeof value.replyTo !== "string" ||
|
|
154
|
+
value.replyTo.length > 254 ||
|
|
155
|
+
!EMAIL_ADDRESS.test(value.replyTo))) {
|
|
156
|
+
report("invalid-email", `${path}.replyTo`, "replyTo is one email address, such as legal@example.com, without a name.");
|
|
157
|
+
valid = false;
|
|
158
|
+
}
|
|
159
|
+
if (value.paragraphs !== undefined) {
|
|
160
|
+
if (!Array.isArray(value.paragraphs) || value.paragraphs.length > MAX_EMAIL_PARAGRAPHS) {
|
|
161
|
+
report("invalid-email", `${path}.paragraphs`, `paragraphs is a list of at most ${MAX_EMAIL_PARAGRAPHS} texts.`);
|
|
162
|
+
valid = false;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
value.paragraphs.forEach((text, index) => {
|
|
166
|
+
valid = checkText(text, `${path}.paragraphs.${index}`, MAX_EMAIL_TEXT, report) && valid;
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (!valid) {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
const card = value.card;
|
|
174
|
+
return {
|
|
175
|
+
subject: value.subject,
|
|
176
|
+
...(value.eyebrow === undefined ? {} : { eyebrow: value.eyebrow }),
|
|
177
|
+
heading: value.heading,
|
|
178
|
+
...(card === undefined
|
|
179
|
+
? {}
|
|
180
|
+
: {
|
|
181
|
+
card: {
|
|
182
|
+
title: card.title,
|
|
183
|
+
...(card.detail === undefined ? {} : { detail: card.detail }),
|
|
184
|
+
},
|
|
185
|
+
}),
|
|
186
|
+
...(value.note === undefined ? {} : { note: value.note }),
|
|
187
|
+
...(value.paragraphs === undefined
|
|
188
|
+
? {}
|
|
189
|
+
: { paragraphs: [...value.paragraphs] }),
|
|
190
|
+
action: value.action,
|
|
191
|
+
...(value.footer === undefined ? {} : { footer: value.footer }),
|
|
192
|
+
...(value.replyTo === undefined ? {} : { replyTo: value.replyTo }),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* The declared emails by wire name, each checked: its fields, their lengths and their
|
|
197
|
+
* placeholders. `wireName` turns a camelCase name into its wire form, reporting one that cannot
|
|
198
|
+
* round-trip.
|
|
199
|
+
*/
|
|
200
|
+
export function emailOptions(value, report, wireName) {
|
|
201
|
+
if (value === undefined) {
|
|
202
|
+
return {};
|
|
203
|
+
}
|
|
204
|
+
if (!isRecord(value)) {
|
|
205
|
+
report("invalid-email", "emails", "emails maps each email's name to { subject, heading, … }.");
|
|
206
|
+
return {};
|
|
207
|
+
}
|
|
208
|
+
const names = Object.keys(value);
|
|
209
|
+
if (names.length > MAX_EMAILS) {
|
|
210
|
+
report("invalid-email", "emails", `An ontology declares at most ${MAX_EMAILS} emails.`);
|
|
211
|
+
}
|
|
212
|
+
const emails = {};
|
|
213
|
+
for (const name of names) {
|
|
214
|
+
const wire = wireName(name, `emails.${name}`);
|
|
215
|
+
const template = emailTemplate(value[name], `emails.${name}`, report);
|
|
216
|
+
if (wire !== undefined && template !== undefined) {
|
|
217
|
+
emails[wire] = template;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return emails;
|
|
221
|
+
}
|